summaryrefslogtreecommitdiff
path: root/writerfilter/source
diff options
context:
space:
mode:
Diffstat (limited to 'writerfilter/source')
-rw-r--r--writerfilter/source/dmapper/BorderHandler.cxx182
-rw-r--r--writerfilter/source/dmapper/BorderHandler.hxx81
-rw-r--r--writerfilter/source/dmapper/CellColorHandler.cxx235
-rw-r--r--writerfilter/source/dmapper/CellColorHandler.hxx64
-rw-r--r--writerfilter/source/dmapper/CellMarginHandler.cxx120
-rw-r--r--writerfilter/source/dmapper/CellMarginHandler.hxx69
-rw-r--r--writerfilter/source/dmapper/ConversionHelper.cxx639
-rw-r--r--writerfilter/source/dmapper/ConversionHelper.hxx64
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx4877
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableHandler.cxx743
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableHandler.hxx97
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableManager.cxx445
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableManager.hxx121
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx3722
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx539
-rw-r--r--writerfilter/source/dmapper/FontTable.cxx677
-rw-r--r--writerfilter/source/dmapper/FontTable.hxx106
-rw-r--r--writerfilter/source/dmapper/GraphicHelpers.cxx223
-rw-r--r--writerfilter/source/dmapper/GraphicHelpers.hxx48
-rw-r--r--writerfilter/source/dmapper/GraphicImport.cxx2261
-rw-r--r--writerfilter/source/dmapper/GraphicImport.hxx128
-rw-r--r--writerfilter/source/dmapper/LFOTable.cxx606
-rw-r--r--writerfilter/source/dmapper/LFOTable.hxx65
-rw-r--r--writerfilter/source/dmapper/ListTable.cxx1300
-rw-r--r--writerfilter/source/dmapper/ListTable.hxx89
-rw-r--r--writerfilter/source/dmapper/MeasureHandler.cxx132
-rw-r--r--writerfilter/source/dmapper/MeasureHandler.hxx66
-rw-r--r--writerfilter/source/dmapper/ModelEventListener.cxx96
-rw-r--r--writerfilter/source/dmapper/ModelEventListener.hxx51
-rw-r--r--writerfilter/source/dmapper/OLEHandler.cxx246
-rw-r--r--writerfilter/source/dmapper/OLEHandler.hxx107
-rw-r--r--writerfilter/source/dmapper/PageBordersHandler.cxx121
-rw-r--r--writerfilter/source/dmapper/PageBordersHandler.hxx57
-rw-r--r--writerfilter/source/dmapper/PropertyIds.cxx345
-rw-r--r--writerfilter/source/dmapper/PropertyIds.hxx298
-rw-r--r--writerfilter/source/dmapper/PropertyMap.cxx1063
-rw-r--r--writerfilter/source/dmapper/PropertyMap.hxx548
-rw-r--r--writerfilter/source/dmapper/SectionColumnHandler.cxx118
-rw-r--r--writerfilter/source/dmapper/SectionColumnHandler.hxx76
-rw-r--r--writerfilter/source/dmapper/SettingsTable.cxx87
-rw-r--r--writerfilter/source/dmapper/SettingsTable.hxx46
-rw-r--r--writerfilter/source/dmapper/StyleSheetTable.cxx1718
-rw-r--r--writerfilter/source/dmapper/StyleSheetTable.hxx150
-rw-r--r--writerfilter/source/dmapper/TDefTableHandler.cxx323
-rw-r--r--writerfilter/source/dmapper/TDefTableHandler.hxx86
-rw-r--r--writerfilter/source/dmapper/TablePropertiesHandler.cxx217
-rw-r--r--writerfilter/source/dmapper/TablePropertiesHandler.hxx83
-rw-r--r--writerfilter/source/dmapper/TblStylePrHandler.cxx69
-rw-r--r--writerfilter/source/dmapper/TblStylePrHandler.hxx64
-rw-r--r--writerfilter/source/dmapper/ThemeTable.cxx196
-rw-r--r--writerfilter/source/dmapper/ThemeTable.hxx62
-rw-r--r--writerfilter/source/dmapper/makefile.mk73
-rw-r--r--writerfilter/source/doctok/Dff.cxx518
-rw-r--r--writerfilter/source/doctok/Dff.hxx153
-rw-r--r--writerfilter/source/doctok/DffImpl.cxx518
-rw-r--r--writerfilter/source/doctok/PLCF.hxx195
-rw-r--r--writerfilter/source/doctok/WW8Annotation.cxx37
-rw-r--r--writerfilter/source/doctok/WW8BinTable.hxx88
-rw-r--r--writerfilter/source/doctok/WW8BinTableImpl.cxx106
-rw-r--r--writerfilter/source/doctok/WW8BinTableImpl.hxx98
-rw-r--r--writerfilter/source/doctok/WW8Clx.cxx84
-rw-r--r--writerfilter/source/doctok/WW8Clx.hxx93
-rw-r--r--writerfilter/source/doctok/WW8CpAndFc.cxx130
-rw-r--r--writerfilter/source/doctok/WW8CpAndFc.hxx360
-rw-r--r--writerfilter/source/doctok/WW8DocumentImpl.cxx2277
-rw-r--r--writerfilter/source/doctok/WW8DocumentImpl.hxx827
-rw-r--r--writerfilter/source/doctok/WW8FKP.hxx133
-rw-r--r--writerfilter/source/doctok/WW8FKPImpl.cxx240
-rw-r--r--writerfilter/source/doctok/WW8FKPImpl.hxx214
-rw-r--r--writerfilter/source/doctok/WW8FontTable.cxx118
-rw-r--r--writerfilter/source/doctok/WW8LFOLevel.cxx45
-rw-r--r--writerfilter/source/doctok/WW8LFOTable.cxx129
-rw-r--r--writerfilter/source/doctok/WW8ListTable.cxx153
-rw-r--r--writerfilter/source/doctok/WW8OutputWithDepth.cxx49
-rw-r--r--writerfilter/source/doctok/WW8OutputWithDepth.hxx53
-rw-r--r--writerfilter/source/doctok/WW8Picture.cxx208
-rw-r--r--writerfilter/source/doctok/WW8PieceTable.hxx175
-rw-r--r--writerfilter/source/doctok/WW8PieceTableImpl.cxx299
-rw-r--r--writerfilter/source/doctok/WW8PieceTableImpl.hxx75
-rw-r--r--writerfilter/source/doctok/WW8PropertySetImpl.cxx403
-rw-r--r--writerfilter/source/doctok/WW8PropertySetImpl.hxx144
-rw-r--r--writerfilter/source/doctok/WW8ResourceModelImpl.cxx501
-rw-r--r--writerfilter/source/doctok/WW8ResourceModelImpl.hxx318
-rw-r--r--writerfilter/source/doctok/WW8StreamImpl.cxx205
-rw-r--r--writerfilter/source/doctok/WW8StreamImpl.hxx65
-rw-r--r--writerfilter/source/doctok/WW8StructBase.cxx191
-rw-r--r--writerfilter/source/doctok/WW8StructBase.hxx316
-rw-r--r--writerfilter/source/doctok/WW8Sttbf.cxx89
-rw-r--r--writerfilter/source/doctok/WW8Sttbf.hxx103
-rw-r--r--writerfilter/source/doctok/WW8StyleSheet.cxx211
-rw-r--r--writerfilter/source/doctok/WW8Table.cxx204
-rw-r--r--writerfilter/source/doctok/WW8Text.cxx76
-rw-r--r--writerfilter/source/doctok/WW8inc.xsl106
-rw-r--r--writerfilter/source/doctok/WW8sprms.xsl66
-rw-r--r--writerfilter/source/doctok/WW8xmi.xsl184
-rw-r--r--writerfilter/source/doctok/XNoteHelper.hxx143
-rw-r--r--writerfilter/source/doctok/XNoteHelperImpl.hxx168
-rw-r--r--writerfilter/source/doctok/analyzer.xsl39
-rw-r--r--writerfilter/source/doctok/doctokLoggers.hxx40
-rw-r--r--writerfilter/source/doctok/doctokutil.cxx53
-rw-r--r--writerfilter/source/doctok/escher.html207
-rw-r--r--writerfilter/source/doctok/escherdoc.xsl145
-rw-r--r--writerfilter/source/doctok/genqnametostr33
-rw-r--r--writerfilter/source/doctok/makefile.mk156
-rw-r--r--writerfilter/source/doctok/qnametostr.xsl41
-rw-r--r--writerfilter/source/doctok/qnametostrfooter2
-rw-r--r--writerfilter/source/doctok/qnametostrheader36
-rwxr-xr-xwriterfilter/source/doctok/replacesprmids517
-rw-r--r--writerfilter/source/doctok/resourceidmapper.xsl125
-rw-r--r--writerfilter/source/doctok/resourceidmapperback.xsl125
-rw-r--r--writerfilter/source/doctok/resourceids.xsl205
-rw-r--r--writerfilter/source/doctok/resources.xmi54986
-rw-r--r--writerfilter/source/doctok/resources.xsl915
-rw-r--r--writerfilter/source/doctok/resourcesimpl.xsl855
-rw-r--r--writerfilter/source/doctok/resourcetools.xsl566
-rw-r--r--writerfilter/source/doctok/sprmcodetostr.xsl39
-rw-r--r--writerfilter/source/doctok/sprmids.xsl82
-rw-r--r--writerfilter/source/doctok/tidyxmi.xsl120
-rw-r--r--writerfilter/source/doctok/util.hxx57
-rw-r--r--writerfilter/source/doctok/xmigen.el127
-rw-r--r--writerfilter/source/doctok/xmistat.xsl37
-rwxr-xr-xwriterfilter/source/doctok/xmitocpp34
-rw-r--r--writerfilter/source/filter/ImportFilter.cxx245
-rw-r--r--writerfilter/source/filter/WriterFilter.cxx79
-rw-r--r--writerfilter/source/filter/WriterFilter.hxx104
-rw-r--r--writerfilter/source/filter/WriterFilterDetection.cxx200
-rw-r--r--writerfilter/source/filter/WriterFilterDetection.hxx76
-rw-r--r--writerfilter/source/filter/makefile.mk51
-rw-r--r--writerfilter/source/odiapi/qname/resource/office2003/WordprocessingML Schemas/wordnetaux.xsdbin0 -> 48598 bytes
-rw-r--r--writerfilter/source/odiapi/qname/resource/office2003/WordprocessingML Schemas/xsdlib.xsdbin0 -> 7918 bytes
-rw-r--r--writerfilter/source/odiapi/qname/resource/rdfxml.rng453
-rw-r--r--writerfilter/source/odiapi/qname/resource/rng.rng331
-rw-r--r--writerfilter/source/odiapi/qname/resource/rtf.rtfs1385
-rw-r--r--writerfilter/source/ooxml/Handler.cxx348
-rw-r--r--writerfilter/source/ooxml/Handler.hxx145
-rw-r--r--writerfilter/source/ooxml/OOXMLBinaryObjectReference.cxx86
-rw-r--r--writerfilter/source/ooxml/OOXMLBinaryObjectReference.hxx55
-rw-r--r--writerfilter/source/ooxml/OOXMLDocumentImpl.cxx386
-rw-r--r--writerfilter/source/ooxml/OOXMLDocumentImpl.hxx112
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandler.cxx2436
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandler.hxx696
-rw-r--r--writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx225
-rw-r--r--writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx114
-rw-r--r--writerfilter/source/ooxml/OOXMLFastHelper.hxx221
-rw-r--r--writerfilter/source/ooxml/OOXMLFastTokenHandler.cxx119
-rw-r--r--writerfilter/source/ooxml/OOXMLFastTokenHandler.hxx65
-rw-r--r--writerfilter/source/ooxml/OOXMLParserState.cxx275
-rw-r--r--writerfilter/source/ooxml/OOXMLParserState.hxx102
-rw-r--r--writerfilter/source/ooxml/OOXMLPropertySet.hxx82
-rw-r--r--writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx777
-rw-r--r--writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx298
-rw-r--r--writerfilter/source/ooxml/OOXMLStreamImpl.cxx333
-rw-r--r--writerfilter/source/ooxml/OOXMLStreamImpl.hxx95
-rw-r--r--writerfilter/source/ooxml/RefAndPointer.hxx119
-rw-r--r--writerfilter/source/ooxml/analyzer.xsl46
-rw-r--r--writerfilter/source/ooxml/checkmodel.xsl167
-rw-r--r--writerfilter/source/ooxml/dummyannotate.xsl845
-rw-r--r--writerfilter/source/ooxml/fastresources.xsl116
-rw-r--r--writerfilter/source/ooxml/fastresources_.xsl99
-rw-r--r--writerfilter/source/ooxml/fastresources_dml-baseStylesheet.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_dml-baseTypes.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_dml-chartDrawing.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_dml-documentProperties.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_dml-graphicalObject.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_dml-shape3DCamera.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_dml-shape3DLighting.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_dml-shape3DScene.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_dml-shape3DStyles.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_dml-shapeEffects.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_dml-shapeGeometry.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_dml-shapeLineProperties.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_dml-shapeProperties.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_dml-styleDefaults.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_dml-stylesheet.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_dml-textCharacter.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_dml-wordprocessingDrawing.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_shared-math.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_shared-relationshipReference.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_sml-customXmlMappings.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_vml-main.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_vml-officeDrawing.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_vml-wordprocessingDrawing.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresources_wml.xsl98
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl.xsl95
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_dml-baseStylesheet.xsl93
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_dml-baseTypes.xsl93
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_dml-chartDrawing.xsl93
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_dml-documentProperties.xsl93
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_dml-graphicalObject.xsl93
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_dml-shape3DCamera.xsl93
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_dml-shape3DLighting.xsl93
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_dml-shape3DScene.xsl93
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_dml-shape3DStyles.xsl93
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_dml-shapeEffects.xsl93
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_dml-shapeGeometry.xsl93
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_dml-shapeLineProperties.xsl93
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_dml-shapeProperties.xsl93
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_dml-styleDefaults.xsl93
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_dml-stylesheet.xsl93
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_dml-textCharacter.xsl93
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_dml-wordprocessingDrawing.xsl94
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_shared-math.xsl93
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_shared-relationshipReference.xsl93
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_sml-customXmlMappings.xsl93
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_vml-main.xsl94
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_vml-officeDrawing.xsl94
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_vml-wordprocessingDrawing.xsl94
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_wml.xsl94
-rw-r--r--writerfilter/source/ooxml/fasttokens.xsl95
-rw-r--r--writerfilter/source/ooxml/fasttokensimpl.xsl77
-rw-r--r--writerfilter/source/ooxml/gperffasttokenhandler.xsl72
-rw-r--r--writerfilter/source/ooxml/makefile.mk271
-rw-r--r--writerfilter/source/ooxml/model.xml23181
-rwxr-xr-xwriterfilter/source/ooxml/modelcleanup3
-rw-r--r--writerfilter/source/ooxml/modelcleanup.xsl196
-rw-r--r--writerfilter/source/ooxml/modelpreprocess.xsl224
-rw-r--r--writerfilter/source/ooxml/namespace_preprocess.pl65
-rw-r--r--writerfilter/source/ooxml/namespaceids.xsl89
-rw-r--r--writerfilter/source/ooxml/ooxmlLoggers.hxx38
-rw-r--r--writerfilter/source/ooxml/qnametostr.xsl73
-rw-r--r--writerfilter/source/ooxml/resourceids.xsl85
-rw-r--r--writerfilter/source/ooxml/resourcestools.xsl2338
-rwxr-xr-xwriterfilter/source/ooxml/rngtocxx32
-rw-r--r--writerfilter/source/ooxml/tokenxmlfooter1
-rw-r--r--writerfilter/source/ooxml/tokenxmlheader1
-rw-r--r--writerfilter/source/ooxml/values.xsl88
-rw-r--r--writerfilter/source/ooxml/valuesimpl.xsl85
-rw-r--r--writerfilter/source/resourcemodel/TagLogger.cxx331
-rw-r--r--writerfilter/source/resourcemodel/WW8Analyzer.cxx216
-rw-r--r--writerfilter/source/resourcemodel/WW8Analyzer.hxx99
-rw-r--r--writerfilter/source/resourcemodel/analyzerfooter4
-rw-r--r--writerfilter/source/resourcemodel/analyzerheader36
-rwxr-xr-xwriterfilter/source/resourcemodel/genqnametostr35
-rw-r--r--writerfilter/source/resourcemodel/makefile.mk189
-rw-r--r--writerfilter/source/resourcemodel/qnametostrfooter24
-rw-r--r--writerfilter/source/resourcemodel/qnametostrheader57
-rw-r--r--writerfilter/source/resourcemodel/resourcemodel.cxx569
-rw-r--r--writerfilter/source/resourcemodel/resourcemodel.hxx112
-rw-r--r--writerfilter/source/resourcemodel/sprmcodetostrfooter1
-rw-r--r--writerfilter/source/resourcemodel/sprmcodetostrheader50
-rw-r--r--writerfilter/source/resourcemodel/util.cxx400
-rw-r--r--writerfilter/source/rtftok/FlexLexer.h149
-rw-r--r--writerfilter/source/rtftok/RTFParseException.cxx33
-rw-r--r--writerfilter/source/rtftok/RTFScanner.lex333
-rw-r--r--writerfilter/source/rtftok/RTFScanner.skl1537
-rw-r--r--writerfilter/source/rtftok/makefile.mk82
246 files changed, 141650 insertions, 0 deletions
diff --git a/writerfilter/source/dmapper/BorderHandler.cxx b/writerfilter/source/dmapper/BorderHandler.cxx
new file mode 100644
index 000000000000..66ca373b6465
--- /dev/null
+++ b/writerfilter/source/dmapper/BorderHandler.cxx
@@ -0,0 +1,182 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <BorderHandler.hxx>
+#include <PropertyMap.hxx>
+#include <doctok/resourceids.hxx>
+#include <ConversionHelper.hxx>
+#include <com/sun/star/table/BorderLine.hpp>
+#include <ooxml/resourceids.hxx>
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+//using namespace ::std;
+
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+BorderHandler::BorderHandler( bool bOOXML ) :
+ m_nCurrentBorderPosition( BORDER_TOP ),
+ m_nLineWidth(0),
+ m_nLineType(0),
+ m_nLineColor(0),
+ m_nLineDistance(0),
+ m_bOOXML( bOOXML )
+{
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+BorderHandler::~BorderHandler()
+{
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void BorderHandler::attribute(Id rName, Value & rVal)
+{
+ sal_Int32 nIntValue = rVal.getInt();
+ /* WRITERFILTERSTATUS: table: BorderHandler_attributedata */
+ switch( rName )
+ {
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_rgbrc:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rVal.getProperties();
+ if( pProperties.get())
+ {
+ pProperties->resolve(*this);
+ ConversionHelper::MakeBorderLine( m_nLineWidth, m_nLineType, m_nLineColor,
+ m_aBorderLines[m_nCurrentBorderPosition], m_bOOXML );
+ OSL_ENSURE(m_nCurrentBorderPosition < BORDER_COUNT, "too many border values");
+ ++m_nCurrentBorderPosition;
+ }
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_DPTLINEWIDTH: // 0x2871
+ // width of a single line in 1/8 pt, max of 32 pt -> twip * 5 / 2.
+ m_nLineWidth = ConversionHelper::convertTwipToMM100( nIntValue * 5 / 2 );
+ break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCTYPE: // 0x2872
+ m_nLineType = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Border_color:
+ case NS_rtf::LN_ICO: // 0x2873
+ m_nLineColor = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_DPTSPACE: // border distance in points
+ m_nLineDistance = ConversionHelper::convertTwipToMM100( nIntValue * 20 );
+ break;
+ case NS_rtf::LN_FSHADOW: // 0x2875
+ //if 1 then line has shadow - unsupported
+ case NS_rtf::LN_FFRAME: // 0x2876
+ case NS_rtf::LN_UNUSED2_15: // 0x2877
+ // ignored
+ break;
+ case NS_ooxml::LN_CT_Border_themeTint: break;
+ case NS_ooxml::LN_CT_Border_themeColor: break;
+ default:
+ OSL_ENSURE( false, "unknown attribute");
+ }
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void BorderHandler::sprm(Sprm & rSprm)
+{
+ /* WRITERFILTERSTATUS: table: BorderHandler_sprm */
+ switch( rSprm.getId())
+ {
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblBorders_top:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblBorders_left:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblBorders_bottom:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblBorders_right:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblBorders_insideH:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblBorders_insideV:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+ ConversionHelper::MakeBorderLine( m_nLineWidth, m_nLineType, m_nLineColor,
+ m_aBorderLines[rSprm.getId() - NS_ooxml::LN_CT_TblBorders_top], m_bOOXML );
+
+ m_aFilledLines[ rSprm.getId( ) - NS_ooxml::LN_CT_TblBorders_top] = true;
+ }
+ break;
+ default:;
+ }
+}
+/*-- 24.04.2007 09:09:01---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+PropertyMapPtr BorderHandler::getProperties()
+{
+ static const PropertyIds aPropNames[BORDER_COUNT] =
+ {
+ 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 || m_nCurrentBorderPosition )
+ {
+ for( sal_Int32 nProp = 0; nProp < BORDER_COUNT; ++nProp)
+ {
+ if ( m_aFilledLines[nProp] ) {
+ pPropertyMap->Insert( aPropNames[nProp], false, uno::makeAny( m_aBorderLines[nProp] ) );
+ }
+ }
+ }
+ return pPropertyMap;
+}
+/*-- 14.11.2007 12:42:52---------------------------------------------------
+ used only in OOXML import
+ -----------------------------------------------------------------------*/
+table::BorderLine BorderHandler::getBorderLine()
+{
+ table::BorderLine aBorderLine;
+ ConversionHelper::MakeBorderLine( m_nLineWidth, m_nLineType, m_nLineColor, aBorderLine, m_bOOXML );
+ return aBorderLine;
+}
+
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/BorderHandler.hxx b/writerfilter/source/dmapper/BorderHandler.hxx
new file mode 100644
index 000000000000..0fc722227191
--- /dev/null
+++ b/writerfilter/source/dmapper/BorderHandler.hxx
@@ -0,0 +1,81 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_BORDERHANDLER_HXX
+#define INCLUDED_BORDERHANDLER_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <boost/shared_ptr.hpp>
+#include <com/sun/star/table/BorderLine.hpp>
+
+namespace writerfilter {
+namespace dmapper
+{
+class PropertyMap;
+class WRITERFILTER_DLLPRIVATE BorderHandler : public Properties
+{
+public:
+ //todo: order is a guess
+ enum BorderPosition
+ {
+ BORDER_TOP,
+ BORDER_LEFT,
+ BORDER_BOTTOM,
+ BORDER_RIGHT,
+ BORDER_HORIZONTAL,
+ BORDER_VERTICAL,
+ BORDER_COUNT
+ };
+
+private:
+ sal_Int8 m_nCurrentBorderPosition;
+ //values of the current border
+ sal_Int32 m_nLineWidth;
+ sal_Int32 m_nLineType;
+ sal_Int32 m_nLineColor;
+ sal_Int32 m_nLineDistance;
+ bool m_bOOXML;
+
+ bool m_aFilledLines[BORDER_COUNT];
+ ::com::sun::star::table::BorderLine m_aBorderLines[BORDER_COUNT];
+
+public:
+ BorderHandler( bool bOOXML );
+ virtual ~BorderHandler();
+
+ // Properties
+ virtual void attribute(Id Name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ ::boost::shared_ptr<PropertyMap> getProperties();
+ ::com::sun::star::table::BorderLine getBorderLine();
+ sal_Int32 getLineDistance() const { return m_nLineDistance;}
+};
+typedef boost::shared_ptr< BorderHandler > BorderHandlerPtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/CellColorHandler.cxx b/writerfilter/source/dmapper/CellColorHandler.cxx
new file mode 100644
index 000000000000..8220a55a60fd
--- /dev/null
+++ b/writerfilter/source/dmapper/CellColorHandler.cxx
@@ -0,0 +1,235 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <CellColorHandler.hxx>
+#include <PropertyMap.hxx>
+#include <doctok/resourceids.hxx>
+#include <ConversionHelper.hxx>
+#include <ooxml/resourceids.hxx>
+
+#define OOXML_COLOR_AUTO 0x0a //todo: AutoColor needs symbol
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+using namespace ::writerfilter;
+//using namespace ::std;
+
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+CellColorHandler::CellColorHandler() :
+ m_nShadowType( 0 ),
+ m_nColor( 0xffffffff ),
+ m_nFillColor( 0xffffffff ),
+ m_bParagraph( false )
+{
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+CellColorHandler::~CellColorHandler()
+{
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void CellColorHandler::attribute(Id rName, Value & rVal)
+{
+ sal_Int32 nIntValue = rVal.getInt();
+ (void)nIntValue;
+ (void)rName;
+ /* WRITERFILTERSTATUS: table: CellColor_attributedata */
+ switch( rName )
+ {
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_cellTopColor:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_cellLeftColor:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_cellBottomColor:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_cellRightColor:
+ // nIntValue contains the color, directly
+ break;
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Shd_val:
+ {
+ //might be clear, pct5...90, some hatch types
+ //TODO: The values need symbolic names!
+ m_nShadowType = nIntValue; //clear == 0, solid: 1, pct5: 2, pct50:8, pct95: x3c, horzStripe:0x0e, thinVertStripe: 0x15
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Shd_fill:
+ if( nIntValue == OOXML_COLOR_AUTO )
+ nIntValue = 0xffffff; //fill color auto means white
+ m_nFillColor = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Shd_color:
+ if( nIntValue == OOXML_COLOR_AUTO )
+ nIntValue = 0; //shading color auto means black
+ //color of the shading
+ m_nColor = nIntValue;
+ break;
+// case NS_rtf::LN_rgbrc:
+// {
+// writerfilter::Reference<Properties>::Pointer_t pProperties = rVal.getProperties();
+// if( pProperties.get())
+// {
+// pProperties->resolve(*this);
+// //
+// }
+// }
+// break;
+ case NS_ooxml::LN_CT_Shd_themeFill:
+ case NS_ooxml::LN_CT_Shd_themeFillTint:
+ case NS_ooxml::LN_CT_Shd_themeFillShade:
+ // ignored
+ break;
+ default:
+ OSL_ENSURE( false, "unknown attribute");
+ }
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void CellColorHandler::sprm(Sprm & rSprm)
+{
+ (void)rSprm;
+}
+/*-- 24.04.2007 09:09:01---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+TablePropertyMapPtr CellColorHandler::getProperties()
+{
+ TablePropertyMapPtr pPropertyMap(new TablePropertyMap);
+//code from binary word filter
+ static const sal_Int32 eMSGrayScale[] =
+ {
+ // Nul-Brush
+ 0, // 0
+ // Solid-Brush
+ 1000, // 1
+ // percent values
+ 50, // 2
+ 100, // 3
+ 200, // 4
+ 250, // 5
+ 300, // 6
+ 400, // 7
+ 500, // 8
+ 600, // 9
+ 700, // 10
+ 750, // 11
+ 800, // 12
+ 900, // 13
+ 333, // 14 Dark Horizontal
+ 333, // 15 Dark Vertical
+ 333, // 16 Dark Forward Diagonal
+ 333, // 17 Dark Backward Diagonal
+ 333, // 18 Dark Cross
+ 333, // 19 Dark Diagonal Cross
+ 333, // 20 Horizontal
+ 333, // 21 Vertical
+ 333, // 22 Forward Diagonal
+ 333, // 23 Backward Diagonal
+ 333, // 24 Cross
+ 333, // 25 Diagonal Cross
+ // some undefined values
+ 500, // 26
+ 500, // 27
+ 500, // 28
+ 500, // 29
+ 500, // 30
+ 500, // 31
+ 500, // 32
+ 500, // 33
+ 500, // 34
+ // different shading types
+ 25, // 35
+ 75, // 36
+ 125, // 37
+ 150, // 38
+ 175, // 39
+ 225, // 40
+ 275, // 41
+ 325, // 42
+ 350, // 43
+ 375, // 44
+ 425, // 45
+ 450, // 46
+ 475, // 47
+ 525, // 48
+ 550, // 49
+ 575, // 50
+ 625, // 51
+ 650, // 52
+ 675, // 53
+ 725, // 54
+ 775, // 55
+ 825, // 56
+ 850, // 57
+ 875, // 58
+ 925, // 59
+ 950, // 60
+ 975, // 61
+ // und zu guter Letzt:
+ 970
+ };// 62
+ if( m_nShadowType >= (sal_Int32)(sizeof( eMSGrayScale ) / sizeof ( eMSGrayScale[ 0 ] )) )
+ m_nShadowType = 0;
+
+ sal_Int32 nWW8BrushStyle = eMSGrayScale[m_nShadowType];
+ sal_Int32 nApplyColor = 0;
+ if( !nWW8BrushStyle )
+ {
+ // Null-Brush
+ 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;
+ }
+
+ pPropertyMap->Insert( m_bParagraph ? PROP_PARA_BACK_COLOR : PROP_BACK_COLOR, false,
+ uno::makeAny( nApplyColor ));
+ return pPropertyMap;
+}
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/CellColorHandler.hxx b/writerfilter/source/dmapper/CellColorHandler.hxx
new file mode 100644
index 000000000000..3e6b1bb2db70
--- /dev/null
+++ b/writerfilter/source/dmapper/CellColorHandler.hxx
@@ -0,0 +1,64 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_CELLCOLORHANDLER_HXX
+#define INCLUDED_CELLCOLORHANDLER_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <boost/shared_ptr.hpp>
+//#include <com/sun/star/table/TableBorder.hpp>
+#include <com/sun/star/table/BorderLine.hpp>
+
+namespace writerfilter {
+namespace dmapper
+{
+class TablePropertyMap;
+class WRITERFILTER_DLLPRIVATE CellColorHandler : public Properties
+{
+public:
+ sal_Int32 m_nShadowType;
+ sal_Int32 m_nColor;
+ sal_Int32 m_nFillColor;
+ bool m_bParagraph;
+private:
+
+public:
+ CellColorHandler( );
+ virtual ~CellColorHandler();
+
+ // Properties
+ virtual void attribute(Id Name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ ::boost::shared_ptr<TablePropertyMap> getProperties();
+
+ void setParagraph() { m_bParagraph = true; }
+};
+typedef boost::shared_ptr< CellColorHandler > CellColorHandlerPtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/CellMarginHandler.cxx b/writerfilter/source/dmapper/CellMarginHandler.cxx
new file mode 100644
index 000000000000..bfea8a6b25f9
--- /dev/null
+++ b/writerfilter/source/dmapper/CellMarginHandler.cxx
@@ -0,0 +1,120 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <CellMarginHandler.hxx>
+#include <PropertyMap.hxx>
+#include <doctok/resourceids.hxx>
+#include <ConversionHelper.hxx>
+#include <ooxml/resourceids.hxx>
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+using namespace ::writerfilter;
+//using namespace ::std;
+
+/*-- 18.02.2008 12:36:51---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+CellMarginHandler::CellMarginHandler() :
+ m_nValue( 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 )
+{
+}
+/*-- 18.02.2008 12:36:51---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+CellMarginHandler::~CellMarginHandler()
+{
+}
+/*-- 18.02.2008 12:36:51---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void CellMarginHandler::attribute(Id rName, Value & rVal)
+{
+ sal_Int32 nIntValue = rVal.getInt();
+ (void)nIntValue;
+ (void)rName;
+ /* WRITERFILTERSTATUS: table: CellColor_attributedata */
+ switch( rName )
+ {
+ case NS_ooxml::LN_CT_TblWidth_w:
+ m_nValue = ConversionHelper::convertTwipToMM100( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_TblWidth_type:
+ OSL_ENSURE( NS_ooxml::LN_Value_ST_TblWidth_dxa == sal::static_int_cast<Id>(nIntValue), "cell margins work for absolute values, only");
+ break;
+ default:
+ OSL_ENSURE( false, "unknown attribute");
+ }
+}
+/*-- 18.02.2008 12:36:51---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void CellMarginHandler::sprm(Sprm & rSprm)
+{
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ pProperties.get()->resolve( *this );
+ switch( rSprm.getId() )
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblCellMar_top:
+ m_nTopMargin = m_nValue;
+ m_bTopMarginValid = true;
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblCellMar_left:
+ m_nLeftMargin = m_nValue;
+ m_bLeftMarginValid = true;
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblCellMar_bottom:
+ m_nBottomMargin = m_nValue;
+ m_bBottomMarginValid = true;
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblCellMar_right:
+ m_nRightMargin = m_nValue;
+ m_bRightMarginValid = true;
+ break;
+ default:
+ OSL_ENSURE( false, "unknown attribute");
+ }
+ }
+ m_nValue = 0;
+}
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/CellMarginHandler.hxx b/writerfilter/source/dmapper/CellMarginHandler.hxx
new file mode 100644
index 000000000000..5f01df47a347
--- /dev/null
+++ b/writerfilter/source/dmapper/CellMarginHandler.hxx
@@ -0,0 +1,69 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_CELLMARGINHANDLER_HXX
+#define INCLUDED_CELLMARGINHANDLER_HXX
+
+#ifndef INCLUDED_WRITERFILTERDLLAPI_H
+#include <WriterFilterDllApi.hxx>
+#endif
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <boost/shared_ptr.hpp>
+
+namespace writerfilter {
+namespace dmapper
+{
+class TablePropertyMap;
+class WRITERFILTER_DLLPRIVATE CellMarginHandler : public Properties
+{
+private:
+ sal_Int32 m_nValue;
+
+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();
+
+ // Properties
+ virtual void attribute(Id Name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ ::boost::shared_ptr<TablePropertyMap> getProperties();
+
+};
+typedef boost::shared_ptr< CellMarginHandler > CellMarginHandlerPtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/ConversionHelper.cxx b/writerfilter/source/dmapper/ConversionHelper.cxx
new file mode 100644
index 000000000000..e067505b3b40
--- /dev/null
+++ b/writerfilter/source/dmapper/ConversionHelper.cxx
@@ -0,0 +1,639 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <ConversionHelper.hxx>
+#include <com/sun/star/table/BorderLine.hpp>
+#include <com/sun/star/lang/Locale.hpp>
+#include <com/sun/star/text/HoriOrientation.hpp>
+#include <com/sun/star/style/NumberingType.hpp>
+#include <ooxml/resourceids.hxx>
+#include <tools/color.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <algorithm>
+#include <functional>
+
+using namespace com::sun::star;
+
+namespace writerfilter {
+namespace dmapper{
+namespace ConversionHelper{
+
+#define TWIP_TO_MM100(TWIP) ((TWIP) >= 0 ? (((TWIP)*127L+36L)/72L) : (((TWIP)*127L-36L)/72L))
+
+//line definitions in 1/100 mm
+#define LINE_WIDTH_0 2
+#define LINE_WIDTH_1 36
+#define LINE_WIDTH_2 89
+#define LINE_WIDTH_3 142
+#define LINE_WIDTH_4 177
+#define LINE_WIDTH_5 18
+
+#define DOUBLE_LINE0_OUT LINE_WIDTH_0
+#define DOUBLE_LINE0_IN LINE_WIDTH_0
+#define DOUBLE_LINE0_DIST LINE_WIDTH_1
+
+#define DOUBLE_LINE1_OUT LINE_WIDTH_1
+#define DOUBLE_LINE1_IN LINE_WIDTH_1
+#define DOUBLE_LINE1_DIST LINE_WIDTH_1
+
+#define DOUBLE_LINE2_OUT LINE_WIDTH_2
+#define DOUBLE_LINE2_IN LINE_WIDTH_2
+#define DOUBLE_LINE2_DIST LINE_WIDTH_2
+
+#define DOUBLE_LINE3_OUT LINE_WIDTH_2
+#define DOUBLE_LINE3_IN LINE_WIDTH_1
+#define DOUBLE_LINE3_DIST LINE_WIDTH_2
+
+#define DOUBLE_LINE4_OUT LINE_WIDTH_1
+#define DOUBLE_LINE4_IN LINE_WIDTH_2
+#define DOUBLE_LINE4_DIST LINE_WIDTH_1
+
+#define DOUBLE_LINE5_OUT LINE_WIDTH_3
+#define DOUBLE_LINE5_IN LINE_WIDTH_2
+#define DOUBLE_LINE5_DIST LINE_WIDTH_2
+
+#define DOUBLE_LINE6_OUT LINE_WIDTH_2
+#define DOUBLE_LINE6_IN LINE_WIDTH_3
+#define DOUBLE_LINE6_DIST LINE_WIDTH_2
+
+#define DOUBLE_LINE7_OUT LINE_WIDTH_0
+#define DOUBLE_LINE7_IN LINE_WIDTH_0
+#define DOUBLE_LINE7_DIST LINE_WIDTH_2
+
+#define DOUBLE_LINE8_OUT LINE_WIDTH_1
+#define DOUBLE_LINE8_IN LINE_WIDTH_0
+#define DOUBLE_LINE8_DIST LINE_WIDTH_2
+
+#define DOUBLE_LINE9_OUT LINE_WIDTH_2
+#define DOUBLE_LINE9_IN LINE_WIDTH_0
+#define DOUBLE_LINE9_DIST LINE_WIDTH_2
+
+#define DOUBLE_LINE10_OUT LINE_WIDTH_3
+#define DOUBLE_LINE10_IN LINE_WIDTH_0
+#define DOUBLE_LINE10_DIST LINE_WIDTH_2
+
+sal_Int32 MakeBorderLine( sal_Int32 nSprmValue, table::BorderLine& rToFill )
+{
+ //TODO: Lines are always solid
+ //Border
+ //borders are defined as:
+ // 0x XX XX XX XX
+ // || || || ||
+ // || || || ---- Line width in 1/8 pt
+ // || || ||
+ // || || ------- Line type: 0 - none 1 - single ... 25 - engrave 3D and 64 - 230 page borders
+ // || ||
+ // || ---------- Line color
+ // ||
+ // ------------- seven bits line space
+ // -------------- first bit: with shading
+ sal_Int16 nLineThicknessTwip = (sal_Int16)((nSprmValue & 0xff) * 20)/8L ;
+ sal_Int32 nLineType = ((nSprmValue & 0xff00) >> 8);
+ sal_Int32 nLineColor = (nSprmValue & 0xff0000)>>16;
+ sal_Int32 nLineDistance = (((nSprmValue & 0x3f000000)>>24) * 2540 + 36)/72L;
+ sal_Int32 nLineThickness = TWIP_TO_MM100(nLineThicknessTwip);
+ MakeBorderLine( nLineThickness, nLineType, nLineColor, rToFill, false);
+ return nLineDistance;
+}
+void MakeBorderLine( sal_Int32 nLineThickness, sal_Int32 nLineType,
+ sal_Int32 nLineColor,
+ table::BorderLine& rToFill, bool bIsOOXML )
+{
+ static const sal_Int32 aBorderDefColor[] =
+ {
+ 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
+ };
+ //no auto color for borders
+ if(!nLineColor)
+ ++nLineColor;
+ if(!bIsOOXML && sal::static_int_cast<sal_uInt32>(nLineColor) <
+ sizeof(aBorderDefColor) / sizeof(nLineColor))
+ nLineColor = aBorderDefColor[nLineColor];
+
+ enum eBorderCode
+ {
+ single0, single1, single2, single3, single4, single5,
+ double0, double1, double2, double3, double4, double5, double6,
+ double7, double8, double9, double10,
+ none
+ } eCodeIdx = none;
+
+ // 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 defecit up in additional white space or
+ // object size
+ switch(nLineType)
+ {
+ // First the single lines
+ case 1: break;
+ case 2:
+ case 5:
+ // and the unsupported special cases which we map to a single line
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ case 22:
+ // or if in necessary by a double line
+ case 24:
+ case 25:
+ if( nLineThickness < 10)
+ eCodeIdx = single0;// 1 Twip for us
+ else if( nLineThickness < 20)
+ eCodeIdx = single5;// 10 Twips for us
+ else if (nLineThickness < 50)
+ eCodeIdx = single1;// 20 Twips
+ else if (nLineThickness < 80)
+ eCodeIdx = single2;// 50
+ else if (nLineThickness < 100)
+ eCodeIdx = single3;// 80
+ else if (nLineThickness < 150)
+ eCodeIdx = single4;// 100
+ // Hack: for the quite thick lines we must paint double lines,
+ // because our singles lines don't come thicker than 5 points.
+ else if (nLineThickness < 180)
+ eCodeIdx = double2;// 150
+ else
+ eCodeIdx = double5;// 180
+ break;
+ // then the shading beams which we represent by a double line
+ case 23:
+ eCodeIdx = double1;
+ break;
+ // then the double lines, for which we have good matches
+ case 3:
+ case 10: //Don't have tripple so use double
+ if (nLineThickness < 60)
+ eCodeIdx = double0;// 22 Twips for us
+ else if (nLineThickness < 135)
+ eCodeIdx = double7;// some more space
+ else if (nLineThickness < 180)
+ eCodeIdx = double1;// 60
+ else
+ eCodeIdx = double2;// 150
+ break;
+ case 11:
+ eCodeIdx = double4;// 90 Twips for us
+ break;
+ case 12:
+ case 13: //Don't have thin thick thin, so use thick thin
+ if (nLineThickness < 87)
+ eCodeIdx = double8;// 71 Twips for us
+ else if (nLineThickness < 117)
+ eCodeIdx = double9;// 101
+ else if (nLineThickness < 166)
+ eCodeIdx = double10;// 131
+ else
+ eCodeIdx = double5;// 180
+ break;
+ case 14:
+ if (nLineThickness < 46)
+ eCodeIdx = double0;// 22 Twips for us
+ else if (nLineThickness < 76)
+ eCodeIdx = double1;// 60
+ else if (nLineThickness < 121)
+ eCodeIdx = double4;// 90
+ else if (nLineThickness < 166)
+ eCodeIdx = double2;// 150
+ else
+ eCodeIdx = double6;// 180
+ break;
+ case 15:
+ case 16: //Don't have thin thick thin, so use thick thin
+ if (nLineThickness < 46)
+ eCodeIdx = double0;// 22 Twips for us
+ else if (nLineThickness < 76)
+ eCodeIdx = double1;// 60
+ else if (nLineThickness < 121)
+ eCodeIdx = double3;// 90
+ else if (nLineThickness < 166)
+ eCodeIdx = double2;// 150
+ else
+ eCodeIdx = double5;// 180
+ break;
+ case 17:
+ if (nLineThickness < 46)
+ eCodeIdx = double0;// 22 Twips for us
+ else if (nLineThickness < 72)
+ eCodeIdx = double7;// 52
+ else if (nLineThickness < 137)
+ eCodeIdx = double4;// 90
+ else
+ eCodeIdx = double6;// 180
+ break;
+ case 18:
+ case 19: //Don't have thin thick thin, so use thick thin
+ if (nLineThickness < 46)
+ eCodeIdx = double0;// 22 Twips for us
+ else if (nLineThickness < 62)
+ eCodeIdx = double7;// 52
+ else if (nLineThickness < 87)
+ eCodeIdx = double8;// 71
+ else if (nLineThickness < 117)
+ eCodeIdx = double9;// 101
+ else if (nLineThickness < 156)
+ eCodeIdx = double10;// 131
+ else
+ eCodeIdx = double5;// 180
+ break;
+ case 20:
+ if (nLineThickness < 46)
+ eCodeIdx = single1; // 20 Twips for us
+ else
+ eCodeIdx = double1;// 60
+ break;
+ case 21:
+ eCodeIdx = double1;// 60 Twips for us
+ break;
+ case 0:
+ case 255:
+ eCodeIdx = none;
+ break;
+ default:
+ eCodeIdx = single0;
+ break;
+ }
+ struct BorderDefinition
+ {
+ sal_Int16 nOut;
+ sal_Int16 nIn;
+ sal_Int16 nDist;
+ };
+
+
+ static const BorderDefinition aLineTab[] =
+ {
+ /* 0*/ { LINE_WIDTH_0, 0, 0 },
+ /* 1*/ { LINE_WIDTH_1, 0, 0 },
+ /* 2*/ { LINE_WIDTH_2, 0, 0 },
+ /* 3*/ { LINE_WIDTH_3, 0, 0 },
+ /* 4*/ { LINE_WIDTH_4, 0, 0 },
+ /* 5*/ { LINE_WIDTH_5, 0, 0 },
+ /* 6*/ { DOUBLE_LINE0_OUT, DOUBLE_LINE0_IN, DOUBLE_LINE0_DIST },
+ /* 7*/ { DOUBLE_LINE1_OUT, DOUBLE_LINE1_IN, DOUBLE_LINE1_DIST },
+ /* 8*/ { DOUBLE_LINE2_OUT, DOUBLE_LINE2_IN, DOUBLE_LINE2_DIST },
+ /* 9*/ { DOUBLE_LINE3_OUT, DOUBLE_LINE3_IN, DOUBLE_LINE3_DIST },
+ /*10*/ { DOUBLE_LINE4_OUT, DOUBLE_LINE4_IN, DOUBLE_LINE4_DIST },
+ /*11*/ { DOUBLE_LINE5_OUT, DOUBLE_LINE5_IN, DOUBLE_LINE5_DIST },
+ /*12*/ { DOUBLE_LINE6_OUT, DOUBLE_LINE6_IN, DOUBLE_LINE6_DIST },
+ /*13*/ { DOUBLE_LINE7_OUT, DOUBLE_LINE7_IN, DOUBLE_LINE7_DIST },
+ /*14*/ { DOUBLE_LINE8_OUT, DOUBLE_LINE8_IN, DOUBLE_LINE8_DIST },
+ /*15*/ { DOUBLE_LINE9_OUT, DOUBLE_LINE9_IN, DOUBLE_LINE9_DIST },
+ /*16*/ { DOUBLE_LINE10_OUT,DOUBLE_LINE10_IN,DOUBLE_LINE10_DIST},
+ /*17*/ { 0, 0, 0 }
+ };
+
+ rToFill.Color = nLineColor;
+ if( nLineType == 1)
+ {
+ rToFill.InnerLineWidth = 0;
+ rToFill.OuterLineWidth = sal_Int16(nLineThickness);
+ rToFill.LineDistance = 0;
+
+ }
+ else
+ {
+ rToFill.InnerLineWidth = aLineTab[eCodeIdx].nIn;
+ rToFill.OuterLineWidth = aLineTab[eCodeIdx].nOut;
+ rToFill.LineDistance = aLineTab[eCodeIdx].nDist;
+ }
+}
+
+void lcl_SwapQuotesInField(::rtl::OUString &rFmt)
+{
+ //Swap unescaped " and ' with ' and "
+ sal_Int32 nLen = rFmt.getLength();
+ ::rtl::OUStringBuffer aBuffer( rFmt.getStr() );
+ const sal_Unicode* pFmt = rFmt.getStr();
+ for (sal_Int32 nI = 0; nI < nLen; ++nI)
+ {
+ if ((pFmt[nI] == '\"') && (!nI || pFmt[nI-1] != '\\'))
+ aBuffer.setCharAt(nI, '\'');
+ else if ((pFmt[nI] == '\'') && (!nI || pFmt[nI-1] != '\\'))
+ aBuffer.setCharAt(nI, '\"');
+ }
+ rFmt = aBuffer.makeStringAndClear();
+}
+bool lcl_IsNotAM(::rtl::OUString& rFmt, sal_Int32 nPos)
+{
+ return (
+ (nPos == rFmt.getLength() - 1) ||
+ (
+ (rFmt.getStr()[nPos+1] != 'M') &&
+ (rFmt.getStr()[nPos+1] != 'm')
+ )
+ );
+}
+
+::rtl::OUString ConvertMSFormatStringToSO(
+ const ::rtl::OUString& rFormat, lang::Locale& rLocale, bool bHijri)
+{
+ ::rtl::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();
+ ::rtl::OUStringBuffer aNewFormat( sFormat.getStr() );
+ while (nI < nLen)
+ {
+ if (aNewFormat.charAt(nI) == '\\')
+ nI++;
+ else if (aNewFormat.charAt(nI) == '\"')
+ {
+ ++nI;
+ //While not at the end and not at an unescaped end quote
+ while ((nI < nLen) && (!(aNewFormat.charAt(nI) == '\"') && (aNewFormat.charAt(nI-1) != '\\')))
+ ++nI;
+ }
+ else //normal unquoted section
+ {
+ sal_Unicode nChar = aNewFormat.charAt(nI);
+ if (nChar == 'O')
+ {
+ aNewFormat.setCharAt(nI, 'M');
+ bForceNatNum = true;
+ }
+ else if (nChar == 'o')
+ {
+ aNewFormat.setCharAt(nI, 'm');
+ bForceNatNum = true;
+ }
+ else if ((nChar == 'A') && lcl_IsNotAM(sFormat, nI))
+ {
+ aNewFormat.setCharAt(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.charAt(nI+1) == 'E'))
+ {
+ //todo: this cannot be the right way to replace a part of the string!
+ aNewFormat.setCharAt( nI, 'Y' );
+ aNewFormat.setCharAt( nI + 1, 'Y' );
+ aNewFormat.insert(nI + 2, ::rtl::OUString::createFromAscii("YY"));
+ nLen+=2;
+ nI+=3;
+ }
+ bForceJapanese = true;
+ }
+ else if (nChar == 'e')
+ {
+ if ((nI != nLen-1) && (aNewFormat.charAt(nI+1) == 'e'))
+ {
+ //todo: this cannot be the right way to replace a part of the string!
+ aNewFormat.setCharAt( nI, 'y' );
+ aNewFormat.setCharAt( nI + 1, 'y' );
+ aNewFormat.insert(nI + 2, ::rtl::OUString::createFromAscii("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.setCharAt( nI, '\\' );
+ aNewFormat.insert(nI + 1, ::rtl::OUString::createFromAscii("/"));
+ nI++;
+ nLen++;
+ }
+ }
+ ++nI;
+ }
+
+ if (bForceNatNum)
+ bForceJapanese = true;
+
+ if (bForceJapanese)
+ {
+ rLocale.Language = ::rtl::OUString::createFromAscii("ja");
+ rLocale.Country = ::rtl::OUString::createFromAscii("JP");
+ }
+
+ if (bForceNatNum)
+ {
+ aNewFormat.insert( 0, ::rtl::OUString::createFromAscii("[NatNum1][$-411]"));
+ }
+
+ if (bHijri)
+ {
+ aNewFormat.insert( 0, ::rtl::OUString::createFromAscii("[~hijri]"));
+ }
+ return aNewFormat.makeStringAndClear();
+
+}
+/*-------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Int32 convertTwipToMM100(sal_Int32 _t)
+{
+ return TWIP_TO_MM100( _t );
+}
+/*-- 09.08.2007 09:34:44---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Int32 convertEMUToMM100(sal_Int32 _t)
+{
+ return _t / 360;
+}
+
+/*-- 21.11.2006 08:47:12---------------------------------------------------
+ contains a color from 0xTTRRGGBB to 0xTTRRGGBB
+ -----------------------------------------------------------------------*/
+sal_Int32 ConvertColor(sal_Int32 nWordColor)
+{
+ sal_uInt8
+ r(static_cast<sal_uInt8>(nWordColor&0xFF)),
+ g(static_cast<sal_uInt8>(((nWordColor)>>8)&0xFF)),
+ b(static_cast<sal_uInt8>((nWordColor>>16)&0xFF)),
+ t(static_cast<sal_uInt8>((nWordColor>>24)&0xFF));
+ sal_Int32 nRet = (t<<24) + (r<<16) + (g<<8) + b;
+ return nRet;
+}
+/*-- 27.06.2007 13:42:32---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Int16 convertTableJustification( sal_Int32 nIntValue )
+{
+ sal_Int16 nOrient = text::HoriOrientation::LEFT_AND_WIDTH;
+ switch( nIntValue )
+ {
+ case 1 : nOrient = text::HoriOrientation::CENTER; break;
+ case 2 : nOrient = text::HoriOrientation::RIGHT; break;
+ case 0 :
+ //no break
+ default:;
+
+ }
+ return nOrient;
+}
+/*-- 06.08.2007 15:27:30---------------------------------------------------
+ conversion form xsd::DateTime
+ [-]CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm]
+ -----------------------------------------------------------------------*/
+com::sun::star::util::DateTime convertDateTime( const ::rtl::OUString& rDateTimeString )
+{
+ util::DateTime aRet( 0, 0, 0, 0, 1, 1, 1901 );
+ //
+ sal_Int32 nIndex = 0;
+ ::rtl::OUString sDate( rDateTimeString.getToken( 0, 'T', nIndex ));
+ sal_Int32 nDateIndex = 0;
+ aRet.Year = (sal_uInt16)sDate.getToken( 0, '-', nDateIndex ).toInt32();
+ if( nDateIndex > 0)
+ aRet.Month = (sal_uInt16)sDate.getToken( 0, '-', nDateIndex ).toInt32();
+ if( nDateIndex > 0)
+ aRet.Day = (sal_uInt16)sDate.getToken( 0, '-', nDateIndex ).toInt32();
+ ::rtl::OUString sTime;
+ if(nIndex > 0)
+ {
+ sTime = ( rDateTimeString.getToken( 0, 'Z', nIndex ));
+ sal_Int32 nTimeIndex = 0;
+ aRet.Hours = (sal_uInt16)sTime.getToken( 0, ':', nTimeIndex ).toInt32();
+ if( nTimeIndex > 0)
+ aRet.Minutes = (sal_uInt16)sTime.getToken( 0, ':', nTimeIndex ).toInt32();
+ if( nTimeIndex > 0)
+ {
+ ::rtl::OUString sSeconds = sTime.getToken( 0, ':', nTimeIndex );
+ nTimeIndex = 0;
+ aRet.Seconds = (sal_uInt16)sSeconds.getToken( 0, '.', nTimeIndex ).toInt32();
+ aRet.HundredthSeconds = (sal_uInt16)sSeconds.getToken( 0, '.', nTimeIndex ).toInt32();
+ }
+
+// todo: ignore time offset for a while - there's no time zone available
+// nIndex = 0;
+// ::rtl::OUString sOffset( rDateTimeString.getToken( 1, 'Z', nIndex ));
+// if( sOffset.getLength() )
+// {
+// add hour and minute offset and increase/decrease date if necessary
+// }
+ }
+ return aRet;
+}
+/*-- 05.03.2008 09:10:13---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Int16 ConvertNumberingType(sal_Int32 nNFC)
+{
+ sal_Int16 nRet;
+ switch(nNFC)
+ {
+ case NS_ooxml::LN_Value_ST_NumberFormat_decimal:
+ case 0: nRet = style::NumberingType::ARABIC; break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_upperRoman:
+ case 1: nRet = style::NumberingType::ROMAN_UPPER; break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_lowerRoman:
+ case 2: nRet = style::NumberingType::ROMAN_LOWER; break;
+ case 3: nRet = style::NumberingType::CHARS_UPPER_LETTER_N; break;
+ case 4: nRet = style::NumberingType::CHARS_LOWER_LETTER_N; break;
+ case 5: nRet = style::NumberingType::ARABIC; break;//ORDINAL
+ case NS_ooxml::LN_Value_ST_NumberFormat_bullet:
+ case 23:
+ case 25:
+ nRet = style::NumberingType::CHAR_SPECIAL;
+ break;
+ case 255: nRet = style::NumberingType::NUMBER_NONE; break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_upperLetter:
+ nRet = style::NumberingType::CHARS_UPPER_LETTER;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_lowerLetter:
+ nRet = style::NumberingType::CHARS_LOWER_LETTER;
+ 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_ordinal = 91682;
+ NS_ooxml::LN_Value_ST_NumberFormat_cardinalText = 91683;
+ NS_ooxml::LN_Value_ST_NumberFormat_ordinalText = 91684;
+ NS_ooxml::LN_Value_ST_NumberFormat_hex = 91685;
+ NS_ooxml::LN_Value_ST_NumberFormat_chicago = 91686;
+ NS_ooxml::LN_Value_ST_NumberFormat_ideographDigital = 91687;
+ NS_ooxml::LN_Value_ST_NumberFormat_japaneseCounting = 91688;
+ NS_ooxml::LN_Value_ST_NumberFormat_aiueo = 91689;
+ NS_ooxml::LN_Value_ST_NumberFormat_iroha = 91690;
+ NS_ooxml::LN_Value_ST_NumberFormat_decimalFullWidth = 91691;
+ NS_ooxml::LN_Value_ST_NumberFormat_decimalHalfWidth = 91692;
+ NS_ooxml::LN_Value_ST_NumberFormat_japaneseLegal = 91693;
+ NS_ooxml::LN_Value_ST_NumberFormat_japaneseDigitalTenThousand = 91694;
+ NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedCircle = 91695;
+ NS_ooxml::LN_Value_ST_NumberFormat_decimalFullWidth2 = 91696;
+ NS_ooxml::LN_Value_ST_NumberFormat_aiueoFullWidth = 91697;
+ NS_ooxml::LN_Value_ST_NumberFormat_irohaFullWidth = 91698;
+ NS_ooxml::LN_Value_ST_NumberFormat_decimalZero = 91699;
+ NS_ooxml::LN_Value_ST_NumberFormat_ganada = 91701;
+ NS_ooxml::LN_Value_ST_NumberFormat_chosung = 91702;
+ NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedFullstop = 91703;
+ NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedParen = 91704;
+ NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedCircleChinese = 91705;
+ NS_ooxml::LN_Value_ST_NumberFormat_ideographEnclosedCircle = 91706;
+ NS_ooxml::LN_Value_ST_NumberFormat_ideographTraditional = 91707;
+ NS_ooxml::LN_Value_ST_NumberFormat_ideographZodiac = 91708;
+ NS_ooxml::LN_Value_ST_NumberFormat_ideographZodiacTraditional = 91709;
+ NS_ooxml::LN_Value_ST_NumberFormat_taiwaneseCounting = 91710;
+ NS_ooxml::LN_Value_ST_NumberFormat_ideographLegalTraditional = 91711;
+ NS_ooxml::LN_Value_ST_NumberFormat_taiwaneseCountingThousand = 91712;
+ NS_ooxml::LN_Value_ST_NumberFormat_taiwaneseDigital = 91713;
+ NS_ooxml::LN_Value_ST_NumberFormat_chineseCounting = 91714;
+ NS_ooxml::LN_Value_ST_NumberFormat_chineseLegalSimplified = 91715;
+ NS_ooxml::LN_Value_ST_NumberFormat_chineseCountingThousand = 91716;
+ NS_ooxml::LN_Value_ST_NumberFormat_koreanDigital = 91717;
+ NS_ooxml::LN_Value_ST_NumberFormat_koreanCounting = 91718;
+ NS_ooxml::LN_Value_ST_NumberFormat_koreanLegal = 91719;
+ NS_ooxml::LN_Value_ST_NumberFormat_koreanDigital2 = 91720;
+ NS_ooxml::LN_Value_ST_NumberFormat_vietnameseCounting = 91721;
+ NS_ooxml::LN_Value_ST_NumberFormat_russianLower = 91722;
+ NS_ooxml::LN_Value_ST_NumberFormat_russianUpper = 91723;
+ NS_ooxml::LN_Value_ST_NumberFormat_none = 91724;
+ NS_ooxml::LN_Value_ST_NumberFormat_numberInDash = 91725;
+ NS_ooxml::LN_Value_ST_NumberFormat_hebrew1 = 91726;
+ NS_ooxml::LN_Value_ST_NumberFormat_hebrew2 = 91727;
+ NS_ooxml::LN_Value_ST_NumberFormat_arabicAlpha = 91728;
+ NS_ooxml::LN_Value_ST_NumberFormat_arabicAbjad = 91729;
+ NS_ooxml::LN_Value_ST_NumberFormat_hindiVowels = 91730;
+ 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_thaiLetters = 91734;
+ NS_ooxml::LN_Value_ST_NumberFormat_thaiNumbers = 91735;
+ NS_ooxml::LN_Value_ST_NumberFormat_thaiCounting = 91736;*/
+ return nRet;
+}
+
+
+} // namespace ConversionHelper
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/ConversionHelper.hxx b/writerfilter/source/dmapper/ConversionHelper.hxx
new file mode 100644
index 000000000000..27436f1769be
--- /dev/null
+++ b/writerfilter/source/dmapper/ConversionHelper.hxx
@@ -0,0 +1,64 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_DMAPPER_CONVERSIONHELPER_HXX
+#define INCLUDED_DMAPPER_CONVERSIONHELPER_HXX
+
+#include <sal/types.h>
+#include <rtl/ustring.hxx>
+#include <com/sun/star/util/DateTime.hpp>
+namespace com{ namespace sun{ namespace star{
+ namespace lang{
+ struct Locale;
+ }
+ namespace table{
+ struct BorderLine;
+}}}}
+
+namespace writerfilter {
+namespace dmapper{
+namespace ConversionHelper{
+
+ // create a border line and return the distance value
+ sal_Int32 MakeBorderLine( sal_Int32 nSprmValue, ::com::sun::star::table::BorderLine& rToFill );
+ void MakeBorderLine( sal_Int32 nLineThickness, sal_Int32 nLineType,
+ sal_Int32 nLineColor,
+ ::com::sun::star::table::BorderLine& rToFill, bool bIsOOXML );
+ //convert the number format string form MS format to SO format
+ ::rtl::OUString ConvertMSFormatStringToSO(
+ const ::rtl::OUString& rFormat, ::com::sun::star::lang::Locale& rLocale, bool bHijri);
+ sal_Int32 convertTwipToMM100(sal_Int32 _t);
+ // probably the most useless unit in the world - English Metric Units (EMU) 360 000 EMU == 1cm
+ sal_Int32 convertEMUToMM100(sal_Int32 _t);
+ sal_Int32 ConvertColor(sal_Int32 nWordColor );
+ sal_Int16 convertTableJustification( sal_Int32 nIntValue );
+ ::com::sun::star::util::DateTime convertDateTime( const ::rtl::OUString& rDateTimeString );
+ sal_Int16 ConvertNumberingType(sal_Int32 nNFC);
+
+} // namespace ConversionHelper
+} //namespace dmapper
+} // namespace writerfilter
+#endif
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
new file mode 100644
index 000000000000..8e5fb325d2e9
--- /dev/null
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -0,0 +1,4877 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include "PageBordersHandler.hxx"
+
+#include <dmapper/DomainMapper.hxx>
+#include <DomainMapper_Impl.hxx>
+#include <ConversionHelper.hxx>
+#include <ThemeTable.hxx>
+#include <ModelEventListener.hxx>
+#include <MeasureHandler.hxx>
+#include <OLEHandler.hxx>
+#include <i18npool/mslangid.hxx>
+#include <i18npool/paper.hxx>
+#include <ooxml/OOXMLFastTokens.hxx>
+#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
+#include <com/sun/star/document/XOOXMLDocumentPropertiesImporter.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/text/XTextDocument.hpp>
+#include <com/sun/star/text/XTextCursor.hpp>
+#include <com/sun/star/text/XTextPortionAppend.hpp>
+#include <com/sun/star/text/XParagraphAppend.hpp>
+#include <com/sun/star/text/FontEmphasis.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/container/XIndexReplace.hpp>
+#include <com/sun/star/drawing/XShape.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/table/BorderLine.hpp>
+#include <com/sun/star/text/TextGridMode.hpp>
+#include <com/sun/star/text/XDocumentIndexesSupplier.hpp>
+#include <com/sun/star/text/WritingMode.hpp>
+#include <com/sun/star/text/XFootnote.hpp>
+#include <com/sun/star/style/NumberingType.hpp>
+#include <comphelper/types.hxx>
+#include <comphelper/storagehelper.hxx>
+
+#include <rtl/ustrbuf.hxx>
+#include <boost/shared_ptr.hpp>
+#include <com/sun/star/uno/Any.hxx>
+#include <tools/color.hxx>
+#include <BorderHandler.hxx>
+#include <CellColorHandler.hxx>
+#include <SectionColumnHandler.hxx>
+#include <vector>
+#include <iostream>
+
+#ifdef DEBUG_DOMAINMAPPER
+#include <resourcemodel/QNameToString.hxx>
+#include <resourcemodel/util.hxx>
+#include <resourcemodel/TagLogger.hxx>
+#endif
+#if OSL_DEBUG_LEVEL > 0
+#include <resourcemodel/QNameToString.hxx>
+#endif
+
+
+using namespace ::com::sun::star;
+using namespace ::rtl;
+
+namespace writerfilter {
+namespace dmapper{
+
+#ifdef DEBUG_DOMAINMAPPER
+TagLogger::Pointer_t dmapper_logger(TagLogger::getInstance("DOMAINMAPPER"));
+#endif
+
+/* ---- Fridrich's mess begins here ---- */
+struct _PageSz
+{
+ sal_Int32 code;
+ sal_Int32 h;
+ bool orient;
+ sal_Int32 w;
+} CT_PageSz;
+
+
+/* ---- Fridrich's mess (hopefully) ends here ---- */
+
+/*-- 09.06.2006 09:52:11---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+DomainMapper::DomainMapper( const uno::Reference< uno::XComponentContext >& xContext,
+ uno::Reference< io::XInputStream > xInputStream,
+ uno::Reference< lang::XComponent > xModel,
+ SourceDocumentType eDocumentType) :
+ m_pImpl( new DomainMapper_Impl( *this, xContext, xModel, eDocumentType )),
+ mnBackgroundColor(0), mbIsHighlightSet(false)
+{
+ // #i24363# tab stops relative to indent
+ m_pImpl->SetDocumentSettingsProperty(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_TABS_RELATIVE_TO_INDENT ),
+ uno::makeAny( false ) );
+
+ m_pImpl->SetDocumentSettingsProperty(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_ADD_PARA_TABLE_SPACING ),
+ uno::makeAny( false ) );
+
+ //import document properties
+
+ try
+ {
+ uno::Reference< lang::XMultiServiceFactory > xFactory(xContext->getServiceManager(), uno::UNO_QUERY_THROW);
+ uno::Reference< embed::XStorage > xDocumentStorage =
+ (comphelper::OStorageHelper::GetStorageOfFormatFromInputStream(OFOPXML_STORAGE_FORMAT_STRING, xInputStream));
+
+ uno::Reference< uno::XInterface > xTemp = xContext->getServiceManager()->createInstanceWithContext(
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("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( xDocumentStorage, xPropSupplier->getDocumentProperties() );
+ }
+ catch( const uno::Exception& rEx )
+ {
+ (void)rEx;
+ }
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("domainmapper");
+#endif
+}
+/*-- 09.06.2006 09:52:12---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+DomainMapper::~DomainMapper()
+{
+ try
+ {
+ uno::Reference< text::XDocumentIndexesSupplier> xIndexesSupplier( m_pImpl->GetTextDocument(), uno::UNO_QUERY );
+ uno::Reference< container::XIndexAccess > xIndexes = xIndexesSupplier->getDocumentIndexes();
+ sal_Int32 nIndexes = xIndexes->getCount();
+ if( nIndexes )
+ {
+ //index update has to wait until first view is created
+ uno::Reference< document::XEventBroadcaster > xBroadcaster(xIndexesSupplier, uno::UNO_QUERY);
+ xBroadcaster->addEventListener(uno::Reference< document::XEventListener >(new ModelEventListener));
+ }
+
+
+ // Apply the document settings after everything else
+ m_pImpl->GetSettingsTable()->ApplyProperties( m_pImpl->GetTextDocument( ) );
+ }
+ catch( const uno::Exception& rEx )
+ {
+ (void)rEx;
+ }
+
+ delete m_pImpl;
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("domainmapper");
+#endif
+}
+/*-- 09.06.2006 09:52:12---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::attribute(Id nName, Value & val)
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("attribute");
+ dmapper_logger->attribute("name", (*QNameToString::Instance())(nName));
+ dmapper_logger->attribute("value", val.toString());
+#endif
+ static ::rtl::OUString sLocalBookmarkName;
+ sal_Int32 nIntValue = val.getInt();
+ rtl::OUString sStringValue = val.getString();
+ // printf ( "DomainMapper::attribute(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)nName, (unsigned int)nIntValue, ::rtl::OUStringToOString(sStringValue, RTL_TEXTENCODING_DONTKNOW).getStr());
+ if( nName >= NS_rtf::LN_WIDENT && nName <= NS_rtf::LN_LCBSTTBFUSSR )
+ m_pImpl->GetFIB().SetData( nName, nIntValue );
+ else //if( !m_pImpl->getTableManager().attribute( nName, val) )
+ {
+
+
+ /* WRITERFILTERSTATUS: table: attributedata */
+ switch( nName )
+ {
+ /* attributes to be ignored */
+ case NS_rtf::LN_UNUSED4:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_UNUSED8:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_UNUSED1_3:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_UNUSED1_7:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_UNUSED8_3:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FWRITERESERVATION:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FLOADOVERRIDE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FFAREAST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCRYPTO:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_NFIBBACK:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LKEY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_ENVR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FMAC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FWORD97SAVED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCMAC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_PNFBPCHPFIRST_W6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_PNCHPFIRST_W6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_CPNBTECHP_W6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_PNFBPPAPFIRST_W6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_PNPAPFIRST_W6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_CPNBTEPAP_W6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_PNFBPLVCFIRST_W6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_PNLVCFIRST_W6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_CPNBTELVC_W6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_CBMAC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LPRODUCTCREATED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LPRODUCTREVISED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_CCPMCR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_PNFBPCHPFIRST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_PNFBPPAPFIRST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_PNFBPLVCFIRST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCISLANDFIRST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCISLANDLIM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCSTSHFORIG:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBSTSHFORIG:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFPAD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFPAD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFGLSY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFGLSY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFGLSY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFGLSY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFSEA:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFSEA:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFFLDMCR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFLDMCR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCCMDS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBCMDS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCMCR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCMCR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFMCR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFMCR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPRDRVR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPRDRVR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPRENVPORT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPRENVPORT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPRENVLAND:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPRENVLAND:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCWSS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBWSS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFPGDFTN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFPGDFTN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCAUTOSAVESOURCE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBAUTOSAVESOURCE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCDOAMOM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCDOAMOM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCDOAHDR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCDOAHDR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPMS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPMS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFPGDEDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFPGDEDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFWKB:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFWKB:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFSPL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFSPL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCSTWUSER:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBSTWUSER:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCUNUSED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBUNUSED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFINTLFLD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFINTLFLD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCROUTESLIP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBROUTESLIP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBSAVEDBY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBSAVEDBY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFNM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFNM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCDOCUNDO:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBDOCUNDO:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCRGBUSE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBRGBUSE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCUSP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBUSP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCUSKF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBUSKF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCUPCRGBUSE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCUPCRGBUSE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCUPCUSP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCUPCUSP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLGOSL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLGOSL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCOCX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCOCX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_DWLOWDATETIME:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_DWHIGHDATETIME:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCASUMY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCASUMY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFGRAM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFGRAM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFUSSR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+
+ case NS_rtf::LN_ISTD: //index of applied style
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ {
+ //search for the style with the given id and apply it
+ //as CharStyleName or ParaStyleName
+ //if the style is a user defined style then it must have an ISTD - built-in styles might not have it
+ StyleSheetTablePtr pStyleSheets = m_pImpl->GetStyleSheetTable();
+ ::rtl::OUString sValue = ::rtl::OUString::valueOf(nIntValue, 16);
+ const StyleSheetEntryPtr pEntry = pStyleSheets->FindStyleSheetByISTD(sValue);
+ if( pEntry.get( ) )
+ {
+ bool bParaStyle = (pEntry->nStyleTypeCode == STYLE_TYPE_PARA);
+ if(bParaStyle)
+ m_pImpl->SetCurrentParaStyleId(::rtl::OUString::valueOf(static_cast<sal_Int32>(nIntValue), 16));
+ if (m_pImpl->GetTopContext() && m_pImpl->GetTopContextType() != CONTEXT_SECTION)
+ m_pImpl->GetTopContext()->Insert(
+ bParaStyle ?
+ PROP_PARA_STYLE_NAME : PROP_CHAR_STYLE_NAME,
+ true,
+ uno::makeAny(
+ m_pImpl->GetStyleSheetTable()->ConvertStyleName( pEntry->sStyleName ) ) );
+ }
+ }
+ break;
+ case NS_rtf::LN_ISTARTAT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_NFC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FLEGAL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FNORESTART:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FPREV:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FPREVSPACE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FWORD6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_UNUSED5_7:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_RGBXCHNUMS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_IXCHFOLLOW:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DXASPACE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DXAINDENT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_CBGRPPRLCHPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_CBGRPPRLPAPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LSID:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_TPLC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_RGISTD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FSIMPLELIST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FRESTARTHDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_UNSIGNED26_2:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_ILVL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FSTARTAT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FFORMATTING:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_UNSIGNED4_6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_CLFOLVL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_CBFFNM1:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_PRQ:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FTRUETYPE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_WWEIGHT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_CHS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ {
+ m_pImpl->GetFIB().SetLNCHS( nIntValue );
+ }
+ break;
+ case NS_rtf::LN_IXCHSZALT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_PANOSE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_STI:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FSCRATCH:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FINVALHEIGHT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FHASUPE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FMASSCOPY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_SGC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_ISTDBASE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_CUPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_ISTDNEXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_BCHUPE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FAUTOREDEF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FHIDDEN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_CSTD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_CBSTDBASEINFILE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FSTDSTYLENAMESWRITTEN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_UNUSED4_2:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_STIMAXWHENSAVED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_ISTDMAXFIXEDWHENSAVED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_NVERBUILTINNAMESWHENSAVED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_RGFTCSTANDARDCHPSTSH:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_WIDENT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_NFIB:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_NPRODUCT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_rtf::LN_LID:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_rtf::LN_PNNEXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_rtf::LN_FDOT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_rtf::LN_FGLSY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_rtf::LN_FCOMPLEX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_rtf::LN_FHASPIC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CQUICKSAVES:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FENCRYPTED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FWHICHTBLSTM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FREADONLYRECOMMENDED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FEXTCHAR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FEMPTYSPECIAL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FLOADOVERRIDEPAGE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FFUTURESAVEDUNDO:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FSPARE0:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CHSTABLES:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCMIN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CSW:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_WMAGICCREATED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_WMAGICREVISED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_WMAGICCREATEDPRIVATE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_WMAGICREVISEDPRIVATE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LIDFE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CLW:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CCPTEXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_CCPFTN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CCPHDD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CCPATN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CCPEDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CCPTXBX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CCPHDRTXBX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_PNCHPFIRST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CPNBTECHP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_PNPAPFIRST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CPNBTEPAP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_PNLVCFIRST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CPNBTELVC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CFCLCB:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTSHF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTSHF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFFNDREF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFNDREF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFFNDTXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFNDTXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFANDREF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFANDREF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFANDTXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFANDTXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFSED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFSED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFPHE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFPHE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFHDD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFHDD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFBTECHPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFBTECHPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_FCPLCFBTEPAPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFBTEPAPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFFFN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFFFN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFFLDMOM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFLDMOM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFFLDHDR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFLDHDR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_FCPLCFFLDFTN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFLDFTN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFFLDATN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFLDATN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFBKMK:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFBKMK:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFBKF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFBKF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFBKL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFBKL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCDOP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBDOP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFASSOC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFASSOC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCCLX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBCLX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCGRPXSTATNOWNERS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBGRPXSTATNOWNERS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFATNBKMK:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFATNBKMK:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCSPAMOM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCSPAMOM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCSPAHDR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_LCBPLCSPAHDR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFATNBKF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFATNBKF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFATNBKL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFATNBKL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCFORMFLDSTTBF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBFORMFLDSTTBF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFENDREF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_LCBPLCFENDREF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFENDTXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFENDTXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFFLDEDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFLDEDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCDGGINFO:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBDGGINFO:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFRMARK:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_LCBSTTBFRMARK:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFCAPTION:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFCAPTION:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFAUTOCAPTION:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFAUTOCAPTION:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFTXBXTXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFFLDTXBX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFLDTXBX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFHDRTXBXTXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFHDRTXBXTXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFFLDHDRTXBX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFLDHDRTXBX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBTTMBD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBTTMBD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPGDMOTHER:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPGDMOTHER:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCBKDMOTHER:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBBKDMOTHER:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPGDFTN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPGDFTN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCBKDFTN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBBKDFTN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPGDEDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPGDEDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_FCBKDEDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBBKDEDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFLST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_LCBPLCFLST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLFLFO:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLFLFO:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFTXBXBKD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFTXBXBKD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFTXBXHDRBKD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFTXBXHDRBKD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBGLSYSTYLE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_LCBSTTBGLSYSTYLE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFBTELVC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFBTELVC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFLVC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFLVC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBLISTNAMES:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBLISTNAMES:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFUSSR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ {
+ m_pImpl->GetFIB().SetData( nName, nIntValue );
+ }
+ break;
+ case NS_rtf::LN_FN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSEPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FNMPR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCMPR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ //section descriptor, unused or internally used
+ break;
+ case NS_rtf::LN_ICOFORE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_ICOBACK:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_IPAT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_SHDFORECOLOR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_SHDBACKCOLOR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_SHDPATTERN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DPTLINEWIDTH:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_BRCTYPE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_ICO:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DPTSPACE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FSHADOW:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FFRAME:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_UNUSED2_15:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FFIRSTMERGED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FMERGED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FVERTICAL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FBACKWARD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FROTATEFONT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FVERTMERGE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FVERTRESTART:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_VERTALIGN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FUNUSED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_BRCTOP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_rtf::LN_BRCLEFT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_rtf::LN_BRCBOTTOM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_rtf::LN_BRCRIGHT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ {
+ table::BorderLine aBorderLine;
+ sal_Int32 nLineDistance = ConversionHelper::MakeBorderLine( nIntValue, aBorderLine );
+ (void)nLineDistance;
+ PropertyIds eBorderId = PROP_LEFT_BORDER;
+ PropertyIds eBorderDistId = PROP_LEFT_BORDER_DISTANCE ;
+ switch( nName )
+ {
+ case NS_rtf::LN_BRCTOP:
+ eBorderId = PROP_TOP_BORDER ;
+ eBorderDistId = PROP_TOP_BORDER_DISTANCE;
+ break;
+ case NS_rtf::LN_BRCLEFT:
+// eBorderId = PROP_LEFT_BORDER;
+// eBorderDistId = PROP_LEFT_BORDER_DISTANCE ;
+ break;
+ case NS_rtf::LN_BRCBOTTOM:
+ eBorderId = PROP_BOTTOM_BORDER ;
+ eBorderDistId = PROP_BOTTOM_BORDER_DISTANCE;
+ break;
+ case NS_rtf::LN_BRCRIGHT:
+ eBorderId = PROP_RIGHT_BORDER ;
+ eBorderDistId = PROP_RIGHT_BORDER_DISTANCE ;
+ break;
+ default:;
+ }
+ //todo: where to put the border properties
+ //rContext->Insert(eBorderId, uno::makeAny( aBorderLine ));
+ //rContext->Insert(eBorderDistId, uno::makeAny( nLineDistance ));
+ }
+ break;
+ case NS_rtf::LN_ITCFIRST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FPUB:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_ITCLIM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FCOL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LINECOLOR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LINEWIDTH:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LINETYPE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_MM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_XEXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_YEXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_HMF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LCB:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_CBHEADER:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_MFP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_BM_RCWINMF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DXAGOAL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DYAGOAL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_MX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_MY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DXACROPLEFT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DYACROPTOP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DXACROPRIGHT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DYACROPBOTTOM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_BRCL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FFRAMEEMPTY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FBITMAP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FDRAWHATCH:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FERROR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_BPP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DXAORIGIN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DYAORIGIN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_CPROPS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LINEPROPSTOP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LINEPROPSLEFT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LINEPROPSBOTTOM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LINEPROPSRIGHT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LINEPROPSHORIZONTAL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LINEPROPSVERTICAL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_headerr:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_footerr:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_endnote:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_BOOKMARKNAME:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ // sStringValue contains the bookmark name
+ sLocalBookmarkName = sStringValue;
+ break;
+ case NS_rtf::LN_IBKL:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0.5 */
+ //contains the bookmark identifier - has to be added to the bookmark name imported before
+ //if it is already available then the bookmark should be inserted
+ m_pImpl->AddBookmark( sLocalBookmarkName, sStringValue );
+ sLocalBookmarkName = ::rtl::OUString();
+ break;
+ case NS_rtf::LN_LISTLEVEL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LFO:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_F:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_ALTFONTNAME:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_XSZFFN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_XSTZNAME:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_XSTZNAME1:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_UPXSTART:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_UPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_sed:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //section properties
+ resolveAttributeProperties(val);
+ break;
+ case NS_rtf::LN_tbdAdd:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = val.getProperties();
+ if( pProperties.get())
+ {
+ pProperties->resolve(*this);
+ //increment to the next tab stop
+ m_pImpl->NextTabStop();
+ }
+ }
+ break;
+ case NS_rtf::LN_dxaDel:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //deleted tab
+ case NS_rtf::LN_dxaAdd:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //set tab
+ case NS_rtf::LN_TLC:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //tab leading characters - for decimal tabs
+ case NS_rtf::LN_JC:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //tab justification
+ m_pImpl->ModifyCurrentTabStop(nName, nIntValue);
+ break;
+ case NS_rtf::LN_UNUSED0_6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ // really unused
+ break;
+ case NS_rtf::LN_rgbrc:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_shd:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_cellShd:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_cellTopColor:
+ case NS_rtf::LN_cellLeftColor:
+ case NS_rtf::LN_cellBottomColor:
+ case NS_rtf::LN_cellRightColor:
+ OSL_ASSERT("handled by DomainMapperTableManager");
+ break;
+
+ case NS_rtf::LN_LISTTABLE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LFOTABLE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FONTTABLE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_STYLESHEET:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+
+ case NS_rtf::LN_fcEastAsianLayout:
+ /* WRITERFILTERSTATUS: done: 50, planned: 0.5, spent: 0 */
+ /* it seems that the value is following:
+ ???? XX YYYY ZZ
+ where
+ XX seems to be the run id
+ ZZ is the length of the function that is normally 6
+ Lower byte of YYYY determines whether it is
+ vertical text flow (0x01), or
+ two lines in one layout (0x02).
+ For 0x01, if the higher byte of YYYY is zero, the text is not scaled to fit the line height,
+ in oposite case, it is to be scaled.
+ For 0x02, the higher byte of YYYY is determinig the prefix and suffix of the run:
+ no brackets (0x00) ,
+ () round brackets (0x01),
+ [] square backets (0x02),
+ <> angle brackets (0x03) and
+ {} curly brackets (0x04).
+ ???? is different and we do not know its signification
+ */
+
+ if ((nIntValue & 0x000000FF) == 6)
+ {
+ switch ((nIntValue & 0x0000FF00) >> 8)
+ {
+ case 1: // vertical text
+ if (m_pImpl->GetTopContext())
+ {
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_ROTATION, true, uno::makeAny ( sal_Int16(900) ));
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_ROTATION_IS_FIT_TO_LINE, true, uno::makeAny (((nIntValue & 0x00FF0000) >> 16) != 0));
+ }
+ break;
+ case 2: // two lines in one
+ if (m_pImpl->GetTopContext())
+ {
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_IS_ON, true, uno::makeAny ( true ));
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_PREFIX, true, uno::makeAny ( getBracketStringFromEnum((nIntValue & 0x00FF0000) >> 16)));
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_SUFFIX, true, uno::makeAny ( getBracketStringFromEnum((nIntValue & 0x00FF0000) >> 16, false)));
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ case NS_rtf::LN_FRD :
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //footnote reference descriptor, if nIntValue > 0 then automatic, custom otherwise
+ //ignored
+ break;
+ case NS_rtf::LN_FONT: //font of footnote symbol
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->SetFootnoteFontId( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_Sym_char:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if( m_pImpl->GetTopContext() && m_pImpl->GetTopContext()->GetFootnote().is())
+ {
+ m_pImpl->GetTopContext()->GetFootnote()->setLabel(::rtl::OUString( sal_Unicode(nIntValue)));
+ break;
+ }
+ else //it's a _real_ symbol
+ {
+ utext( reinterpret_cast < const sal_uInt8 * >( &nIntValue ), 1 );
+ }
+ break;
+ case NS_rtf::LN_CHAR: //footnote symbol character
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->SetFootnoteSymbol( sal_Unicode(nIntValue));
+ break;
+ case NS_ooxml::LN_CT_Sym_font:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //the footnote symbol and font are provided after the footnote is already inserted
+ if( m_pImpl->GetTopContext() && m_pImpl->GetTopContext()->GetFootnote().is())
+ {
+ uno::Reference< beans::XPropertySet > xAnchorProps( m_pImpl->GetTopContext()->GetFootnote()->getAnchor(), uno::UNO_QUERY );
+ xAnchorProps->setPropertyValue(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_CHAR_FONT_NAME),
+ uno::makeAny( sStringValue ));
+ }
+ else //a real symbol
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME, true, uno::makeAny( sStringValue ));
+ break;
+ case NS_ooxml::LN_CT_Underline_val:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ handleUnderlineType(nIntValue, m_pImpl->GetTopContext());
+ break;
+ case NS_ooxml::LN_CT_Color_val:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_COLOR, true, uno::makeAny( nIntValue ) );
+ break;
+ case NS_ooxml::LN_CT_Underline_color:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ {
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_UNDERLINE_HAS_COLOR, true, uno::makeAny( true ) );
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_UNDERLINE_COLOR, true, uno::makeAny( nIntValue ) );
+ }
+ break;
+
+ case NS_ooxml::LN_CT_TabStop_val:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ 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:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->m_aCurrentTabStop.FillChar = getFillCharFromValue(nIntValue);
+ break;
+ case NS_ooxml::LN_CT_TabStop_pos:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->m_aCurrentTabStop.Position = ConversionHelper::convertTwipToMM100(nIntValue);
+ break;
+
+ case NS_ooxml::LN_CT_Fonts_ascii:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME, true, uno::makeAny( sStringValue ));
+ break;
+ case NS_ooxml::LN_CT_Fonts_asciiTheme:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME, true, uno::makeAny( m_pImpl->GetThemeTable()->getFontNameForTheme(nIntValue) ));
+ break;
+ case NS_ooxml::LN_CT_Fonts_hAnsi:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ break;//unsupported
+ case NS_ooxml::LN_CT_Fonts_hAnsiTheme:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ break; //unsupported
+ case NS_ooxml::LN_CT_Fonts_eastAsia:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME_ASIAN, true, uno::makeAny( sStringValue ));
+ break;
+ case NS_ooxml::LN_CT_Fonts_eastAsiaTheme:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME_COMPLEX, true, uno::makeAny( m_pImpl->GetThemeTable()->getFontNameForTheme(nIntValue) ) );
+ break;
+ case NS_ooxml::LN_CT_Fonts_cs:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME_COMPLEX, true, uno::makeAny( sStringValue ));
+ break;
+ case NS_ooxml::LN_CT_Fonts_cstheme:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME_COMPLEX, true, uno::makeAny( m_pImpl->GetThemeTable()->getFontNameForTheme(nIntValue) ));
+ break;
+ case NS_ooxml::LN_CT_Spacing_before:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_PARA_TOP_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
+ break;
+ case NS_ooxml::LN_CT_Spacing_beforeLines:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_ooxml::LN_CT_Spacing_after:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_PARA_BOTTOM_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
+ break;
+ case NS_ooxml::LN_CT_Spacing_afterLines:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_ooxml::LN_CT_Spacing_line: //91434
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_Spacing_lineRule: //91435
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+#define SINGLE_LINE_SPACING 240
+ style::LineSpacing aSpacing;
+ PropertyMapPtr pTopContext = m_pImpl->GetTopContext();
+ PropertyMap::iterator aLineSpacingIter = pTopContext->find(PropertyDefinition( PROP_PARA_LINE_SPACING, true ) );
+ if( aLineSpacingIter != pTopContext->end())
+ {
+ aLineSpacingIter->second >>= aSpacing;
+ }
+ else
+ {
+ //default to single line spacing
+ aSpacing.Mode = style::LineSpacingMode::FIX;
+ aSpacing.Height = sal_Int16(ConversionHelper::convertTwipToMM100( SINGLE_LINE_SPACING ));
+ }
+ if( nName == NS_ooxml::LN_CT_Spacing_line )
+ {
+ //now set the value depending on the Mode
+ if( aSpacing.Mode == style::LineSpacingMode::PROP )
+ aSpacing.Height = sal_Int16(sal_Int32(nIntValue) * 100 / SINGLE_LINE_SPACING );
+ 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_wordprocessingml_ST_LineSpacingRule_auto)
+ {
+ aSpacing.Mode = style::LineSpacingMode::PROP;
+ //reinterpret the already set value
+ aSpacing.Height = sal_Int16( aSpacing.Height * 100 / ConversionHelper::convertTwipToMM100( SINGLE_LINE_SPACING ));
+ }
+ else if( sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_wordprocessingml_ST_LineSpacingRule_atLeast)
+ aSpacing.Mode = style::LineSpacingMode::MINIMUM;
+ else // NS_ooxml::LN_Value_wordprocessingml_ST_LineSpacingRule_exact
+ aSpacing.Mode = style::LineSpacingMode::FIX;
+ }
+ pTopContext->Insert(PROP_PARA_LINE_SPACING, true, uno::makeAny( aSpacing ));
+ }
+ break;
+ case NS_ooxml::LN_CT_Ind_left:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(
+ PROP_PARA_LEFT_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100(nIntValue ) ));
+ break;
+ case NS_ooxml::LN_CT_Ind_right:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(
+ PROP_PARA_RIGHT_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100(nIntValue ) ));
+ break;
+ case NS_ooxml::LN_CT_Ind_hanging:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(
+ PROP_PARA_FIRST_LINE_INDENT, true, uno::makeAny( - ConversionHelper::convertTwipToMM100(nIntValue ) ));
+ break;
+ case NS_ooxml::LN_CT_Ind_firstLine:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(
+ PROP_PARA_FIRST_LINE_INDENT, true, uno::makeAny( ConversionHelper::convertTwipToMM100(nIntValue ) ));
+ break;
+
+ case NS_ooxml::LN_CT_EastAsianLayout_id:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_ooxml::LN_CT_EastAsianLayout_combine:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_IS_ON, true, uno::makeAny ( nIntValue ? true : false ));
+ break;
+ case NS_ooxml::LN_CT_EastAsianLayout_combineBrackets:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ {
+ rtl::OUString sCombinePrefix = getBracketStringFromEnum(nIntValue);
+ rtl::OUString sCombineSuffix = getBracketStringFromEnum(nIntValue, false);
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_PREFIX, true, uno::makeAny ( sCombinePrefix ));
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_SUFFIX, true, uno::makeAny ( sCombineSuffix ));
+ }
+ break;
+ case NS_ooxml::LN_CT_EastAsianLayout_vert:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ {
+ sal_Int16 nRotationAngle = (nIntValue ? 900 : 0);
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_ROTATION, true, uno::makeAny ( nRotationAngle ));
+ }
+ break;
+ case NS_ooxml::LN_CT_EastAsianLayout_vertCompress:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_ROTATION_IS_FIT_TO_LINE, true, uno::makeAny ( nIntValue ? true : false));
+ break;
+
+ case NS_ooxml::LN_CT_PageSz_code:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ CT_PageSz.code = nIntValue;
+ break;
+ case NS_ooxml::LN_CT_PageSz_h:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ sal_Int32 nHeight = ConversionHelper::convertTwipToMM100(nIntValue);
+ CT_PageSz.h = PaperInfo::sloppyFitPageDimension(nHeight);
+ }
+ break;
+ case NS_ooxml::LN_CT_PageSz_orient:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ CT_PageSz.orient = (nIntValue != 0);
+ break;
+ case NS_ooxml::LN_CT_PageSz_w:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ sal_Int32 nWidth = ConversionHelper::convertTwipToMM100(nIntValue);
+ CT_PageSz.w = PaperInfo::sloppyFitPageDimension(nWidth);
+ }
+ break;
+
+ case NS_ooxml::LN_CT_PageMar_top:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetPageMarginTwip( PAGE_MAR_TOP, nIntValue );
+ break;
+ case NS_ooxml::LN_CT_PageMar_right:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetPageMarginTwip( PAGE_MAR_RIGHT, nIntValue );
+ break;
+ case NS_ooxml::LN_CT_PageMar_bottom:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetPageMarginTwip( PAGE_MAR_BOTTOM, nIntValue );
+ break;
+ case NS_ooxml::LN_CT_PageMar_left:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetPageMarginTwip( PAGE_MAR_LEFT, nIntValue );
+ break;
+ case NS_ooxml::LN_CT_PageMar_header:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetPageMarginTwip( PAGE_MAR_HEADER, nIntValue );
+ break;
+ case NS_ooxml::LN_CT_PageMar_footer:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetPageMarginTwip( PAGE_MAR_FOOTER, nIntValue );
+ break;
+ case NS_ooxml::LN_CT_PageMar_gutter:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetPageMarginTwip( PAGE_MAR_GUTTER, nIntValue );
+ break;
+ case NS_ooxml::LN_CT_Language_val: //90314
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_Language_eastAsia: //90315
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_Language_bidi: //90316
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ LanguageType eLang = MsLangId::convertIsoStringToLanguage( sStringValue );
+ lang::Locale aLocale = MsLangId::convertLanguageToLocale( eLang );
+ 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,
+ true,
+ uno::makeAny( aLocale ) );
+ }
+ break;
+#define AUTO_PARA_SPACING sal_Int32(49)
+ case NS_ooxml::LN_CT_Spacing_beforeAutospacing:
+ /* WRITERFILTERSTATUS: done: 80, planned: 0.5, spent: 0.2 */
+ //TODO: autospacing depends on some document property (called fDontUseHTMLAutoSpacing in old ww8 filter) 100 or 280 twip
+ //and should be set to 0 on start of page
+ m_pImpl->GetTopContext()->Insert( PROP_PARA_TOP_MARGIN, false, uno::makeAny( AUTO_PARA_SPACING ) );
+ break;
+ case NS_ooxml::LN_CT_Spacing_afterAutospacing:
+ /* WRITERFILTERSTATUS: done: 80, planned: 0.5, spent: 0.2 */
+ //TODO: autospacing depends on some document property (called fDontUseHTMLAutoSpacing in old ww8 filter) 100 or 280 twip
+ m_pImpl->GetTopContext()->Insert( PROP_PARA_BOTTOM_MARGIN, false, uno::makeAny( AUTO_PARA_SPACING ) );
+ break;
+ case NS_ooxml::LN_CT_SmartTagRun_uri:
+ case NS_ooxml::LN_CT_SmartTagRun_element:
+ /* WRITERFILTERSTATUS: done: 0, planned: 1, spent: 0 */
+ //TODO: add handling of SmartTags
+ break;
+ case NS_ooxml::LN_CT_Br_type :
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ //TODO: attributes for break (0x12) are not supported
+ break;
+ case NS_ooxml::LN_CT_Fonts_hint :
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ /* assigns script type to ambigous 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_TblCellMar_right: // 92375;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_TblBorders_top: // 92377;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_TblBorders_left: // 92378;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_TblBorders_bottom: // 92379;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ //todo: handle cell mar
+ break;
+ case NS_rtf::LN_blip: // contains the binary graphic
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_shape:
+ /* WRITERFILTERSTATUS: done: 50, planned: 0.5, spent: 0 */
+ {
+ //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_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_sprm::LN_PWr:
+ case NS_sprm::LN_PDxaWidth:
+ case NS_sprm::LN_PWHeightAbs:
+ case NS_sprm::LN_PDxaFromText:
+ case NS_sprm::LN_PDyaFromText:
+ {
+ ParagraphProperties* pParaProperties = dynamic_cast< ParagraphProperties*>(m_pImpl->GetTopContext().get());
+ if( pParaProperties )
+ {
+ switch( nName )
+ {
+ case NS_ooxml::LN_CT_FramePr_dropCap:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pParaProperties->SetDropCap( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_FramePr_lines:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pParaProperties->SetLines( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_FramePr_hAnchor:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ switch(nIntValue)
+ {
+ case NS_ooxml::LN_Value_wordprocessingml_ST_HAnchor_text: //relative to column
+ nIntValue = text::RelOrientation::FRAME; break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_HAnchor_margin: nIntValue = text::RelOrientation::PAGE_PRINT_AREA; break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_HAnchor_page: nIntValue = text::RelOrientation::PAGE_FRAME; break;
+ default:;
+ }
+ pParaProperties->SethAnchor( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_FramePr_vAnchor:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ switch(nIntValue)
+ {
+ case NS_ooxml::LN_Value_wordprocessingml_ST_VAnchor_text: //relative to paragraph
+ nIntValue = text::RelOrientation::FRAME; break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_VAnchor_margin:nIntValue = text::RelOrientation::PAGE_PRINT_AREA ; break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_VAnchor_page: nIntValue = text::RelOrientation::PAGE_FRAME; break;
+ default:;
+ }
+ pParaProperties->SetvAnchor( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_FramePr_x:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pParaProperties->Setx( ConversionHelper::convertTwipToMM100(nIntValue ));
+ break;
+ case NS_ooxml::LN_CT_FramePr_xAlign:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ switch( nIntValue )
+ {
+ case NS_ooxml::LN_Value_wordprocessingml_ST_XAlign_center : nIntValue = text::HoriOrientation::CENTER; break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_XAlign_right : nIntValue = text::HoriOrientation::RIGHT; break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_XAlign_inside : nIntValue = text::HoriOrientation::INSIDE; break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_XAlign_outside : nIntValue = text::HoriOrientation::OUTSIDE; break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_XAlign_left : nIntValue = text::HoriOrientation::LEFT; break;
+ default: nIntValue = text::HoriOrientation::NONE;
+ }
+ pParaProperties->SetxAlign( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_FramePr_y:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pParaProperties->Sety( ConversionHelper::convertTwipToMM100(nIntValue ));
+ break;
+ case NS_ooxml::LN_CT_FramePr_yAlign:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ switch( nIntValue )
+ {
+ case NS_ooxml::LN_Value_wordprocessingml_ST_YAlign_top :
+ case NS_ooxml::LN_Value_wordprocessingml_ST_YAlign_inside :nIntValue = text::VertOrientation::TOP; break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_YAlign_center :nIntValue = text::VertOrientation::CENTER;break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_YAlign_bottom :
+ case NS_ooxml::LN_Value_wordprocessingml_ST_YAlign_outside :nIntValue = text::VertOrientation::BOTTOM;break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_YAlign_inline ://todo: what to do with inline - no avail. in WW97 and WW2007
+ //no break;
+ default:nIntValue = text::VertOrientation::NONE;
+ }
+ pParaProperties->SetyAlign( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_FramePr_hRule:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ switch( nIntValue )
+ {
+ case NS_ooxml::LN_Value_wordprocessingml_ST_HeightRule_exact:
+ nIntValue = text::SizeType::FIX;
+ break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_HeightRule_atLeast:
+ nIntValue = text::SizeType::MIN;
+ break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_HeightRule_auto:
+ //no break;
+ default:;
+ nIntValue = text::SizeType::VARIABLE;
+ }
+ pParaProperties->SethRule( nIntValue );
+ break;
+ case NS_sprm::LN_PWr:
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //should be either LN_Value_wordprocessingml_ST_Wrap_notBeside or LN_Value_wordprocessingml_ST_Wrap_around
+ OSL_ENSURE( sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_wordprocessingml_ST_Wrap_around ||
+ sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_wordprocessingml_ST_Wrap_notBeside,
+ "wrap not around or not_Beside?");
+ pParaProperties->SetWrap(sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_wordprocessingml_ST_Wrap_around ?
+ text::WrapTextMode_DYNAMIC : text::WrapTextMode_NONE );
+ }
+ break;
+ case NS_sprm::LN_PDxaWidth:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pParaProperties->Setw(ConversionHelper::convertTwipToMM100(nIntValue));
+ break;
+ case NS_sprm::LN_PWHeightAbs:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pParaProperties->Seth(ConversionHelper::convertTwipToMM100(nIntValue));
+ break;
+ case NS_sprm::LN_PDxaFromText:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ pParaProperties->SethSpace( ConversionHelper::convertTwipToMM100(nIntValue ));
+ break;
+ case NS_sprm::LN_PDyaFromText:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ pParaProperties->SetvSpace( ConversionHelper::convertTwipToMM100(nIntValue ));
+ break;
+ default:;
+ }
+ }
+ else
+ {
+ //TODO: how to handle frame properties at styles
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_LineNumber_start:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_LineNumber_distance:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_TrackChange_author:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetCurrentRedlineAuthor( sStringValue );
+ break;
+ case NS_ooxml::LN_CT_TrackChange_date:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetCurrentRedlineDate( sStringValue );
+ break;
+ case NS_ooxml::LN_CT_Markup_id:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetCurrentRedlineId( nIntValue );
+ break;
+ case NS_ooxml::LN_token:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetCurrentRedlineToken( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_LineNumber_countBy:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_LineNumber_restart:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ {
+ //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;
+ break;
+ case NS_ooxml::LN_CT_LineNumber_start:
+ aSettings.nStartValue = nIntValue; // todo: has to be set at (each) first paragraph
+ break;
+ case NS_ooxml::LN_CT_LineNumber_distance:
+ aSettings.nDistance = ConversionHelper::convertTwipToMM100( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_LineNumber_restart:
+ //page:empty, probably 0,section:1,continuous:2;
+ aSettings.bRestartAtEachPage = nIntValue < 1;
+ break;
+ default:;
+ }
+ m_pImpl->SetLineNumberSettings( aSettings );
+ }
+ break;
+ case NS_ooxml::LN_CT_FtnEdnRef_customMarkFollows:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetCustomFtnMark( true );
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_FtnEdnRef_id:
+ // footnote or endnote reference id - not needed
+ case NS_ooxml::LN_CT_Color_themeColor:
+ case NS_ooxml::LN_CT_Color_themeTint:
+ case NS_ooxml::LN_CT_Color_themeShade:
+ //unsupported
+ break;
+ case NS_ooxml::LN_endtrackchange:
+ m_pImpl->RemoveCurrentRedline( );
+ break;
+ default:
+ {
+#if OSL_DEBUG_LEVEL > 0
+ ::rtl::OString sMessage( "DomainMapper::attribute() - Id: ");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nName ), 10 );
+ sMessage += ::rtl::OString(" / 0x");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nName ), 16 );
+// sMessage += ::rtl::OString(" / ");
+// sMessage += ::rtl::OString
+// ((*QNameToString::Instance())(nName).c_str());
+ sMessage += ::rtl::OString(" value: ");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nIntValue ), 10 );
+ sMessage += ::rtl::OString(" / 0x");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nIntValue ), 16 );
+ OSL_ENSURE( false, sMessage.getStr()); //
+#endif
+ }
+ }
+ }
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("attribute");
+#endif
+}
+/*-- 09.06.2006 09:52:12---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::sprm(Sprm & rSprm)
+{
+ if( !m_pImpl->getTableManager().sprm(rSprm))
+ DomainMapper::sprm( rSprm, m_pImpl->GetTopContext() );
+}
+/*-- 20.06.2006 09:58:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmType )
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("sprm");
+ dmapper_logger->chars(rSprm.toString());
+#endif
+ OSL_ENSURE(rContext.get(), "PropertyMap has to be valid!");
+ if(!rContext.get())
+ return ;
+
+ sal_uInt32 nSprmId = rSprm.getId();
+ //needed for page properties
+ SectionPropertyMap* pSectionContext = 0;
+ //the section context is not availabe before the first call of startSectionGroup()
+ if( !m_pImpl->IsAnyTableImport() )
+ {
+ PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_SECTION);
+ OSL_ENSURE(pContext.get(), "Section context is not in the stack!");
+ pSectionContext = dynamic_cast< SectionPropertyMap* >( pContext.get() );
+ }
+
+ //TODO: In rtl-paragraphs the meaning of left/right are to be exchanged
+ bool bExchangeLeftRight = false;
+ // if( nSprmId == NS_sprm::LN_PJcExtra && AlreadyInRTLPara() )
+ // bExchangeLeftRight = true;
+ Value::Pointer_t pValue = rSprm.getValue();
+ sal_Int32 nIntValue = pValue->getInt();
+ rtl::OUString sStringValue = pValue->getString();
+ // printf ( "DomainMapper::sprm(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)nSprmId, (unsigned int)nIntValue, ::rtl::OUStringToOString(sStringValue, RTL_TEXTENCODING_DONTKNOW).getStr());
+ /* WRITERFILTERSTATUS: table: sprmdata */
+
+ switch(nSprmId)
+ {
+ case 2: // sprmPIstd
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ case 0x4600:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPIstd - style code
+ case 3: // "sprmPIstdPermute
+ case NS_sprm::LN_PIstdPermute:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPIstdPermute
+ case NS_sprm::LN_PIncLvl:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPIncLvl
+ case NS_sprm::LN_PJcExtra: // sprmPJc Asian (undocumented)
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ case NS_sprm::LN_PJc: // sprmPJc
+ handleParaJustification(nIntValue, rContext, bExchangeLeftRight);
+ break;
+ case NS_sprm::LN_PFSideBySide:
+ /* WRITERFILTERSTATUS: done: 0, planned: 3, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: */
+ break; // sprmPFSideBySide
+
+ case NS_sprm::LN_PFKeep: // sprmPFKeep
+ /* WRITERFILTERSTATUS: done: 0, planned: 3, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: */
+ break;
+ case NS_sprm::LN_PFKeepFollow: // sprmPFKeepFollow
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
+ /* WRITERFILTERSTATUS: comment: */
+ rContext->Insert(PROP_PARA_KEEP_TOGETHER, true, uno::makeAny( nIntValue ? true : false) );
+ break;
+ case NS_sprm::LN_PFPageBreakBefore:
+ /* WRITERFILTERSTATUS: done: 100, planned: 3, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: */
+ rContext->Insert(PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE ) );
+ break; // sprmPFPageBreakBefore
+ case NS_sprm::LN_PBrcl:
+ break; // sprmPBrcl
+ case NS_sprm::LN_PBrcp:
+ break; // sprmPBrcp
+ case NS_sprm::LN_PIlvl: // sprmPIlvl
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
+ /* WRITERFILTERSTATUS: comment: */
+ //todo: Numbering level will be implemented in the near future (OOo 3.0?)
+ if( m_pImpl->IsStyleSheetImport() )
+ {
+ //style sheets cannot have a numbering rule attached
+ StyleSheetPropertyMap* pStyleSheetPropertyMap = dynamic_cast< StyleSheetPropertyMap* >( rContext.get() );
+ pStyleSheetPropertyMap->SetListLevel( (sal_Int16)nIntValue );
+ }
+ else
+ rContext->Insert( PROP_NUMBERING_LEVEL, true, uno::makeAny( (sal_Int16)nIntValue ));
+ break;
+ case NS_sprm::LN_PIlfo: // sprmPIlfo
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 1 */
+ /* WRITERFILTERSTATUS: comment: */
+ {
+ //convert the ListTable entry to a NumberingRules propery and apply it
+ sal_Int32 nListId = m_pImpl->GetLFOTable()->GetListID( nIntValue );
+ if(nListId >= 0)
+ {
+ ListTablePtr pListTable = m_pImpl->GetListTable();
+ if( m_pImpl->IsStyleSheetImport() )
+ {
+ //style sheets cannot have a numbering rule attached
+ StyleSheetPropertyMap* pStyleSheetPropertyMap = dynamic_cast< StyleSheetPropertyMap* >( rContext.get() );
+ pStyleSheetPropertyMap->SetListId( nListId );
+ }
+ else
+ rContext->Insert( PROP_NUMBERING_RULES, true,
+ uno::makeAny(pListTable->GetNumberingRules(nListId)));
+ //TODO: Merge overwrittern numbering levels from LFO table
+ }
+ }
+ break;
+ case NS_sprm::LN_PFNoLineNumb: // sprmPFNoLineNumb
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
+ /* WRITERFILTERSTATUS: comment: */
+ rContext->Insert(PROP_PARA_LINE_NUMBER_COUNT, true, uno::makeAny( nIntValue ? false : true) );
+ break;
+ case NS_sprm::LN_PChgTabsPapx: // sprmPChgTabsPapx
+ /* WRITERFILTERSTATUS: done: 90, planned: 8, spent: 8 */
+ /* WRITERFILTERSTATUS: comment: bar tab stops a unavailable */
+ {
+ // Initialize tab stop vector from style sheet
+ uno::Any aValue = m_pImpl->GetPropertyFromStyleSheet(PROP_PARA_TAB_STOPS);
+ uno::Sequence< style::TabStop > aStyleTabStops;
+ if(aValue >>= aStyleTabStops)
+ {
+ m_pImpl->InitTabStopFromStyle( aStyleTabStops );
+ }
+
+ //create a new tab stop property - this is done with the contained properties
+ resolveSprmProps(rSprm);
+ //add this property
+ rContext->Insert(PROP_PARA_TAB_STOPS, true, uno::makeAny( m_pImpl->GetCurrentTabStopAndClear()));
+ }
+ break;
+ case 0x845d: //right margin Asian - undocumented
+ case 0x845e: //left margin Asian - undocumented
+ case 16: // sprmPDxaRight - right margin
+ case NS_sprm::LN_PDxaRight: // sprmPDxaRight - right margin
+ case 17:
+ case NS_sprm::LN_PDxaLeft: // sprmPDxaLeft
+ /* WRITERFILTERSTATUS: done: 50, planned: 5, spent: 1 */
+ if( NS_sprm::LN_PDxaLeft == nSprmId || 0x17 == nSprmId|| (bExchangeLeftRight && nSprmId == 0x845d) || ( !bExchangeLeftRight && nSprmId == 0x845e))
+ rContext->Insert(
+ eSprmType == SPRM_DEFAULT ? PROP_PARA_LEFT_MARGIN : PROP_LEFT_MARGIN,
+ true,
+ uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
+ else if(eSprmType == SPRM_DEFAULT)
+ rContext->Insert(
+ PROP_PARA_RIGHT_MARGIN, true,
+ uno::makeAny( ConversionHelper::convertTwipToMM100(nIntValue ) ));
+ //TODO: what happens to the right margins in numberings?
+ break;
+ case 18: // sprmPNest
+ case NS_sprm::LN_PNest: // sprmPNest
+ //not handled in the old WW8 filter
+ break;
+ case 0x8460: //first line indent Asian - undocumented
+ case 19:
+ case NS_sprm::LN_PDxaLeft1: // sprmPDxaLeft1
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
+ rContext->Insert(
+ eSprmType == SPRM_DEFAULT ? PROP_PARA_FIRST_LINE_INDENT : PROP_FIRST_LINE_OFFSET,
+ true,
+ uno::makeAny( ConversionHelper::convertTwipToMM100(nIntValue ) ));
+ break;
+ case 20 : // sprmPDyaLine
+ case NS_sprm::LN_PDyaLine: // sprmPDyaLine
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
+ {
+ style::LineSpacing aSpacing;
+ sal_Int16 nDistance = sal_Int16(nIntValue & 0xffff);
+ if(nIntValue & 0xffff0000)
+ {
+ // single line in Writer is 100, in Word it is 240
+ aSpacing.Mode = style::LineSpacingMode::PROP;
+ aSpacing.Height = sal_Int16(sal_Int32(nDistance) * 100 /240);
+ }
+ else
+ {
+ if(nDistance < 0)
+ {
+ aSpacing.Mode = style::LineSpacingMode::FIX;
+ aSpacing.Height = sal_Int16(ConversionHelper::convertTwipToMM100(-nDistance));
+ }
+ else if(nDistance >0)
+ {
+ aSpacing.Mode = style::LineSpacingMode::MINIMUM;
+ aSpacing.Height = sal_Int16(ConversionHelper::convertTwipToMM100(nDistance));
+ }
+ }
+ rContext->Insert(PROP_PARA_LINE_SPACING, true, uno::makeAny( aSpacing ));
+ }
+ break;
+ case 21 : // legacy version
+ case NS_sprm::LN_PDyaBefore: // sprmPDyaBefore
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
+ rContext->Insert(PROP_PARA_TOP_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
+ break;
+ case 22 :
+ case NS_sprm::LN_PDyaAfter: // sprmPDyaAfter
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
+ rContext->Insert(PROP_PARA_BOTTOM_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
+ break;
+
+ case 23: //sprmPChgTabs
+ case NS_sprm::LN_PChgTabs: // sprmPChgTabs
+ /* WRITERFILTERSTATUS: done: 0, planned: 3, spent: 0 */
+ OSL_ENSURE( false, "unhandled");
+ //tabs of list level?
+ break;
+ case 24: // "sprmPFInTable"
+ case NS_sprm::LN_PFInTable:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFInTable
+ case NS_sprm::LN_PTableDepth: //sprmPTableDepth
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ //not handled via sprm but via text( 0x07 )
+ break;
+ case 25: // "sprmPTtp" pap.fTtp
+ case NS_sprm::LN_PFTtp: // sprmPFTtp was: Read_TabRowEnd
+ break;
+ case 26: // "sprmPDxaAbs
+ case NS_sprm::LN_PDxaAbs:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPDxaAbs
+ case 27: //sprmPDyaAbs
+ case NS_sprm::LN_PDyaAbs:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPDyaAbs
+ case NS_sprm::LN_PDxaWidth:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPDxaWidth
+ case NS_sprm::LN_PPc:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPPc
+ case NS_sprm::LN_PBrcTop10:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPBrcTop10
+ case NS_sprm::LN_PBrcLeft10:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPBrcLeft10
+ case NS_sprm::LN_PBrcBottom10:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPBrcBottom10
+ case NS_sprm::LN_PBrcRight10:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPBrcRight10
+ case NS_sprm::LN_PBrcBetween10:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPBrcBetween10
+ case NS_sprm::LN_PBrcBar10:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPBrcBar10
+ case NS_sprm::LN_PDxaFromText10:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPDxaFromText10
+ case NS_sprm::LN_PWr:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPWr
+
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ case NS_ooxml::LN_CT_PrBase_pBdr: //paragraph border
+ resolveSprmProps(rSprm);
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ case NS_sprm::LN_PBrcTop: // sprmPBrcTop
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: page borders are no handled yet, conversion incomplete */
+ case NS_sprm::LN_PBrcLeft: // sprmPBrcLeft
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: page borders are no handled yet, conversion incomplete */
+ case NS_sprm::LN_PBrcBottom: // sprmPBrcBottom
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: page borders are no handled yet, conversion incomplete */
+ case NS_sprm::LN_PBrcRight: // sprmPBrcRight
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: page borders are no handled yet, conversion incomplete */
+ case NS_sprm::LN_PBrcBetween: // sprmPBrcBetween
+ /* WRITERFILTERSTATUS: done: 0, planned: 8, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: */
+ {
+ //in binary format the borders are directly provided in OOXML they are inside of properties
+ if( IsOOXMLImport() )
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ BorderHandlerPtr pBorderHandler( new BorderHandler( true ) );
+ pProperties->resolve(*pBorderHandler);
+ PropertyIds eBorderId = PropertyIds( 0 );
+ PropertyIds eBorderDistId = PropertyIds( 0 );
+ switch( nSprmId )
+ {
+ case NS_sprm::LN_PBrcTop:
+ eBorderId = PROP_TOP_BORDER;
+ eBorderDistId = PROP_TOP_BORDER_DISTANCE;
+ break;
+ case NS_sprm::LN_PBrcLeft:
+ eBorderId = PROP_LEFT_BORDER;
+ eBorderDistId = PROP_LEFT_BORDER_DISTANCE;
+ break;
+ case NS_sprm::LN_PBrcBottom:
+ eBorderId = PROP_BOTTOM_BORDER ;
+ eBorderDistId = PROP_BOTTOM_BORDER_DISTANCE;
+ break;
+ case NS_sprm::LN_PBrcRight:
+ eBorderId = PROP_RIGHT_BORDER;
+ eBorderDistId = PROP_RIGHT_BORDER_DISTANCE ;
+ break;
+ case NS_sprm::LN_PBrcBetween:
+ //not supported
+ break;
+ default:;
+ }
+ if( eBorderId )
+ rContext->Insert( eBorderId, true, uno::makeAny( pBorderHandler->getBorderLine()) , true);
+ if(eBorderDistId)
+ rContext->Insert(eBorderDistId, true, uno::makeAny( pBorderHandler->getLineDistance()), true);
+ }
+ }
+ else
+ {
+ table::BorderLine aBorderLine;
+ sal_Int32 nLineDistance = ConversionHelper::MakeBorderLine( nIntValue, aBorderLine );
+ PropertyIds eBorderId = PROP_LEFT_BORDER;
+ PropertyIds eBorderDistId = PROP_LEFT_BORDER_DISTANCE ;
+ switch( nSprmId )
+ {
+ case NS_sprm::LN_PBrcBetween: // sprmPBrcBetween
+ OSL_ENSURE( false, "TODO: inner border is not handled");
+ break;
+ case NS_sprm::LN_PBrcLeft: // sprmPBrcLeft
+ eBorderId = PROP_LEFT_BORDER;
+ eBorderDistId = PROP_LEFT_BORDER_DISTANCE ;
+ break;
+ case NS_sprm::LN_PBrcRight: // sprmPBrcRight
+ eBorderId = PROP_RIGHT_BORDER ;
+ eBorderDistId = PROP_RIGHT_BORDER_DISTANCE ;
+ break;
+ case NS_sprm::LN_PBrcTop: // sprmPBrcTop
+ eBorderId = PROP_TOP_BORDER ;
+ eBorderDistId = PROP_TOP_BORDER_DISTANCE;
+ break;
+ case NS_sprm::LN_PBrcBottom: // sprmPBrcBottom
+ default:
+ eBorderId = PROP_BOTTOM_BORDER ;
+ eBorderDistId = PROP_BOTTOM_BORDER_DISTANCE;
+ }
+ rContext->Insert(eBorderId, true, uno::makeAny( aBorderLine ));
+ rContext->Insert(eBorderDistId, true, uno::makeAny( nLineDistance ));
+ }
+ }
+ break;
+ case NS_sprm::LN_PBorderTop:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: probably _real_ border colors, unhandled */
+ case NS_sprm::LN_PBorderLeft:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: probably _real_ border colors, unhandled */
+ case NS_sprm::LN_PBorderBottom:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: probably _real_ border colors, unhandled */
+ case NS_sprm::LN_PBorderRight:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: probably _real_ border colors, unhandled */
+ OSL_ENSURE( false, "TODO: border color definition");
+ break;
+ case NS_sprm::LN_PBrcBar:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPBrcBar
+ case NS_sprm::LN_PFNoAutoHyph: // sprmPFNoAutoHyph
+ rContext->Insert(PROP_PARA_IS_HYPHENATION, true, uno::makeAny( nIntValue ? false : true ));
+ break;
+ case NS_sprm::LN_PWHeightAbs:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPWHeightAbs
+ case NS_sprm::LN_PDcs:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPDcs
+
+ case NS_sprm::LN_PShd: // sprmPShd
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 2 */
+ //contains fore color, back color and shadow percentage, results in a brush
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ CellColorHandlerPtr pCellColorHandler( new CellColorHandler );
+ pCellColorHandler->setParagraph();
+ pProperties->resolve(*pCellColorHandler);
+ rContext->insert( pCellColorHandler->getProperties(), true );
+ }
+ }
+ break;
+ case NS_sprm::LN_PDyaFromText:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPDyaFromText
+ case NS_sprm::LN_PDxaFromText:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPDxaFromText
+ case NS_sprm::LN_PFLocked:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFLocked
+ case NS_sprm::LN_PFWidowControl:
+ case NS_ooxml::LN_CT_PPrBase_widowControl:
+ {
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ uno::Any aVal( uno::makeAny( sal_Int8(nIntValue ? 2 : 0 )));
+ rContext->Insert( PROP_PARA_WIDOWS, true, aVal );
+ rContext->Insert( PROP_PARA_ORPHANS, true, aVal );
+ }
+ break; // sprmPFWidowControl
+ case NS_sprm::LN_PRuler:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPRuler
+ case NS_sprm::LN_PFKinsoku:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFKinsoku
+ case NS_sprm::LN_PFWordWrap:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFWordWrap
+ case NS_sprm::LN_PFOverflowPunct: ; // sprmPFOverflowPunct - hanging punctuation
+ rContext->Insert(PROP_PARA_IS_HANGING_PUNCTUATION, true, uno::makeAny( nIntValue ? false : true ));
+ break;
+ case NS_sprm::LN_PFTopLinePunct:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFTopLinePunct
+ case NS_sprm::LN_PFAutoSpaceDE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFAutoSpaceDE
+ case NS_sprm::LN_PFAutoSpaceDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFAutoSpaceDN
+ case NS_sprm::LN_PWAlignFont:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPWAlignFont
+ case NS_sprm::LN_PFrameTextFlow:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFrameTextFlow
+ case NS_sprm::LN_PISnapBaseLine:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPISnapBaseLine
+ case NS_sprm::LN_PAnld:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPAnld
+ case NS_sprm::LN_PPropRMark:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPPropRMark
+ case NS_sprm::LN_POutLvl:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ {
+ if( m_pImpl->IsStyleSheetImport() )
+ {
+ sal_Int16 nLvl = static_cast< sal_Int16 >( nIntValue );
+
+ StyleSheetPropertyMap* pStyleSheetPropertyMap = dynamic_cast< StyleSheetPropertyMap* >( rContext.get() );
+ pStyleSheetPropertyMap->SetOutlineLevel( nLvl );
+ }
+ }
+ break; // sprmPOutLvl
+ case NS_sprm::LN_PFBiDi:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFBiDi
+ case NS_sprm::LN_PFNumRMIns:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFNumRMIns
+ case NS_sprm::LN_PCrLf:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPCrLf
+ case NS_sprm::LN_PNumRM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPNumRM
+ case NS_sprm::LN_PHugePapx:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPHugePapx
+ case NS_sprm::LN_PFUsePgsuSettings:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFUsePgsuSettings
+ case NS_sprm::LN_PFAdjustRight:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFAdjustRight
+ case NS_sprm::LN_CFRMarkDel:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFRMarkDel
+ case NS_sprm::LN_CFRMark:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFRMark
+ case NS_sprm::LN_CFFldVanish:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFFldVanish
+ case NS_sprm::LN_CFSpec: // sprmCFSpec
+ break;
+ case NS_sprm::LN_CPicLocation: // sprmCPicLocation
+ //is being resolved on the tokenizer side
+ break;
+ case NS_sprm::LN_CIbstRMark:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCIbstRMark
+ case NS_sprm::LN_CDttmRMark:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCDttmRMark
+ case NS_sprm::LN_CFData:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFData
+ case NS_sprm::LN_CIdslRMark:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCIdslRMark
+ case NS_sprm::LN_CChs:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCChs
+ case NS_sprm::LN_CSymbol: // sprmCSymbol
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ resolveSprmProps(rSprm); //resolves LN_FONT and LN_CHAR
+ break;
+ case NS_sprm::LN_CFOle2:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFOle2
+ case NS_sprm::LN_CIdCharType:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCIdCharType
+ case NS_sprm::LN_CHighlight:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ {
+ sal_Int32 nColor = 0;
+ if(true ==( mbIsHighlightSet = getColorFromIndex(nIntValue, nColor)))
+ rContext->Insert(PROP_CHAR_BACK_COLOR, true, uno::makeAny( nColor ));
+ else if (mnBackgroundColor)
+ rContext->Insert(PROP_CHAR_BACK_COLOR, true, uno::makeAny( mnBackgroundColor ));
+ }
+ break; // sprmCHighlight
+ case NS_sprm::LN_CObjLocation:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCObjLocation
+ case NS_sprm::LN_CFFtcAsciSymb:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFFtcAsciSymb
+ case NS_sprm::LN_CIstd:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCIstd
+ case NS_sprm::LN_CIstdPermute:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCIstdPermute
+ case NS_sprm::LN_CDefault:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCDefault
+ case NS_sprm::LN_CPlain:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCPlain
+ case NS_sprm::LN_CKcd:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ rContext->Insert(PROP_CHAR_EMPHASIS, true, uno::makeAny ( getEmphasisValue (nIntValue)));
+ break; // sprmCKcd
+ case NS_sprm::LN_CFEmboss:// sprmCFEmboss
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case 60:// sprmCFBold
+ case NS_sprm::LN_CFBoldBi:// sprmCFBoldBi (offset 0x27 to normal bold)
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case NS_sprm::LN_CFItalicBi:// sprmCFItalicBi (offset 0x27 to normal italic)
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case NS_sprm::LN_CFBold: //sprmCFBold
+ case 61: /*sprmCFItalic*/
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case NS_sprm::LN_CFItalic: //sprmCFItalic
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case NS_sprm::LN_CFStrike: //sprmCFStrike
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5*/
+ case NS_sprm::LN_CFOutline: //sprmCFOutline
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case NS_sprm::LN_CFShadow: //sprmCFShadow
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case NS_sprm::LN_CFSmallCaps: //sprmCFSmallCaps
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case NS_sprm::LN_CFCaps: //sprmCFCaps
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case NS_sprm::LN_CFVanish: //sprmCFVanish
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case NS_sprm::LN_CFDStrike: // sprmCFDStrike
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ {
+ PropertyIds ePropertyId = PROP_CHAR_WEIGHT; //initialized to prevent warning!
+ switch( nSprmId )
+ {
+ case 60:// sprmCFBold
+ case NS_sprm::LN_CFBoldBi: // sprmCFBoldBi
+ case NS_sprm::LN_CFBold: /*sprmCFBold*/
+ ePropertyId = nSprmId != NS_sprm::LN_CFBoldBi ? PROP_CHAR_WEIGHT : PROP_CHAR_WEIGHT_COMPLEX;
+ break;
+ case 61: /*sprmCFItalic*/
+ case NS_sprm::LN_CFItalicBi: // sprmCFItalicBi
+ case NS_sprm::LN_CFItalic: /*sprmCFItalic*/
+ ePropertyId = nSprmId == 0x836 ? PROP_CHAR_POSTURE : PROP_CHAR_POSTURE_COMPLEX;
+ break;
+ case NS_sprm::LN_CFStrike: /*sprmCFStrike*/
+ case NS_sprm::LN_CFDStrike : /*sprmCFDStrike double strike through*/
+ ePropertyId = PROP_CHAR_STRIKEOUT;
+ break;
+ case NS_sprm::LN_CFOutline: /*sprmCFOutline*/
+ ePropertyId = PROP_CHAR_CONTOURED;
+ break;
+ case NS_sprm::LN_CFShadow: /*sprmCFShadow*/
+ ePropertyId = PROP_CHAR_SHADOWED;
+ break;
+ case NS_sprm::LN_CFSmallCaps: /*sprmCFSmallCaps*/
+ case NS_sprm::LN_CFCaps: /*sprmCFCaps*/
+ ePropertyId = PROP_CHAR_CASE_MAP;
+ break;
+ case NS_sprm::LN_CFVanish: /*sprmCFVanish*/
+ ePropertyId = PROP_CHAR_HIDDEN;
+ break;
+ case NS_sprm::LN_CFEmboss: /*sprmCFEmboss*/
+ 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;
+ double fDoubleValue;
+ uno::Any aStyleVal = m_pImpl->GetPropertyFromStyleSheet(ePropertyId);
+ if( !aStyleVal.hasValue() )
+ {
+ nIntValue = 0x83a == nSprmId ?
+ 4 : 1;
+ }
+ else if(aStyleVal.getValueTypeClass() == uno::TypeClass_FLOAT )
+ {
+ //only in case of awt::FontWeight
+ aStyleVal >>= fDoubleValue;
+ nIntValue = fDoubleValue > 100. ? 0 : 1;
+ }
+ else if((aStyleVal >>= nStyleValue) ||
+ (nStyleValue = (sal_Int16)comphelper::getEnumAsINT32(aStyleVal)) >= 0 )
+ {
+ nIntValue = 0x83a == nSprmId ?
+ nStyleValue ? 0 : 4 :
+ nStyleValue ? 0 : 1;
+ }
+ else
+ {
+ OSL_ENSURE( false, "what type was it");
+ }
+ }
+
+ switch( nSprmId )
+ {
+ case 60:/*sprmCFBold*/
+ case NS_sprm::LN_CFBold: /*sprmCFBold*/
+ case NS_sprm::LN_CFBoldBi: // sprmCFBoldBi
+ {
+ uno::Any aBold( uno::makeAny( nIntValue ? awt::FontWeight::BOLD : awt::FontWeight::NORMAL ) );
+ rContext->Insert(ePropertyId, true, aBold );
+ if( nSprmId != NS_sprm::LN_CFBoldBi ) // sprmCFBoldBi
+ rContext->Insert(PROP_CHAR_WEIGHT_ASIAN, true, aBold );
+ }
+ break;
+ case 61: /*sprmCFItalic*/
+ case NS_sprm::LN_CFItalic: /*sprmCFItalic*/
+ case NS_sprm::LN_CFItalicBi: // sprmCFItalicBi
+ {
+ uno::Any aPosture( uno::makeAny( nIntValue ? awt::FontSlant_ITALIC : awt::FontSlant_NONE ) );
+ rContext->Insert( ePropertyId, true, aPosture );
+ if( nSprmId != NS_sprm::LN_CFItalicBi ) // sprmCFItalicBi
+ rContext->Insert(PROP_CHAR_POSTURE_ASIAN, true, aPosture );
+ }
+ break;
+ case NS_sprm::LN_CFStrike: /*sprmCFStrike*/
+ rContext->Insert(ePropertyId, true,
+ uno::makeAny( nIntValue ? awt::FontStrikeout::SINGLE : awt::FontStrikeout::NONE ) );
+ break;
+ case NS_sprm::LN_CFDStrike : /*sprmCFDStrike double strike through*/
+ rContext->Insert(ePropertyId, true,
+ uno::makeAny( awt::FontStrikeout::DOUBLE ) );
+ break;
+ case NS_sprm::LN_CFOutline: /*sprmCFOutline*/
+ case NS_sprm::LN_CFShadow: /*sprmCFShadow*/
+ case NS_sprm::LN_CFVanish: /*sprmCFVanish*/
+ rContext->Insert(ePropertyId, true, uno::makeAny( nIntValue ? true : false ));
+ break;
+ case NS_sprm::LN_CFSmallCaps: /*sprmCFSmallCaps*/
+ rContext->Insert(ePropertyId, true,
+ uno::makeAny( nIntValue ? style::CaseMap::SMALLCAPS : style::CaseMap::NONE));
+ break;
+ case NS_sprm::LN_CFCaps: /*sprmCFCaps*/
+ rContext->Insert(ePropertyId, true,
+ uno::makeAny( nIntValue ? style::CaseMap::UPPERCASE : style::CaseMap::NONE));
+ break;
+ case NS_sprm::LN_CFEmboss: /*sprmCFEmboss*/
+ rContext->Insert(ePropertyId, true,
+ uno::makeAny( nIntValue ? awt::FontRelief::EMBOSSED : awt::FontRelief::NONE ));
+ break;
+
+ }
+ }
+ }
+ break;
+ case NS_sprm::LN_CFtcDefault:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFtcDefault
+ case NS_sprm::LN_CKul: // sprmCKul
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ {
+ // Parameter: 0 = none, 1 = single, 2 = by Word,
+ // 3 = double, 4 = dotted, 5 = hidden
+ // 6 = thick, 7 = dash, 8 = dot(not used)
+ // 9 = dotdash 10 = dotdotdash 11 = wave
+ handleUnderlineType(nIntValue, rContext);
+ }
+ break;
+ case NS_sprm::LN_CSizePos:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCSizePos
+ case NS_sprm::LN_CLid:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCLid
+ case NS_sprm::LN_CIco:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ {
+ sal_Int32 nColor = 0;
+ if (getColorFromIndex(nIntValue, nColor))
+ rContext->Insert(PROP_CHAR_COLOR, true, uno::makeAny( nColor ) );
+ }
+ break; // sprmCIco
+ case NS_sprm::LN_CHpsBi: // sprmCHpsBi
+ case NS_sprm::LN_CHps: // sprmCHps
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ {
+ //multiples of half points (12pt == 24)
+ double fVal = double(nIntValue) / 2.;
+ uno::Any aVal = uno::makeAny( fVal );
+ if( NS_sprm::LN_CHpsBi == nSprmId )
+ rContext->Insert( PROP_CHAR_HEIGHT_COMPLEX, true, aVal );
+ else
+ {
+ //Asian get the same value as Western
+ rContext->Insert( PROP_CHAR_HEIGHT, true, aVal );
+ rContext->Insert( PROP_CHAR_HEIGHT_ASIAN, true, aVal );
+ }
+ }
+ break;
+ case NS_sprm::LN_CHpsInc:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCHpsInc
+ case NS_sprm::LN_CHpsPos:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ {
+ // FIXME: ww8 filter in ww8par6.cxx has a Read_SubSuperProp function
+ // that counts the escapement from this value and font size. So it will be
+ // on our TODO list
+ sal_Int16 nEscapement = 0;
+ sal_Int8 nProp = 100;
+ if (nIntValue < 0)
+ nEscapement = -58;
+ else if (nIntValue > 0)
+ nEscapement = 58;
+ else /* (nIntValue == 0) */
+ nProp = 0;
+ rContext->Insert(PROP_CHAR_ESCAPEMENT, true, uno::makeAny( nEscapement ) );
+ rContext->Insert(PROP_CHAR_ESCAPEMENT_HEIGHT, true, uno::makeAny( nProp ) );
+ }
+ break; // sprmCHpsPos
+ case NS_sprm::LN_CHpsPosAdj:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCHpsPosAdj
+ case NS_sprm::LN_CMajority:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCMajority
+ case NS_sprm::LN_CIss: // sprmCIss
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ {
+ //sub/super script 1: super, 2: sub, 0: normal
+ sal_Int16 nEscapement = 0;
+ sal_Int8 nProp = 58;
+ switch(nIntValue)
+ {
+ case 1: //super
+ nEscapement = 101;
+ break;
+ case 2: //sub
+ nEscapement = -101;
+ break;
+ case 0: nProp = 0;break; //none
+ }
+ rContext->Insert(PROP_CHAR_ESCAPEMENT, true, uno::makeAny( nEscapement ) );
+ rContext->Insert(PROP_CHAR_ESCAPEMENT_HEIGHT, true, uno::makeAny( nProp ) );
+ }
+ break;
+ case NS_sprm::LN_CHpsNew50:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCHpsNew50
+ case NS_sprm::LN_CHpsInc1:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCHpsInc1
+ case 71 : //"sprmCDxaSpace"
+ case 96 : //"sprmCDxaSpace"
+ case NS_sprm::LN_CDxaSpace: // sprmCDxaSpace
+ /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
+ //Kerning half point values
+ //TODO: there are two kerning values -
+ // in ww8par6.cxx NS_sprm::LN_CHpsKern is used as boolean AutoKerning
+ rContext->Insert(PROP_CHAR_CHAR_KERNING, true, uno::makeAny( sal_Int16(ConversionHelper::convertTwipToMM100(sal_Int16(nIntValue))) ) );
+ break;
+ case NS_sprm::LN_CHpsKern: // sprmCHpsKern auto kerning is bound to a minimum font size in Word - but not in Writer :-(
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ rContext->Insert(PROP_CHAR_AUTO_KERNING, true, uno::makeAny( true ) );
+ break;
+ case NS_sprm::LN_CMajority50:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCMajority50
+ case NS_sprm::LN_CHpsMul:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCHpsMul
+ case NS_sprm::LN_CYsri:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCYsri
+ case NS_sprm::LN_CRgFtc0: // sprmCRgFtc0 //ascii font index
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ case NS_sprm::LN_CRgFtc1: // sprmCRgFtc1 //Asian font index
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ case NS_sprm::LN_CRgFtc2: // sprmCRgFtc2 //CTL font index
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ case NS_sprm::LN_CFtcBi: // sprmCFtcBi //font index of a CTL font
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ {
+ FontTablePtr pFontTable = m_pImpl->GetFontTable();
+ if(nIntValue >= 0 && pFontTable->size() > sal_uInt32(nIntValue))
+ {
+ PropertyIds eFontName = PROP_CHAR_FONT_NAME;
+ PropertyIds eFontStyle = PROP_CHAR_FONT_STYLE;
+ PropertyIds eFontFamily = PROP_CHAR_FONT_FAMILY;
+ PropertyIds eFontCharSet = PROP_CHAR_FONT_CHAR_SET;
+ PropertyIds eFontPitch = PROP_CHAR_FONT_PITCH;
+ switch(nSprmId)
+ {
+ case NS_sprm::LN_CRgFtc0:
+ //already initialized
+ break;
+ case NS_sprm::LN_CRgFtc1:
+ eFontName = PROP_CHAR_FONT_NAME_ASIAN;
+ eFontStyle = PROP_CHAR_FONT_STYLE_ASIAN;
+ eFontFamily = PROP_CHAR_FONT_FAMILY_ASIAN;
+ eFontCharSet = PROP_CHAR_FONT_CHAR_SET_ASIAN;
+ eFontPitch = PROP_CHAR_FONT_PITCH_ASIAN;
+ break;
+ case NS_sprm::LN_CRgFtc2:
+ case NS_sprm::LN_CFtcBi:
+ eFontName = PROP_CHAR_FONT_NAME_COMPLEX;
+ eFontStyle = PROP_CHAR_FONT_STYLE_COMPLEX;
+ eFontFamily = PROP_CHAR_FONT_FAMILY_COMPLEX;
+ eFontCharSet = PROP_CHAR_FONT_CHAR_SET_COMPLEX;
+ eFontPitch = PROP_CHAR_FONT_PITCH_COMPLEX;
+ break;
+ }
+ const FontEntry* pFontEntry = pFontTable->getFontEntry(sal_uInt32(nIntValue));
+ rContext->Insert(eFontName, true, uno::makeAny( pFontEntry->sFontName ));
+ // rContext->Insert(eFontStyle, uno::makeAny( pFontEntry-> ));
+ // rContext->Insert(eFontFamily, uno::makeAny( pFontEntry-> ));
+ rContext->Insert(eFontCharSet, true, uno::makeAny( (sal_Int16)pFontEntry->nTextEncoding ));
+ rContext->Insert(eFontPitch, true, uno::makeAny( pFontEntry->nPitchRequest ));
+ }
+ }
+ break;
+ case NS_sprm::LN_CCharScale: // sprmCCharScale
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ rContext->Insert(PROP_CHAR_SCALE_WIDTH, true,
+ uno::makeAny( sal_Int16(nIntValue) ));
+ break;
+ case NS_sprm::LN_CFImprint: // sprmCFImprint 1 or 0
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ // FontRelief: NONE, EMBOSSED, ENGRAVED
+ rContext->Insert(PROP_CHAR_RELIEF, true,
+ uno::makeAny( nIntValue ? awt::FontRelief::ENGRAVED : awt::FontRelief::NONE ));
+ break;
+ case NS_sprm::LN_CFObj:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFObj
+ case NS_sprm::LN_CPropRMark:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCPropRMark
+ case NS_sprm::LN_CSfxText:
+ // The file-format has many character animations. We have only
+ // one, so we use it always. Suboptimal solution though.
+ if (nIntValue)
+ rContext->Insert(PROP_CHAR_FLASH, true, uno::makeAny( true ));
+ else
+ rContext->Insert(PROP_CHAR_FLASH, true, uno::makeAny( false ));
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCSfxText
+ case NS_sprm::LN_CFBiDi:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFBiDi
+ case NS_sprm::LN_CFDiacColor:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFDiacColor
+ case NS_sprm::LN_CIcoBi:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCIcoBi
+ case NS_sprm::LN_CDispFldRMark:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCDispFldRMark
+ case NS_sprm::LN_CIbstRMarkDel:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCIbstRMarkDel
+ case NS_sprm::LN_CDttmRMarkDel:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCDttmRMarkDel
+ case NS_sprm::LN_CBrc:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCBrc
+ case NS_sprm::LN_CShd:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCShd
+ case NS_sprm::LN_CIdslRMarkDel:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCIdslRMarkDel
+ case NS_sprm::LN_CFUsePgsuSettings:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFUsePgsuSettings
+ case NS_sprm::LN_CCpg:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCCpg
+ case NS_sprm::LN_CLidBi: // sprmCLidBi language complex
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ case 0x4873: //sprmCRgLid
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 1 */
+ //undocumented but interpreted as western language
+ case NS_sprm::LN_CRgLid0: // sprmCRgLid0 language Western
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ case NS_sprm::LN_CRgLid1: // sprmCRgLid1 language Asian
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ {
+ lang::Locale aLocale;
+ MsLangId::convertLanguageToLocale( (LanguageType)nIntValue, aLocale );
+ rContext->Insert(NS_sprm::LN_CRgLid0 == nSprmId ? PROP_CHAR_LOCALE :
+ NS_sprm::LN_CRgLid1 == nSprmId ? PROP_CHAR_LOCALE_ASIAN : PROP_CHAR_LOCALE_COMPLEX,
+ true,
+ uno::makeAny( aLocale ) );
+ }
+ break;
+
+ case NS_sprm::LN_CIdctHint: // sprmCIdctHint
+ //list table - text offset???
+ break;
+ case NS_sprm::LN_PicBrcl:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPicBrcl
+ case NS_sprm::LN_PicScale:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPicScale
+ case NS_sprm::LN_PicBrcTop:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPicBrcTop
+ case NS_sprm::LN_PicBrcLeft:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPicBrcLeft
+ case NS_sprm::LN_PicBrcBottom:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPicBrcBoConversionHelper::convertTwipToMM100ttom
+ case NS_sprm::LN_PicBrcRight:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPicBrcRight
+ case NS_sprm::LN_ScnsPgn:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmScnsPgn
+ case NS_sprm::LN_SiHeadingPgn:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetEvenlySpaced( nIntValue > 0 );
+
+ break; // sprmSiHeadingPgn
+ case NS_sprm::LN_SOlstAnm:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmSOlstAnm
+ case 136:
+ case NS_sprm::LN_SDxaColWidth: // sprmSDxaColWidth
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ // contains the twip width of the column as 3-byte-code
+ // the lowet byte contains the index
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->AppendColumnWidth( ConversionHelper::convertTwipToMM100( (nIntValue & 0xffff00) >> 8 ));
+ break;
+ case NS_sprm::LN_SDxaColSpacing: // sprmSDxaColSpacing
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ // the lowet byte contains the index
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->AppendColumnSpacing( ConversionHelper::convertTwipToMM100( (nIntValue & 0xffff00) >> 8 ));
+ break;
+ case 138:
+ case NS_sprm::LN_SFEvenlySpaced:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetEvenlySpaced( nIntValue > 0 );
+ break; // sprmSFEvenlySpaced
+ case NS_sprm::LN_SFProtected: // sprmSFProtected
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ //todo: missing feature - unlocked sections in protected documents
+ break;
+ case NS_sprm::LN_SDmBinFirst: // sprmSDmBinFirst
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetFirstPaperBin(nIntValue);
+ break;
+ case NS_sprm::LN_SDmBinOther: // sprmSDmBinOther
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetPaperBin( nIntValue );
+ break;
+ case NS_sprm::LN_SBkc: // sprmSBkc
+ /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
+ /* break type
+ 0 - No break
+ 1 - New Colunn
+ 2 - New page
+ 3 - Even page
+ 4 - odd page
+ */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetBreakType( nIntValue );
+ break;
+ case 143:
+ case NS_sprm::LN_SFTitlePage: // sprmSFTitlePage
+ case NS_ooxml::LN_EG_SectPrContents_titlePg:
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetTitlePage( nIntValue > 0 ? true : false );//section has title page
+ }
+ break;
+ case 144:
+ case NS_sprm::LN_SCcolumns: // sprmSCcolumns
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ //no of columns - 1
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetColumnCount( (sal_Int16) nIntValue );
+ break;
+ case 145:
+ case NS_sprm::LN_SDxaColumns: // sprmSDxaColumns
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ //column distance - default 708 twip
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetColumnDistance( ConversionHelper::convertTwipToMM100( nIntValue ) );
+ break;
+ case NS_sprm::LN_SFAutoPgn:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmSFAutoPgn
+ case 147:
+ case NS_sprm::LN_SNfcPgn: // sprmSNfcPgn
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ //page numbering 0 - Arab, 1 - ROMAN, 2 - roman, 3 - ABC, 4 abc
+ sal_Int16 nNumbering;
+ switch( nIntValue )
+ {
+ case 1: nNumbering = style::NumberingType::ROMAN_UPPER;
+ case 2: nNumbering = style::NumberingType::ROMAN_LOWER;
+ case 3: nNumbering = style::NumberingType::CHARS_UPPER_LETTER;
+ case 4: nNumbering = style::NumberingType::CHARS_LOWER_LETTER;
+ case 0:
+ default:
+ nNumbering = style::NumberingType::ARABIC;
+ }
+ rContext->Insert( PROP_NUMBERING_TYPE, false, uno::makeAny( nNumbering ) );
+ break;
+ case NS_sprm::LN_SDyaPgn:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmSDyaPgn
+ case NS_sprm::LN_SDxaPgn:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmSDxaPgn
+ case 150:
+ case NS_sprm::LN_SFPgnRestart: // sprmSFPgnRestart
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetPageNoRestart( nIntValue > 0 );
+ }
+ break;
+ case NS_sprm::LN_SFEndnote:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmSFEndnote
+ case 154:
+ case NS_sprm::LN_SNLnnMod:// sprmSNLnnMod
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if( pSectionContext )
+ pSectionContext->SetLnnMod( nIntValue );
+ break;
+ case 155:
+ case NS_sprm::LN_SDxaLnn: // sprmSDxaLnn
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if( pSectionContext )
+ pSectionContext->SetdxaLnn( nIntValue );
+ break;
+ case 152:
+ case NS_sprm::LN_SLnc:// sprmSLnc
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if( pSectionContext )
+ pSectionContext->SetLnc( nIntValue );
+ break;
+ case 160:
+ case NS_sprm::LN_SLnnMin: // sprmSLnnMin
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if( pSectionContext )
+ pSectionContext->SetLnnMin( nIntValue );
+ break;
+
+ case NS_sprm::LN_SGprfIhdt:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ //flags about header/footer sharing and footnotes?
+ /* ww8scan.hxx:
+ * WW8_HEADER_EVEN = 0x01, WW8_HEADER_ODD = 0x02, WW8_FOOTER_EVEN = 0x04,
+ * WW8_FOOTER_ODD = 0x08, WW8_HEADER_FIRST = 0x10, WW8_FOOTER_FIRST = 0x20
+ */
+
+// if(pSectionContext)
+ break; // sprmSGprfIhdt
+ case NS_sprm::LN_SDyaHdrTop: // sprmSDyaHdrTop
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ // default 720 twip
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetHeaderTop( ConversionHelper::convertTwipToMM100( nIntValue ));
+ break;
+ case NS_sprm::LN_SDyaHdrBottom: // sprmSDyaHdrBottom
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ // default 720 twip
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetHeaderBottom( ConversionHelper::convertTwipToMM100( nIntValue ) );
+ break;
+ case 158:
+ case NS_sprm::LN_SLBetween: // sprmSLBetween
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetSeparatorLine( nIntValue > 0 );
+ break;
+ case NS_sprm::LN_SVjc:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break; // sprmSVjc
+ case 161:
+ case NS_sprm::LN_SPgnStart: // sprmSPgnStart
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //page number
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetPageNumber( nIntValue );
+ break;
+ case 162:
+ case NS_sprm::LN_SBOrientation:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //todo: the old filter assumed that a value of 2 points to double-pages layout
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetLandscape( nIntValue > 0 );
+ rContext->Insert( PROP_IS_LANDSCAPE , false, uno::makeAny( nIntValue > 0 ));
+ break; // sprmSBOrientation
+ case NS_sprm::LN_SBCustomize:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break; // sprmSBCustomize
+ case 165:
+ case NS_sprm::LN_SYaPage: // sprmSYaPage
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //page height, rounded to default values, default: 0x3dc0 twip
+ sal_Int32 nHeight = ConversionHelper::convertTwipToMM100( nIntValue );
+ rContext->Insert( PROP_HEIGHT, false, uno::makeAny( PaperInfo::sloppyFitPageDimension( nHeight ) ) );
+ }
+ break;
+ case NS_sprm::LN_SXaPage: // sprmSXaPage
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //page width, rounded to default values, default 0x2fd0 twip
+ sal_Int32 nWidth = ConversionHelper::convertTwipToMM100( nIntValue );
+ rContext->Insert( PROP_WIDTH, false, uno::makeAny( PaperInfo::sloppyFitPageDimension( nWidth ) ) );
+ }
+ break;
+ case 166:
+ case NS_sprm::LN_SDxaLeft: // sprmSDxaLeft
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //left page margin default 0x708 twip
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( nIntValue );
+ if(pSectionContext)
+ pSectionContext->SetLeftMargin( nConverted );
+ rContext->Insert( PROP_LEFT_MARGIN, false, uno::makeAny( nConverted ));
+ }
+ break;
+ case 167:
+ case NS_sprm::LN_SDxaRight: // sprmSDxaRight
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //right page margin default 0x708 twip
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( nIntValue );
+ if(pSectionContext)
+ pSectionContext->SetRightMargin( nConverted );
+ rContext->Insert( PROP_RIGHT_MARGIN, false, uno::makeAny( nConverted ));
+ }
+ break;
+ case 168:
+ case NS_sprm::LN_SDyaTop: // sprmSDyaTop
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //top page margin default 1440 twip
+ //todo: check cast of SVBT16
+ sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( static_cast< sal_Int16 >( nIntValue ) );
+ rContext->Insert( PROP_TOP_MARGIN, false, uno::makeAny( nConverted ) );
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetTopMargin( nConverted );
+ }
+ break;
+ case 169:
+ case NS_sprm::LN_SDyaBottom: // sprmSDyaBottom
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //bottom page margin default 1440 twip
+ //todo: check cast of SVBT16
+ sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( static_cast< sal_Int16 >( nIntValue ) );
+ rContext->Insert( PROP_BOTTOM_MARGIN, false, uno::makeAny( nConverted) );
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetBottomMargin( nConverted );
+ }
+ break;
+ case 170:
+ case NS_sprm::LN_SDzaGutter: // sprmSDzaGutter
+ {
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ // gutter is added to one of the margins of a section depending on RTL, can be placed on top either
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ {
+ pSectionContext->SetDzaGutter( ConversionHelper::convertTwipToMM100( nIntValue ) );
+ }
+ }
+ break;
+ case NS_sprm::LN_SDmPaperReq: // sprmSDmPaperReq
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ //paper code - no handled in old filter
+ break;
+ case NS_sprm::LN_SPropRMark:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmSPropRMark
+ case NS_sprm::LN_SFBiDi:// sprmSFBiDi
+ {
+ /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetSFBiDi( nIntValue > 0 );
+ }
+ break;
+ case NS_sprm::LN_SFFacingCol:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmSFFacingCol
+ case NS_sprm::LN_SFRTLGutter: // sprmSFRTLGutter
+ {
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetGutterRTL( nIntValue > 0 );
+ }
+ break;
+ case NS_sprm::LN_SBrcTop: // sprmSBrcTop
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_sprm::LN_SBrcLeft: // sprmSBrcLeft
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_sprm::LN_SBrcBottom: // sprmSBrcBottom
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_sprm::LN_SBrcRight: // sprmSBrcRight
+ /* WRITERFILTERSTATUS: Sectiondone: 100, planned: 0.5, spent: 0 */
+ {
+ table::BorderLine aBorderLine;
+ sal_Int32 nLineDistance = ConversionHelper::MakeBorderLine( nIntValue, aBorderLine );
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ {
+ static const BorderPosition aPositions[4] =
+ {
+ BORDER_TOP,
+ BORDER_LEFT,
+ BORDER_BOTTOM,
+ BORDER_RIGHT
+ };
+ pSectionContext->SetBorder( aPositions[nSprmId - NS_sprm::LN_SBrcTop], nLineDistance, aBorderLine );
+ }
+ }
+ break;
+
+ case NS_sprm::LN_SPgbProp: // sprmSPgbProp
+ {
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ {
+ pSectionContext->ApplyBorderToPageStyles( m_pImpl->GetPageStyles(), m_pImpl->GetTextFactory(), nIntValue );
+ }
+ }
+ break;
+ case NS_sprm::LN_SDxtCharSpace:
+ {
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ {
+ pSectionContext->SetDxtCharSpace( nIntValue );
+ }
+ }
+ break; // sprmSDxtCharSpace
+ case NS_sprm::LN_SDyaLinePitch: // sprmSDyaLinePitch
+ {
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ //see SwWW8ImplReader::SetDocumentGrid
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ {
+ pSectionContext->SetGridLinePitch( ConversionHelper::convertTwipToMM100( nIntValue ) );
+ }
+ }
+ break;
+ case 0x703a: //undocumented, grid related?
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ OSL_ENSURE( false, "TODO: not handled yet"); //nIntValue like 0x008a2373 ?
+ break;
+ case NS_sprm::LN_SClm:
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ sal_Int16 nGridType = text::TextGridMode::NONE;
+ switch( nIntValue )
+ {
+ case 0:
+ nGridType = text::TextGridMode::NONE;
+ break;
+ case 3:
+ //Text snaps to char grid, this doesn't make a lot of sense to
+ //me. This is closer than LINES_CHARS
+ nGridType = text::TextGridMode::LINES;
+ break;
+ case 1:
+ nGridType = text::TextGridMode::LINES_AND_CHARS;
+ break;
+ case 2:
+ nGridType = text::TextGridMode::LINES;
+ break;
+ default:;
+ }
+ rContext->Insert( PROP_GRID_MODE, false, uno::makeAny( nGridType ) );
+
+ //Seems to force this behaviour in word ?
+ if(nGridType != text::TextGridMode::NONE)
+ m_pImpl->SetDocumentSettingsProperty(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_ADD_EXTERNAL_LEADING ),
+ uno::makeAny( true ) );
+ }
+ break; // sprmSClm
+ case NS_sprm::LN_STextFlow:
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ /* 0 HoriLR 1 Vert TR 2 Vert TR 3 Vert TT 4 HoriLT
+ only 0 and 1 can be imported correctly
+ */
+ sal_Int16 nDirection = text::WritingMode_LR_TB;
+ switch( nIntValue )
+ {
+ case 0:
+ case 4:
+ nDirection = text::WritingMode_LR_TB;
+ break;
+ case 1:
+ case 2:
+ case 3:
+ nDirection = text::WritingMode_TB_RL;
+ break;
+ default:;
+ }
+ rContext->Insert(PROP_WRITING_MODE, false, uno::makeAny( nDirection ) );
+ }
+ break; // sprmSTextFlow
+ case NS_sprm::LN_TJc: // sprmTJc
+ case NS_sprm::LN_TDxaLeft:
+ case NS_sprm::LN_TDxaGapHalf:
+ case NS_sprm::LN_TFCantSplit:
+ case NS_sprm::LN_TTableHeader:
+ case NS_sprm::LN_TTableBorders: // sprmTTableBorders
+ {
+ OSL_ENSURE( false, "table propeties should be handled by the table manager");
+ }
+ break;
+ case NS_sprm::LN_TDefTable10:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTDefTable10
+ case NS_sprm::LN_TDyaRowHeight:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTDyaRowHeight
+ case NS_sprm::LN_TDefTable:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTDefTable
+ case NS_sprm::LN_TDefTableShd:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTDefTableShd
+ case NS_sprm::LN_TTlp:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTTlp
+ case NS_sprm::LN_TFBiDi:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTFBiDi
+ case NS_sprm::LN_THTMLProps:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTHTMLProps
+ case NS_sprm::LN_TSetBrc:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTSetBrc
+ case NS_sprm::LN_TInsert:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTInsert
+ case NS_sprm::LN_TDelete:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTDelete
+ case NS_sprm::LN_TDxaCol:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTDxaCol
+ case NS_sprm::LN_TMerge:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTMerge
+ case NS_sprm::LN_TSplit:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTSplit
+ case NS_sprm::LN_TSetBrc10:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTSetBrc10
+ case 164: // sprmTSetShd
+ case NS_sprm::LN_TSetShd:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTSetShd
+ case NS_sprm::LN_TSetShdOdd:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTSetShdOdd
+ case NS_sprm::LN_TTextFlow:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTTextFlow
+ case NS_sprm::LN_TDiagLine:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTDiagLine
+ case NS_sprm::LN_TVertMerge:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTVertMerge
+ case NS_sprm::LN_TVertAlign:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTVertAlign
+ // the following are not part of the official documentation
+ case 0x6870: //TxtForeColor
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ //contains a color as 0xTTRRGGBB while SO uses 0xTTRRGGBB
+ sal_Int32 nColor = ConversionHelper::ConvertColor(nIntValue);
+ rContext->Insert(PROP_CHAR_COLOR, true, uno::makeAny( nColor ) );
+ }
+ break;
+ case 0x4874:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; //seems to be a language id for Asian text - undocumented
+ case 0x6877: //underlining color
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ sal_Int32 nColor = ConversionHelper::ConvertColor(nIntValue);
+ rContext->Insert(PROP_CHAR_UNDERLINE_HAS_COLOR, true, uno::makeAny( true ) );
+ rContext->Insert(PROP_CHAR_UNDERLINE_COLOR, true, uno::makeAny( nColor ) );
+ }
+ break;
+ case 0x6815:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; //undocumented
+ case NS_sprm::LN_CIndrsid:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; //undocumented
+ case 0x6467:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; //undocumented
+ case 0xF617:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; //undocumented
+ case 0xd634: // sprmTNewSpacing - table spacing ( see WW8TabBandDesc::ProcessSpacing() )
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break;
+ case NS_sprm::LN_TTRLeft:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; //undocumented
+ case 0x4888:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case 0x6887:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ //properties of list levels - undocumented
+ break;
+ case 0xd234:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case 0xd235:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case 0xd236:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case 0xd237:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;//undocumented section properties
+ case NS_sprm::LN_CEastAsianLayout:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ resolveSprmProps(rSprm);
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_Tabs_tab:
+ resolveSprmProps(rSprm);
+ m_pImpl->IncorporateTabStop(m_pImpl->m_aCurrentTabStop);
+ m_pImpl->m_aCurrentTabStop = DeletableTabStop();
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_PPrBase_tabs:
+ {
+ // Initialize tab stop vector from style sheet
+ if( !m_pImpl->IsStyleSheetImport() )
+ {
+ uno::Any aValue = m_pImpl->GetPropertyFromStyleSheet(PROP_PARA_TAB_STOPS);
+ uno::Sequence< style::TabStop > aStyleTabStops;
+ if(aValue >>= aStyleTabStops)
+ {
+ m_pImpl->InitTabStopFromStyle( aStyleTabStops );
+ }
+ }
+ resolveSprmProps(rSprm);
+ rContext->Insert(PROP_PARA_TAB_STOPS, true, uno::makeAny( m_pImpl->GetCurrentTabStopAndClear()));
+ }
+ break;
+
+ case NS_ooxml::LN_CT_PPr_sectPr:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_EG_RPrBase_color:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_EG_RPrBase_rFonts:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_EG_RPrBase_bdr:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_EG_RPrBase_eastAsianLayout:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_EG_RPrBase_u:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_EG_RPrBase_lang:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_PPrBase_spacing:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_PPrBase_ind:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_RPrDefault_rPr:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_PPrDefault_pPr:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_DocDefaults_pPrDefault:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_DocDefaults_rPrDefault:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_Style_pPr:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_Style_rPr:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_PPr_rPr:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_PPrBase_numPr:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ resolveSprmProps(rSprm);
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_EG_SectPrContents_footnotePr:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_EG_SectPrContents_endnotePr:
+ m_pImpl->SetInFootnoteProperties( NS_ooxml::LN_EG_SectPrContents_footnotePr == nSprmId );
+ resolveSprmProps(rSprm);
+ break;
+ case NS_ooxml::LN_EG_SectPrContents_lnNumType:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ {
+ resolveSprmProps(rSprm);
+ LineNumberSettings aSettings = m_pImpl->GetLineNumberSettings();
+ aSettings.bIsOn = true;
+ 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();
+ PropertyNameSupplier& rNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_IS_ON ), uno::makeAny(true) );
+ if( aSettings.nInterval )
+ xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_INTERVAL ), uno::makeAny((sal_Int16)aSettings.nInterval) );
+ if( aSettings.nDistance )
+ xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_DISTANCE ), uno::makeAny(aSettings.nDistance) );
+ xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_RESTART_AT_EACH_PAGE ), uno::makeAny(aSettings.bRestartAtEachPage) );
+ }
+ catch( const uno::Exception& )
+ {
+ }
+
+ }
+ break;
+ case NS_ooxml::LN_CT_PPrBase_framePr:
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH);
+ if( pContext.get() )
+ {
+ ParagraphPropertyMap* pParaContext = dynamic_cast< ParagraphPropertyMap* >( pContext.get() );
+ pParaContext->SetFrameMode();
+
+ }
+ else
+ {
+ //TODO: What about style sheet import of frame properties
+ }
+ resolveSprmProps(rSprm);
+ }
+ break;
+ case NS_ooxml::LN_EG_SectPrContents_pgSz:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ CT_PageSz.code = 0;
+ {
+ PaperInfo aLetter(PAPER_LETTER);
+ CT_PageSz.w = aLetter.getWidth();
+ CT_PageSz.h = aLetter.getHeight();
+ }
+ CT_PageSz.orient = false;
+ resolveSprmProps(rSprm);
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ {
+ pSectionContext->Insert( PROP_HEIGHT, false, uno::makeAny( CT_PageSz.h ) );
+ pSectionContext->Insert( PROP_IS_LANDSCAPE, false, uno::makeAny( CT_PageSz.orient ));
+ pSectionContext->Insert( PROP_WIDTH, false, uno::makeAny( CT_PageSz.w ) );
+ pSectionContext->SetLandscape( CT_PageSz.orient );
+ }
+ break;
+
+ case NS_ooxml::LN_EG_SectPrContents_pgMar:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->InitPageMargins();
+ resolveSprmProps(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:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+
+ SectionColumnHandlerPtr pSectHdl( new SectionColumnHandler );
+ pProperties->resolve(*pSectHdl);
+ if(pSectionContext)
+ {
+ if( pSectHdl->IsEqualWidth() )
+ {
+ pSectionContext->SetEvenlySpaced( true );
+ pSectionContext->SetColumnCount( (sal_Int16) (pSectHdl->GetNum() - 1) );
+ pSectionContext->SetColumnDistance( pSectHdl->GetSpace() );
+ pSectionContext->SetSeparatorLine( pSectHdl->IsSeparator() );
+ }
+ else if( !pSectHdl->GetColumns().empty() )
+ {
+ pSectionContext->SetEvenlySpaced( false );
+ pSectionContext->SetColumnDistance( pSectHdl->GetSpace() );
+ pSectionContext->SetColumnCount( (sal_Int16)(pSectHdl->GetColumns().size() -1));
+ 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( pSectHdl->GetNum() > 0 )
+ {
+ pSectionContext->SetColumnCount( (sal_Int16)pSectHdl->GetNum() - 1 );
+ pSectionContext->SetColumnDistance( pSectHdl->GetSpace() );
+ }
+ }
+ }
+ }
+ break;
+ case NS_ooxml::LN_EG_SectPrContents_pgBorders:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get( ) && pSectionContext )
+ {
+ PageBordersHandlerPtr pHandler( new PageBordersHandler );
+ pProperties->resolve( *pHandler );
+
+ // Set the borders to the context and apply them to the styles
+ pHandler->SetBorders( pSectionContext );
+ pSectionContext->SetBorderParams( pHandler->GetDisplayOffset( ) );
+ }
+ }
+ break;
+
+ case NS_ooxml::LN_CT_PPrBase_pStyle:
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetCurrentParaStyleId( sStringValue );
+ StyleSheetTablePtr pStyleTable = m_pImpl->GetStyleSheetTable();
+ const ::rtl::OUString sConvertedStyleName = pStyleTable->ConvertStyleName( sStringValue, true );
+ if (m_pImpl->GetTopContext() && m_pImpl->GetTopContextType() != CONTEXT_SECTION)
+ m_pImpl->GetTopContext()->Insert( PROP_PARA_STYLE_NAME, true, uno::makeAny( sConvertedStyleName ));
+ const StyleSheetEntryPtr pEntry = pStyleTable->FindStyleSheetByISTD(sStringValue);
+ //apply numbering to paragraph if it was set at the style
+ OSL_ENSURE( pEntry.get(), "no style sheet found" );
+ const StyleSheetPropertyMap* pStyleSheetProperties = dynamic_cast<const StyleSheetPropertyMap*>(pEntry ? pEntry->pProperties.get() : 0);
+
+ if( pStyleSheetProperties && pStyleSheetProperties->GetListId() >= 0 )
+ rContext->Insert( PROP_NUMBERING_STYLE_NAME, true, uno::makeAny(
+ m_pImpl->GetListTable( )->GetStyleName( pStyleSheetProperties->GetListId( ) ) ), false);
+
+ if( pStyleSheetProperties && pStyleSheetProperties->GetListLevel() >= 0 )
+ rContext->Insert( PROP_NUMBERING_LEVEL, true, uno::makeAny(pStyleSheetProperties->GetListLevel()), false);
+ }
+ break;
+ case NS_ooxml::LN_EG_RPrBase_rStyle:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ rtl::OUString sConvertedName( m_pImpl->GetStyleSheetTable()->ConvertStyleName( sStringValue, true ) );
+ // First check if the style exists in the document.
+ StyleSheetEntryPtr pEntry = m_pImpl->GetStyleSheetTable( )->FindStyleSheetByStyleName( sConvertedName );
+ bool bExists = pEntry.get( ) && ( pEntry->nStyleTypeCode == STYLE_TYPE_CHAR );
+
+ // Add the property if the style exists
+ if ( bExists && m_pImpl->GetTopContext() )
+ m_pImpl->GetTopContext()->Insert( PROP_CHAR_STYLE_NAME, true, uno::makeAny( sConvertedName ) );
+ }
+ break;
+ case NS_ooxml::LN_CT_TblPrBase_tblCellMar: //cell margins
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ resolveSprmProps(rSprm);//contains LN_CT_TblCellMar_top, LN_CT_TblCellMar_left, LN_CT_TblCellMar_bottom, LN_CT_TblCellMar_right
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblCellMar_top:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblCellMar_left:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblCellMar_bottom:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblCellMar_right:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ MeasureHandlerPtr pMeasureHandler( new MeasureHandler );
+ pProperties->resolve(*pMeasureHandler);
+ sal_Int32 nMeasureValue = pMeasureHandler->getMeasureValue();
+ PropertyIds eId = META_PROP_CELL_MAR_TOP;
+ switch(nSprmId)
+ {
+ case NS_ooxml::LN_CT_TblCellMar_top:
+ 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_right:
+ eId = META_PROP_CELL_MAR_RIGHT;
+ break;
+ default:;
+ }
+ rContext->Insert( eId, false, uno::makeAny(nMeasureValue), false);
+ }
+ }
+ break;
+ case NS_sprm::LN_CFNoProof: //0x875 no grammar and spell checking, unsupported
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_ooxml::LN_anchor_anchor: // at_character drawing
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_inline_inline: // as_character drawing
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ 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:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ sal_Int16 nEscapement = 0;
+ sal_Int8 nProp = 58;
+ if( sStringValue.equalsAscii( "superscript" ))
+ nEscapement = 101;
+ else if( sStringValue.equalsAscii( "subscript" ))
+ nEscapement = -101;
+ else
+ nProp = 100;
+
+ rContext->Insert(PROP_CHAR_ESCAPEMENT, true, uno::makeAny( nEscapement ) );
+ rContext->Insert(PROP_CHAR_ESCAPEMENT_HEIGHT, true, uno::makeAny( nProp ) );
+ }
+ break;
+// case NS_ooxml::LN_CT_FtnEdn_type
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+// case NS_ooxml::LN_CT_FtnEdn_id
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+// case NS_ooxml::LN_EG_FtnEdnNumProps_numRestart
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ 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;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_EG_FtnEdnNumProps_numStart:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_FtnProps_numFmt:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_EdnProps_numFmt:
+ {
+ try
+ {
+ uno::Reference< beans::XPropertySet > xFtnEdnSettings;
+ if( m_pImpl->IsInFootnoteProperties() )
+ {
+ uno::Reference< text::XFootnotesSupplier> xFootnotesSupplier( m_pImpl->GetTextDocument(), uno::UNO_QUERY );
+ xFtnEdnSettings = xFootnotesSupplier->getFootnoteSettings();
+ }
+ else
+ {
+ uno::Reference< text::XEndnotesSupplier> xEndnotesSupplier( m_pImpl->GetTextDocument(), uno::UNO_QUERY );
+ xFtnEdnSettings = xEndnotesSupplier->getEndnoteSettings();
+ }
+ if( NS_ooxml::LN_EG_FtnEdnNumProps_numStart == nSprmId )
+ {
+ xFtnEdnSettings->setPropertyValue(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_START_AT),
+ uno::makeAny( sal_Int16( nIntValue - 1 )));
+ }
+ else
+ {
+ sal_Int16 nNumType = ConversionHelper::ConvertNumberingType( nIntValue );
+ xFtnEdnSettings->setPropertyValue(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_NUMBERING_TYPE),
+ uno::makeAny( nNumType ));
+ }
+ }
+ catch( const uno::Exception& )
+ {
+ }
+ }
+ break;
+ case NS_ooxml::LN_paratrackchange:
+ m_pImpl->StartParaChange( );
+ case NS_ooxml::LN_trackchange:
+ /* WRITERFILTERSTATUS: done: 100, planned: 5, spent: 0 */
+ case NS_ooxml::LN_EG_RPrContent_rPrChange:
+ /* WRITERFILTERSTATUS: done: 100, planned: 5, spent: 0 */
+ {
+ m_pImpl->AddNewRedline( );
+ resolveSprmProps( rSprm );
+ // now the properties author, date and id should be available
+ sal_Int32 nToken = m_pImpl->GetCurrentRedlineToken();
+ switch( nToken & 0xffff )
+ {
+ case ooxml::OOXML_mod :
+ case ooxml::OOXML_ins :
+ case ooxml::OOXML_del : break;
+ default: OSL_ENSURE( false, "redline token other than mod, ins or del" );
+ }
+ m_pImpl->EndParaChange( );
+ }
+ break;
+ case NS_ooxml::LN_CT_RPrChange_rPr:
+ /* WRITERFILTERSTATUS: done: 100, planned: 5, spent: 0 */
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 4, spent: 0 */
+ case NS_ooxml::LN_object:
+ {
+#if DEBUG
+ clog << "DomainMapper: LN_object" << endl;
+#endif
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get( ) )
+ {
+ OLEHandlerPtr pOLEHandler( new OLEHandler );
+ pProperties->resolve(*pOLEHandler);
+ if ( pOLEHandler->isOLEObject( ) )
+ {
+ ::rtl::OUString sStreamName = pOLEHandler->copyOLEOStream( m_pImpl->GetTextDocument() );
+ if( sStreamName.getLength() )
+ {
+ m_pImpl->appendOLE( sStreamName, pOLEHandler );
+ }
+ }
+ }
+ }
+ break;
+// case NS_ooxml::LN_CT_EdnProps_pos
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+// case NS_ooxml::LN_CT_EdnProps_numFmt
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+// case NS_ooxml::LN_CT_FtnDocProps_footnote
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+// case NS_ooxml::LN_CT_EdnDocProps_endnote
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ //break;
+ case NS_ooxml::LN_EG_HdrFtrReferences_headerReference: // header reference - not needed
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_EG_HdrFtrReferences_footerReference: // footer reference - not needed
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ break;
+ case NS_ooxml::LN_EG_RPrBase_snapToGrid: // "Use document grid settings for inter-paragraph spacing"
+ break;
+ case NS_sprm::LN_PContextualSpacing:
+ //TODO: determines whether top/bottom paragraph spacing is added if equal styles are following - unsupported
+ break;
+ case NS_ooxml::LN_EG_SectPrContents_formProt: //section protection, only form editing is enabled - unsupported
+ break;
+ case NS_ooxml::LN_CT_Lvl_pStyle:
+ //TODO: numbering style should apply current numbering level - not yet supported
+ break;
+ default:
+ {
+#if OSL_DEBUG_LEVEL > 0
+ ::rtl::OString sMessage( "DomainMapper::sprm() - Id: ");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nSprmId ), 10 );
+ sMessage += ::rtl::OString(" / 0x");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nSprmId ), 16 );
+ OSL_ENSURE( false, sMessage.getStr()); //
+#endif
+ }
+ }
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("sprm");
+#endif
+}
+/*-- 09.06.2006 09:52:13---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::entry(int /*pos*/,
+ writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ ref->resolve(*this);
+}
+/*-- 09.06.2006 09:52:13---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::data(const sal_uInt8* /*buf*/, size_t /*len*/,
+ writerfilter::Reference<Properties>::Pointer_t /*ref*/)
+{
+}
+/*-- 09.06.2006 09:52:13---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::startSectionGroup()
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("section");
+#endif
+ m_pImpl->PushProperties(CONTEXT_SECTION);
+}
+/*-- 09.06.2006 09:52:13---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::endSectionGroup()
+{
+ 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 );
+ m_pImpl->PopProperties(CONTEXT_SECTION);
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("section");
+#endif
+}
+/*-- 09.06.2006 09:52:13---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::startParagraphGroup()
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("paragraph");
+#endif
+
+ m_pImpl->getTableManager().startParagraphGroup();
+ m_pImpl->PushProperties(CONTEXT_PARAGRAPH);
+ static ::rtl::OUString sDefault( ::rtl::OUString::createFromAscii("Standard") );
+ if (m_pImpl->GetTopContext())
+ {
+ m_pImpl->GetTopContext()->Insert( PROP_PARA_STYLE_NAME, true, uno::makeAny( sDefault ) );
+ if (m_pImpl->isBreakDeferred(PAGE_BREAK))
+ m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE) );
+ else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
+ m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_COLUMN_BEFORE) );
+ }
+ m_pImpl->clearDeferredBreaks();
+}
+/*-- 09.06.2006 09:52:14---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::endParagraphGroup()
+{
+ //handle unprocessed deferred breaks
+ PropertyMapPtr pParaProperties = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH);
+ if( pParaProperties->hasEmptyPropertyValues() )
+ {
+ PropertyMap::const_iterator aIter = pParaProperties->find(PropertyDefinition( PROP_BREAK_TYPE , false ) );
+ if( aIter != pParaProperties->end() )
+ {
+ style::BreakType eType;
+ aIter->second >>= eType;
+ bool bPage = false;
+ bool bColumn = false;
+ if( eType == style::BreakType_PAGE_BEFORE )
+ bPage = true;
+ else if( eType == style::BreakType_COLUMN_BEFORE )
+ bColumn = true;
+
+ if( bPage || bColumn )
+ {
+ try
+ {
+ uno::Reference< beans::XPropertySet > xRangeProperties( m_pImpl->GetTopTextAppend()->getEnd(), uno::UNO_QUERY_THROW );
+ xRangeProperties->setPropertyValue(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName(PROP_BREAK_TYPE),
+ uno::makeAny( bPage ? style::BreakType_PAGE_BEFORE : style::BreakType_COLUMN_BEFORE));
+ }
+ catch( const uno::Exception& )
+ {
+ }
+ }
+ }
+ }
+
+ m_pImpl->PopProperties(CONTEXT_PARAGRAPH);
+ m_pImpl->getTableManager().endParagraphGroup();
+ //frame conversion has to be executed after table conversion
+ m_pImpl->ExecuteFrameConversion();
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("paragraph");
+#endif
+}
+
+void DomainMapper::startShape( uno::Reference< drawing::XShape > xShape )
+{
+ m_pImpl->PushShapeContext( xShape );
+}
+
+void DomainMapper::endShape( )
+{
+ m_pImpl->PopShapeContext( );
+}
+
+/*-- 13.06.2007 16:15:55---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper::PushStyleSheetProperties( PropertyMapPtr pStyleProperties, bool bAffectTableMngr )
+{
+ m_pImpl->PushStyleProperties( pStyleProperties );
+ if ( bAffectTableMngr )
+ m_pImpl->getTableManager( ).SetStyleProperties( pStyleProperties );
+}
+/*-- 13.06.2007 16:15:55---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper::PopStyleSheetProperties( bool bAffectTableMngr )
+{
+ m_pImpl->PopProperties( CONTEXT_STYLESHEET );
+ if ( bAffectTableMngr )
+ {
+ PropertyMapPtr emptyPtr;
+ m_pImpl->getTableManager( ).SetStyleProperties( emptyPtr );
+ }
+}
+/*-- 28.01.2008 14:52:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper::PushListProperties( ::boost::shared_ptr<PropertyMap> pListProperties )
+{
+ m_pImpl->PushListProperties( pListProperties );
+}
+/*-- 28.01.2008 14:52:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper::PopListProperties()
+{
+ m_pImpl->PopProperties( CONTEXT_LIST );
+}
+/*-- 09.06.2006 09:52:14---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+
+void DomainMapper::startCharacterGroup()
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("charactergroup");
+#endif
+
+ m_pImpl->PushProperties(CONTEXT_CHARACTER);
+ DomainMapperTableManager& rTableManager = m_pImpl->getTableManager();
+ if( rTableManager.getTableStyleName().getLength() )
+ {
+ PropertyMapPtr pTopContext = m_pImpl->GetTopContext();
+ rTableManager.CopyTextProperties(pTopContext, m_pImpl->GetStyleSheetTable());
+ }
+}
+/*-- 09.06.2006 09:52:14---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::endCharacterGroup()
+{
+ m_pImpl->PopProperties(CONTEXT_CHARACTER);
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("charactergroup");
+#endif
+}
+/*-- 09.06.2006 09:52:14---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::text(const sal_uInt8 * data_, size_t len)
+{
+ //TODO: Determine the right text encoding (FIB?)
+ ::rtl::OUString sText( (const sal_Char*) data_, len, RTL_TEXTENCODING_MS_1252 );
+ try
+ {
+ if(len == 1)
+ {
+ switch(*data_)
+ {
+ case 0x02: return; //footnote character
+ 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);
+ case 0x0d:
+ m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH));
+ return;
+ case 0x13:
+ m_pImpl->PushFieldContext();
+ return;
+ case 0x14:
+ // delimiter not necessarily available
+ // appears only if field contains further content
+ m_pImpl->CloseFieldCommand();
+ return;
+ case 0x15: /* end of field */
+ m_pImpl->PopFieldContext();
+ return;
+ default:
+ break;
+ }
+ }
+
+ PropertyMapPtr pContext = m_pImpl->GetTopContext();
+ if ( pContext && !pContext->GetFootnote().is() )
+ {
+ if (m_pImpl->isBreakDeferred(PAGE_BREAK))
+ m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE) );
+ else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
+ m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_COLUMN_BEFORE) );
+ m_pImpl->clearDeferredBreaks();
+ }
+
+ if( pContext->GetFootnote().is() && m_pImpl->IsCustomFtnMark() )
+ {
+ pContext->GetFootnote()->setLabel( sText );
+ m_pImpl->SetCustomFtnMark( false );
+ //otherwise ignore sText
+ }
+ else if( m_pImpl->IsOpenFieldCommand() )
+ 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->SetFieldResult( sText );
+ else
+ {
+ //--> debug
+ //sal_uInt32 nSize = pContext->size();
+ //<--
+
+ m_pImpl->appendTextPortion( sText, pContext );
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("text");
+ dmapper_logger->chars(sText);
+ dmapper_logger->endElement("text");
+#endif
+ }
+ }
+ catch( const uno::RuntimeException& )
+ {
+ std::clog << __FILE__ << "(l" << __LINE__ << ")" << std::endl;
+ }
+}
+/*-- 09.06.2006 09:52:15---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::utext(const sal_uInt8 * data_, size_t len)
+{
+ OUString sText;
+ OUStringBuffer aBuffer = OUStringBuffer(len);
+ aBuffer.append( (const sal_Unicode *) data_, len);
+ sText = aBuffer.makeStringAndClear();
+ try
+ {
+ m_pImpl->getTableManager().utext(data_, len);
+
+ if(len == 1 && ((*data_) == 0x0d || (*data_) == 0x07))
+ m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH));
+ else
+ {
+
+ PropertyMapPtr pContext = m_pImpl->GetTopContext();
+ if ( pContext && !pContext->GetFootnote().is() )
+ {
+ if (m_pImpl->isBreakDeferred(PAGE_BREAK))
+ m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE) );
+ else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
+ m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_COLUMN_BEFORE) );
+ m_pImpl->clearDeferredBreaks();
+ }
+
+ /* doesn't seem to be working
+ if( pContext->GetFootnote().is() )
+ {
+ //todo: the check for 0x0a is a hack!
+ if( *data_ != 0x0a && !pContext->GetFootnoteSymbol() )
+ pContext->GetFootnote()->setLabel( sText );
+ //otherwise ignore sText
+ }
+ else */
+ if( pContext->GetFootnote().is() )
+ {
+ if( !pContext->GetFootnoteSymbol() )
+ pContext->GetFootnote()->setLabel( sText );
+ //otherwise ignore sText
+ }
+ else if( m_pImpl->IsOpenFieldCommand() )
+ 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->SetFieldResult( sText );
+ else
+ m_pImpl->appendTextPortion( sText, pContext );
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("utext");
+ dmapper_logger->chars(sText);
+ dmapper_logger->endElement("utext");
+#endif
+ }
+ }
+ catch( const uno::RuntimeException& )
+ {
+ }
+}
+/*-- 09.06.2006 09:52:15---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::props(writerfilter::Reference<Properties>::Pointer_t ref)
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("props");
+#endif
+
+ string sType = ref->getType();
+ if( sType == "PICF" )
+ {
+ m_pImpl->ImportGraphic(ref, IMPORT_AS_GRAPHIC);
+ }
+ else if( sType == "FSPA" )
+ {
+ m_pImpl->ImportGraphic(ref, IMPORT_AS_SHAPE);
+ }
+ else
+ ref->resolve(*this);
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("props");
+#endif
+}
+/*-- 09.06.2006 09:52:15---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::table(Id name, writerfilter::Reference<Table>::Pointer_t ref)
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("table");
+ dmapper_logger->attribute("id", (*QNameToString::Instance())(name));
+#endif
+
+ // printf ( "DomainMapper::table(0x%.4x)\n", (unsigned int)name);
+ m_pImpl->SetAnyTableImport(true);
+ /* WRITERFILTERSTATUS: table: attributedata */
+ switch(name)
+ {
+ case NS_rtf::LN_FONTTABLE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ // 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_rtf::LN_STYLESHEET:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ //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:
+ case NS_rtf::LN_LISTTABLE:
+ {
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ //the same for list tables
+ ref->resolve( *m_pImpl->GetListTable() );
+ m_pImpl->GetListTable( )->CreateNumberingRules( );
+ }
+ break;
+ case NS_rtf::LN_LFOTABLE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ ref->resolve( *m_pImpl->GetLFOTable() );
+ break;
+ case NS_ooxml::LN_THEMETABLE:
+ ref->resolve ( *m_pImpl->GetThemeTable() );
+ break;
+ case NS_ooxml::LN_SETTINGS:
+ ref->resolve( *m_pImpl->GetSettingsTable( ) );
+ break;
+ default:
+ OSL_ENSURE( false, "which table is to be filled here?");
+ }
+ m_pImpl->SetAnyTableImport(false);
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("table");
+#endif
+}
+/*-- 09.06.2006 09:52:16---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::substream(Id rName, ::writerfilter::Reference<Stream>::Pointer_t ref)
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("substream");
+#endif
+
+ m_pImpl->getTableManager().startLevel();
+
+ //->debug
+ //string sName = (*QNameToString::Instance())(rName);
+ //--<debug
+ //import of page header/footer
+
+ /* WRITERFILTERSTATUS: table: attributedata */
+ switch( rName )
+ {
+ case NS_rtf::LN_headerl:
+ /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
+
+ m_pImpl->PushPageHeader(SectionPropertyMap::PAGE_LEFT);
+ break;
+ case NS_rtf::LN_headerr:
+ /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
+
+ m_pImpl->PushPageHeader(SectionPropertyMap::PAGE_RIGHT);
+ break;
+ case NS_rtf::LN_headerf:
+ /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
+
+ m_pImpl->PushPageHeader(SectionPropertyMap::PAGE_FIRST);
+ break;
+ case NS_rtf::LN_footerl:
+ /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
+
+ m_pImpl->PushPageFooter(SectionPropertyMap::PAGE_LEFT);
+ break;
+ case NS_rtf::LN_footerr:
+ /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
+
+ m_pImpl->PushPageFooter(SectionPropertyMap::PAGE_RIGHT);
+ break;
+ case NS_rtf::LN_footerf:
+ /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
+
+ m_pImpl->PushPageFooter(SectionPropertyMap::PAGE_FIRST);
+ break;
+ case NS_rtf::LN_footnote:
+ case NS_rtf::LN_endnote:
+ m_pImpl->PushFootOrEndnote( NS_rtf::LN_footnote == rName );
+ break;
+ case NS_rtf::LN_annotation :
+ m_pImpl->PushAnnotation();
+ break;
+ }
+ ref->resolve(*this);
+ switch( rName )
+ {
+ case NS_rtf::LN_headerl:
+ case NS_rtf::LN_headerr:
+ case NS_rtf::LN_headerf:
+ case NS_rtf::LN_footerl:
+ case NS_rtf::LN_footerr:
+ case NS_rtf::LN_footerf:
+ m_pImpl->PopPageHeaderFooter();
+ break;
+ case NS_rtf::LN_footnote:
+ case NS_rtf::LN_endnote:
+ m_pImpl->PopFootOrEndnote();
+ break;
+ case NS_rtf::LN_annotation :
+ m_pImpl->PopAnnotation();
+ break;
+ }
+
+ m_pImpl->getTableManager().endLevel();
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("substream");
+#endif
+}
+/*-- 09.06.2006 09:52:16---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::info(const string & /*info_*/)
+{
+}
+
+void DomainMapper::handleUnderlineType(const sal_Int32 nIntValue, const ::boost::shared_ptr<PropertyMap> pContext)
+{
+ sal_Int16 eUnderline = awt::FontUnderline::NONE;
+
+ switch(nIntValue)
+ {
+ case 0: eUnderline = awt::FontUnderline::NONE; break;
+ case 2: pContext->Insert(PROP_CHAR_WORD_MODE, true, uno::makeAny( true ) ); // TODO: how to get rid of it?
+ case 1: eUnderline = awt::FontUnderline::SINGLE; break;
+ case 3: eUnderline = awt::FontUnderline::DOUBLE; break;
+ case 4: eUnderline = awt::FontUnderline::DOTTED; break;
+ case 7: eUnderline = awt::FontUnderline::DASH; break;
+ case 9: eUnderline = awt::FontUnderline::DASHDOT; break;
+ case 10:eUnderline = awt::FontUnderline::DASHDOTDOT; break;
+ case 6: eUnderline = awt::FontUnderline::BOLD; break;
+ case 11:eUnderline = awt::FontUnderline::WAVE; break;
+ case 20:eUnderline = awt::FontUnderline::BOLDDOTTED; break;
+ case 23:eUnderline = awt::FontUnderline::BOLDDASH; break;
+ case 39:eUnderline = awt::FontUnderline::LONGDASH; break;
+ case 55:eUnderline = awt::FontUnderline::BOLDLONGDASH; break;
+ case 25:eUnderline = awt::FontUnderline::BOLDDASHDOT; break;
+ case 26:eUnderline = awt::FontUnderline::BOLDDASHDOTDOT;break;
+ case 27:eUnderline = awt::FontUnderline::BOLDWAVE; break;
+ case 43:eUnderline = awt::FontUnderline::DOUBLEWAVE; break;
+ default: ;
+ }
+ pContext->Insert(PROP_CHAR_UNDERLINE, true, uno::makeAny( eUnderline ) );
+}
+
+void DomainMapper::handleParaJustification(const sal_Int32 nIntValue, const ::boost::shared_ptr<PropertyMap> pContext, const bool bExchangeLeftRight)
+{
+ sal_Int16 nAdjust = 0;
+ sal_Int16 nLastLineAdjust = 0;
+ switch(nIntValue)
+ {
+ case 1:
+ nAdjust = style::ParagraphAdjust_CENTER;
+ break;
+ case 2:
+ nAdjust = static_cast< sal_Int16 > (bExchangeLeftRight ? style::ParagraphAdjust_LEFT : style::ParagraphAdjust_RIGHT);
+ break;
+ case 4:
+ nLastLineAdjust = style::ParagraphAdjust_BLOCK;
+ //no break;
+ case 3:
+ nAdjust = style::ParagraphAdjust_BLOCK;
+ break;
+ case 0:
+ default:
+ nAdjust = static_cast< sal_Int16 > (bExchangeLeftRight ? style::ParagraphAdjust_RIGHT : style::ParagraphAdjust_LEFT);
+ break;
+ }
+ pContext->Insert( PROP_PARA_ADJUST, true, uno::makeAny( nAdjust ) );
+ pContext->Insert( PROP_PARA_LAST_LINE_ADJUST, true, uno::makeAny( nLastLineAdjust ) );
+}
+
+bool DomainMapper::getColorFromIndex(const sal_Int32 nIndex, sal_Int32 &nColor)
+{
+ nColor = 0;
+ if ((nIndex < 1) || (nIndex > 16))
+ return false;
+
+ switch (nIndex)
+ {
+ case 1: nColor=0x000000; break; //black
+ case 2: nColor=0x0000ff; break; //blue
+ case 3: nColor=0x00ffff; break; //cyan
+ case 4: nColor=0x00ff00; break; //green
+ case 5: nColor=0xff00ff; break; //magenta
+ case 6: nColor=0xff0000; break; //red
+ case 7: nColor=0xffff00; break; //yellow
+ case 8: nColor=0xffffff; break; //white
+ case 9: nColor=0x000080; break;//dark blue
+ case 10: nColor=0x008080; break; //dark cyan
+ case 11: nColor=0x008000; break; //dark green
+ case 12: nColor=0x800080; break; //dark magenta
+ case 13: nColor=0x800000; break; //dark red
+ case 14: nColor=0x808000; break; //dark yellow
+ case 15: nColor=0x808080; break; //dark gray
+ case 16: nColor=0xC0C0C0; break; //light gray
+ default:
+ return false;
+ }
+ return true;
+}
+
+sal_Int16 DomainMapper::getEmphasisValue(const sal_Int32 nIntValue)
+{
+ switch (nIntValue)
+ {
+ case 1:
+ return com::sun::star::text::FontEmphasis::DOT_ABOVE;
+ case 2:
+ return com::sun::star::text::FontEmphasis::ACCENT_ABOVE;
+ case 3:
+ return com::sun::star::text::FontEmphasis::CIRCLE_ABOVE;
+ case 4:
+ return com::sun::star::text::FontEmphasis::DOT_BELOW;
+ default:
+ return com::sun::star::text::FontEmphasis::NONE;
+ }
+}
+
+rtl::OUString DomainMapper::getBracketStringFromEnum(const sal_Int32 nIntValue, const bool bIsPrefix)
+{
+ switch(nIntValue)
+ {
+ case 1:
+ if (bIsPrefix)
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "(" ));
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( ")" ));
+
+ case 2:
+ if (bIsPrefix)
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "[" ));
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "]" ));
+
+ case 3:
+ if (bIsPrefix)
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "<" ));
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( ">" ));
+
+ case 4:
+ if (bIsPrefix)
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "{" ));
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "}" ));
+
+ case 0:
+ default:
+ return rtl::OUString();
+ }
+}
+
+void DomainMapper::resolveSprmProps(Sprm & rSprm)
+{
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+}
+
+void DomainMapper::resolveAttributeProperties(Value & val)
+{
+ writerfilter::Reference<Properties>::Pointer_t pProperties = val.getProperties();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+}
+
+
+com::sun::star::style::TabAlign DomainMapper::getTabAlignFromValue(const sal_Int32 nIntValue)
+{
+ switch (nIntValue)
+ {
+ case 0:
+ case 4: // bar not supported
+ return com::sun::star::style::TabAlign_LEFT;
+ case 1:
+ return com::sun::star::style::TabAlign_CENTER;
+ case 2:
+ return com::sun::star::style::TabAlign_RIGHT;
+ case 3:
+ return com::sun::star::style::TabAlign_DECIMAL;
+ default:
+ return com::sun::star::style::TabAlign_DEFAULT;
+ }
+ return com::sun::star::style::TabAlign_LEFT;
+}
+
+sal_Unicode DomainMapper::getFillCharFromValue(const sal_Int32 nIntValue)
+{
+ switch (nIntValue)
+ {
+ case 1: // dot
+ return sal_Unicode(0x002e);
+ case 2: // hyphen
+ return sal_Unicode(0x002d);
+ case 3: // underscore
+ case 4: // heavy FIXME ???
+ return sal_Unicode(0x005f);
+ case NS_ooxml::LN_Value_ST_TabTlc_middleDot: // middleDot
+ return sal_Unicode(0x00b7);
+ case 0: // none
+ default:
+ return sal_Unicode(0x0020); // blank space
+ }
+}
+/*-- 18.07.2007 14:59:00---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+bool DomainMapper::IsOOXMLImport() const
+{
+ return m_pImpl->IsOOXMLImport();
+}
+/*-- 18.07.2007 16:03:14---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference < lang::XMultiServiceFactory > DomainMapper::GetTextFactory() const
+{
+ return m_pImpl->GetTextFactory();
+}
+/*-- 12.11.2007 10:41:01---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper::AddListIDToLFOTable( sal_Int32 nAbstractNumId )
+{
+ m_pImpl->GetLFOTable()->AddListID( nAbstractNumId );
+}
+/*-- 31.01.2008 18:19:44---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< text::XTextRange > DomainMapper::GetCurrentTextRange()
+{
+ return m_pImpl->GetTopTextAppend()->getEnd();
+}
+
+/*-- 05.02.2008 10:26:26---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::rtl::OUString DomainMapper::getOrCreateCharStyle( PropertyValueVector_t& rCharProperties )
+{
+ StyleSheetTablePtr pStyleSheets = m_pImpl->GetStyleSheetTable();
+ return pStyleSheets->getOrCreateCharStyle( rCharProperties );
+}
+
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
new file mode 100644
index 000000000000..e88d8d1d5a67
--- /dev/null
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
@@ -0,0 +1,743 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <DomainMapperTableHandler.hxx>
+#include <DomainMapper_Impl.hxx>
+#include <StyleSheetTable.hxx>
+#include <com/sun/star/table/TableBorderDistances.hpp>
+#include <com/sun/star/table/TableBorder.hpp>
+#include <com/sun/star/text/HoriOrientation.hpp>
+#if OSL_DEBUG_LEVEL > 1
+#include <iostream>
+#endif
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+using namespace ::std;
+
+#define DEF_BORDER_DIST 190 //0,19cm
+#define DEFAULT_CELL_MARGIN 108 //default cell margin, not documented
+
+#ifdef DEBUG
+static void lcl_printHandle(const Handle_t rHandle)
+{
+ if (!rHandle.get())
+ return;
+ rtl::OUString aOUStr = rHandle->getString();
+ rtl::OString aOStr(aOUStr.getStr(), aOUStr.getLength(), RTL_TEXTENCODING_ASCII_US );
+
+ clog << aOStr.getStr() << endl;
+}
+static void lcl_printProperties( PropertyMapPtr pProps )
+{
+ if( pProps.get() )
+ {
+ clog << "<properties>";
+ PropertyMap::const_iterator aMapIter = pProps->begin();
+ PropertyMap::const_iterator aEndIter = pProps->end();
+ PropertyNameSupplier& rPropSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ for( ; aMapIter != aEndIter; ++aMapIter )
+ {
+ rtl::OUString aOUStr = rPropSupplier.GetName( aMapIter->first.eId );
+ rtl::OString aOStr(aOUStr.getStr(), aOUStr.getLength(), RTL_TEXTENCODING_ASCII_US );
+ clog << aOStr.getStr();
+
+ table::BorderLine aLine;
+ sal_Int32 nColor;
+ if ( aMapIter->second >>= aLine )
+ {
+ clog << ": BorderLine ( Color: " << aLine.Color;
+ clog << ", Inner: " << aLine.InnerLineWidth;
+ clog << ", Outer: " << aLine.OuterLineWidth << ") ";
+ }
+ else if ( aMapIter->second >>= nColor )
+ {
+ clog << ": Color ( " << nColor << " ) ";
+ }
+
+ clog << " - ";
+ }
+ clog << endl;
+ }
+}
+#endif
+
+DomainMapperTableHandler::DomainMapperTableHandler(TextReference_t xText, DomainMapper_Impl& rDMapper_Impl)
+ : m_xText(xText),
+ m_rDMapper_Impl( rDMapper_Impl ),
+ m_nCellIndex(0),
+ m_nRowIndex(0)
+{
+}
+
+DomainMapperTableHandler::~DomainMapperTableHandler()
+{
+}
+
+void DomainMapperTableHandler::startTable(unsigned int nRows,
+ unsigned int /*nDepth*/,
+ TablePropertyMapPtr pProps)
+{
+ m_aTableProperties = pProps;
+ m_pTableSeq = TableSequencePointer_t(new TableSequence_t(nRows));
+ m_nRowIndex = 0;
+
+#if OSL_DEBUG_LEVEL > 1
+ char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), "%d", nRows);
+ clog << "<table rows=\"" << sBuffer << "\">" << endl;
+ lcl_printProperties( pProps );
+#endif
+}
+
+/*-- 22.02.2008 10:18:37---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+PropertyMapPtr lcl_SearchParentStyleSheetAndMergeProperties(const StyleSheetEntryPtr pStyleSheet, StyleSheetTablePtr pStyleSheetTable)
+{
+ PropertyMapPtr pRet;
+ if( pStyleSheet->sBaseStyleIdentifier.getLength())
+ {
+ const StyleSheetEntryPtr pParentStyleSheet = pStyleSheetTable->FindStyleSheetByISTD( pStyleSheet->sBaseStyleIdentifier );
+ pRet = lcl_SearchParentStyleSheetAndMergeProperties( pParentStyleSheet, pStyleSheetTable );
+ }
+ else
+ {
+ pRet.reset( new PropertyMap );
+ }
+
+ pRet->insert( pStyleSheet->pProperties, true );
+ return pRet;
+}
+
+void lcl_mergeBorder( PropertyIds nId, PropertyMapPtr pOrig, PropertyMapPtr pDest )
+{
+ PropertyDefinition aDef( nId, false );
+ PropertyMap::iterator pOrigIt = pOrig->find( aDef );
+
+ if ( pOrigIt != pOrig->end( ) )
+ {
+ pDest->Insert( nId, false, pOrigIt->second, false );
+ }
+}
+
+void lcl_computeCellBorders( PropertyMapPtr pTableBorders, PropertyMapPtr pCellProps,
+ sal_Int32 nCell, sal_Int32 nRow, bool bIsEndCol, bool bIsEndRow )
+{
+ PropertyDefinition aVertPDef( META_PROP_VERTICAL_BORDER, false );
+ PropertyDefinition aHorizPDef( META_PROP_HORIZONTAL_BORDER, false );
+
+ PropertyMap::iterator aVerticalIter = pCellProps->find( aVertPDef );
+ PropertyMap::iterator aHorizontalIter = pCellProps->find( aHorizPDef );
+
+ // Handle the vertical and horizontal borders
+ bool bHasVert = ( aVerticalIter != pCellProps->end( ) );
+ uno::Any aVertProp;
+ if ( !bHasVert )
+ {
+ aVerticalIter = pTableBorders->find( aVertPDef );
+ bHasVert = ( aVerticalIter != pTableBorders->end( ) );
+ if ( bHasVert )
+ aVertProp = aVerticalIter->second;
+ }
+ else
+ {
+ aVertProp = aVerticalIter->second;
+ pCellProps->erase( aVerticalIter );
+ }
+
+ bool bHasHoriz = ( aHorizontalIter != pCellProps->end( ) );
+ uno::Any aHorizProp;
+ if ( !bHasHoriz )
+ {
+ aHorizontalIter = pTableBorders->find( aHorizPDef );
+ bHasHoriz = ( aHorizontalIter != pTableBorders->end( ) );
+ if ( bHasHoriz )
+ aHorizProp = aHorizontalIter->second;
+ }
+ else
+ {
+ aHorizProp = aHorizontalIter->second;
+ pCellProps->erase( aHorizontalIter );
+ }
+
+ if ( nCell == 0 )
+ {
+ lcl_mergeBorder( PROP_LEFT_BORDER, pTableBorders, pCellProps );
+ if ( bHasVert )
+ pCellProps->Insert( PROP_RIGHT_BORDER, false, aVertProp, false );
+ }
+
+ if ( bIsEndCol )
+ {
+ lcl_mergeBorder( PROP_RIGHT_BORDER, pTableBorders, pCellProps );
+ if ( bHasVert )
+ pCellProps->Insert( PROP_LEFT_BORDER, false, aVertProp, false );
+ }
+
+ if ( nCell > 0 && !bIsEndCol )
+ {
+ if ( bHasVert )
+ {
+ pCellProps->Insert( PROP_RIGHT_BORDER, false, aVertProp, false );
+ pCellProps->Insert( PROP_LEFT_BORDER, false, aVertProp, false );
+ }
+ }
+
+ if ( nRow == 0 )
+ {
+ lcl_mergeBorder( PROP_TOP_BORDER, pTableBorders, pCellProps );
+ if ( bHasHoriz )
+ pCellProps->Insert( PROP_BOTTOM_BORDER, false, aHorizProp, false );
+ }
+
+ if ( bIsEndRow )
+ {
+ lcl_mergeBorder( PROP_BOTTOM_BORDER, pTableBorders, pCellProps );
+ if ( bHasHoriz )
+ pCellProps->Insert( PROP_TOP_BORDER, false, aHorizProp, false );
+ }
+
+ if ( nRow > 0 && !bIsEndRow )
+ {
+ if ( bHasHoriz )
+ {
+ pCellProps->Insert( PROP_TOP_BORDER, false, aHorizProp, false );
+ pCellProps->Insert( PROP_BOTTOM_BORDER, false, aHorizProp, false );
+ }
+ }
+}
+
+void DomainMapperTableHandler::endTable()
+{
+#if OSL_DEBUG_LEVEL > 1
+{
+ clog << "</table>" << endl;
+ sal_uInt32 nCells = 0;
+ sal_uInt32 nRows = m_aRowProperties.size();
+ if( nRows == m_aCellProperties.size() )
+ {
+ for( sal_uInt32 nRow = 0; nRow < nRows; ++nRow )
+ nCells += m_aCellProperties[nRow].size();
+ }
+ sal_uInt32 nTblPropSize = m_aTableProperties.get() ? m_aTableProperties->size() : 0;
+ (void)nTblPropSize;
+
+ ::rtl::OUString sNames;
+ if( nTblPropSize )
+ {
+ const beans::PropertyValues aDebugTbl = m_aTableProperties->GetPropertyValues();
+ for( sal_uInt32 nDebug = 0; nDebug < nTblPropSize; ++nDebug)
+ {
+ const ::rtl::OUString sName = aDebugTbl[nDebug].Name;
+ sNames += sName;
+ sNames += ::rtl::OUString('-');
+ }
+ m_aTableProperties->Invalidate();
+ sNames += ::rtl::OUString(' ');
+ clog << "Props: " << rtl::OUStringToOString( sNames, RTL_TEXTENCODING_UTF8 ).getStr( ) << endl;
+ }
+}
+#endif
+
+ TablePropertyValues_t aTableProperties;
+ sal_Int32 nLeftBorderDistance, nRightBorderDistance, nTopBorderDistance, nBottomBorderDistance;
+ nLeftBorderDistance = nRightBorderDistance = DEF_BORDER_DIST;
+ nTopBorderDistance = nBottomBorderDistance = 0;
+
+ PropertyMapPtr pTableDefaults( new PropertyMap );
+ PropertyMapPtr pTableBorders( new PropertyMap );
+
+ // will receive the table style if any
+ TableStyleSheetEntry* pTableStyle = NULL;
+
+ if( m_aTableProperties.get() )
+ {
+ //create properties from the table attributes
+ //...pPropMap->Insert( PROP_LEFT_MARGIN, false, uno::makeAny( m_nLeftMargin - m_nGapHalf ));
+ //pPropMap->Insert( PROP_HORI_ORIENT, false, uno::makeAny( text::HoriOrientation::RIGHT ));
+ sal_Int32 nGapHalf = 0;
+ sal_Int32 nLeftMargin = 0;
+ sal_Int32 nTableWidth = 0;
+
+ PropertyMap::iterator aTableStyleIter =
+ m_aTableProperties->find( PropertyDefinition( META_PROP_TABLE_STYLE_NAME, false ) );
+ if(aTableStyleIter != m_aTableProperties->end())
+ {
+ // Apply table style properties recursively
+ ::rtl::OUString sTableStyleName;
+ aTableStyleIter->second >>= sTableStyleName;
+ StyleSheetTablePtr pStyleSheetTable = m_rDMapper_Impl.GetStyleSheetTable();
+ const StyleSheetEntryPtr pStyleSheet = pStyleSheetTable->FindStyleSheetByISTD( sTableStyleName );
+ pTableStyle = static_cast<TableStyleSheetEntry*>( pStyleSheet.get( ) );
+ m_aTableProperties->erase( aTableStyleIter );
+
+ if( pStyleSheet )
+ {
+ // First get the style properties, then the table ones
+ PropertyMapPtr pTableProps( m_aTableProperties );
+ TablePropertyMapPtr pEmptyProps( new TablePropertyMap );
+
+ m_aTableProperties = pEmptyProps;
+
+ PropertyMapPtr pMergedProperties = lcl_SearchParentStyleSheetAndMergeProperties(pStyleSheet, pStyleSheetTable);
+
+ m_aTableProperties->insert( pMergedProperties );
+ m_aTableProperties->insert( pTableProps );
+ }
+ }
+
+ // Set the table default attributes for the cells
+ pTableDefaults->insert( m_aTableProperties );
+
+ m_aTableProperties->getValue( TablePropertyMap::GAP_HALF, nGapHalf );
+ m_aTableProperties->getValue( TablePropertyMap::LEFT_MARGIN, nLeftMargin );
+
+ m_aTableProperties->getValue( TablePropertyMap::CELL_MAR_LEFT, nLeftBorderDistance );
+ m_aTableProperties->getValue( TablePropertyMap::CELL_MAR_RIGHT, nRightBorderDistance );
+ m_aTableProperties->getValue( TablePropertyMap::CELL_MAR_TOP, nTopBorderDistance );
+ m_aTableProperties->getValue( TablePropertyMap::CELL_MAR_BOTTOM, nBottomBorderDistance );
+
+ table::TableBorderDistances aDistances;
+ aDistances.IsTopDistanceValid =
+ aDistances.IsBottomDistanceValid =
+ aDistances.IsLeftDistanceValid =
+ aDistances.IsRightDistanceValid = sal_True;
+ aDistances.TopDistance = static_cast<sal_Int16>( nTopBorderDistance );
+ aDistances.BottomDistance = static_cast<sal_Int16>( nBottomBorderDistance );
+ aDistances.LeftDistance = static_cast<sal_Int16>( nLeftBorderDistance );
+ aDistances.RightDistance = static_cast<sal_Int16>( nRightBorderDistance );
+
+ m_aTableProperties->Insert( PROP_TABLE_BORDER_DISTANCES, false, uno::makeAny( aDistances ) );
+
+ //table border settings
+ table::TableBorder aTableBorder;
+
+ PropertyMap::iterator aTblBorderIter = m_aTableProperties->find( PropertyDefinition(PROP_TOP_BORDER, false) );
+ if( aTblBorderIter != m_aTableProperties->end() )
+ {
+ aTblBorderIter->second >>= aTableBorder.TopLine;
+ aTableBorder.IsTopLineValid = true;
+ m_aTableProperties->erase( aTblBorderIter );
+
+ pTableBorders->Insert( PROP_TOP_BORDER, false, uno::makeAny( aTableBorder.TopLine ) );
+ PropertyMap::iterator pIt = pTableDefaults->find( PropertyDefinition( PROP_TOP_BORDER, false ) );
+ if ( pIt != pTableDefaults->end( ) )
+ pTableDefaults->erase( pIt );
+ }
+ aTblBorderIter = m_aTableProperties->find( PropertyDefinition(PROP_BOTTOM_BORDER, false) );
+ if( aTblBorderIter != m_aTableProperties->end() )
+ {
+ aTblBorderIter->second >>= aTableBorder.BottomLine;
+ aTableBorder.IsBottomLineValid = true;
+ m_aTableProperties->erase( aTblBorderIter );
+
+ pTableBorders->Insert( PROP_BOTTOM_BORDER, false, uno::makeAny( aTableBorder.BottomLine ) );
+ PropertyMap::iterator pIt = pTableDefaults->find( PropertyDefinition( PROP_BOTTOM_BORDER, false ) );
+ if ( pIt != pTableDefaults->end( ) )
+ pTableDefaults->erase( pIt );
+ }
+ aTblBorderIter = m_aTableProperties->find( PropertyDefinition(PROP_LEFT_BORDER, false) );
+ if( aTblBorderIter != m_aTableProperties->end() )
+ {
+ aTblBorderIter->second >>= aTableBorder.LeftLine;
+ aTableBorder.IsLeftLineValid = true;
+ m_aTableProperties->erase( aTblBorderIter );
+
+ pTableBorders->Insert( PROP_LEFT_BORDER, false, uno::makeAny( aTableBorder.LeftLine ) );
+ PropertyMap::iterator pIt = pTableDefaults->find( PropertyDefinition( PROP_LEFT_BORDER, false ) );
+ if ( pIt != pTableDefaults->end( ) )
+ pTableDefaults->erase( pIt );
+ }
+ aTblBorderIter = m_aTableProperties->find( PropertyDefinition(PROP_RIGHT_BORDER, false) );
+ if( aTblBorderIter != m_aTableProperties->end() )
+ {
+ aTblBorderIter->second >>= aTableBorder.RightLine;
+ aTableBorder.IsRightLineValid = true;
+ m_aTableProperties->erase( aTblBorderIter );
+
+ pTableBorders->Insert( PROP_RIGHT_BORDER, false, uno::makeAny( aTableBorder.RightLine ) );
+ PropertyMap::iterator pIt = pTableDefaults->find( PropertyDefinition( PROP_RIGHT_BORDER, false ) );
+ if ( pIt != pTableDefaults->end( ) )
+ pTableDefaults->erase( pIt );
+ }
+ aTblBorderIter = m_aTableProperties->find( PropertyDefinition(META_PROP_HORIZONTAL_BORDER, false) );
+ if( aTblBorderIter != m_aTableProperties->end() )
+ {
+ aTblBorderIter->second >>= aTableBorder.HorizontalLine;
+ aTableBorder.IsHorizontalLineValid = true;
+ m_aTableProperties->erase( aTblBorderIter );
+
+ pTableBorders->Insert( META_PROP_HORIZONTAL_BORDER, false, uno::makeAny( aTableBorder.HorizontalLine ) );
+ PropertyMap::iterator pIt = pTableDefaults->find( PropertyDefinition( META_PROP_HORIZONTAL_BORDER, false ) );
+ if ( pIt != pTableDefaults->end( ) )
+ pTableDefaults->erase( pIt );
+ }
+ aTblBorderIter = m_aTableProperties->find( PropertyDefinition(META_PROP_VERTICAL_BORDER, false) );
+ if( aTblBorderIter != m_aTableProperties->end() )
+ {
+ aTblBorderIter->second >>= aTableBorder.VerticalLine;
+ aTableBorder.IsVerticalLineValid = true;
+ m_aTableProperties->erase( aTblBorderIter );
+
+ pTableBorders->Insert( META_PROP_VERTICAL_BORDER, false, uno::makeAny( aTableBorder.VerticalLine ) );
+ PropertyMap::iterator pIt = pTableDefaults->find( PropertyDefinition( META_PROP_VERTICAL_BORDER, false ) );
+ if ( pIt != pTableDefaults->end( ) )
+ pTableDefaults->erase( pIt );
+ }
+ aTableBorder.Distance = 0;
+ aTableBorder.IsDistanceValid = false;
+
+ m_aTableProperties->Insert( PROP_TABLE_BORDER, false, uno::makeAny( aTableBorder ) );
+
+ m_aTableProperties->Insert( PROP_LEFT_MARGIN, false, uno::makeAny( nLeftMargin - nGapHalf - nLeftBorderDistance));
+
+ m_aTableProperties->getValue( TablePropertyMap::TABLE_WIDTH, nTableWidth );
+ if( nTableWidth > 0 )
+ m_aTableProperties->Insert( PROP_WIDTH, false, uno::makeAny( nTableWidth ));
+
+ sal_Int32 nHoriOrient = text::HoriOrientation::LEFT_AND_WIDTH;
+ m_aTableProperties->getValue( TablePropertyMap::HORI_ORIENT, nHoriOrient ) ;
+ m_aTableProperties->Insert( PROP_HORI_ORIENT, false, uno::makeAny( sal_Int16(nHoriOrient) ) );
+
+ //fill default value - if not available
+ const PropertyMap::const_iterator aRepeatIter =
+ m_aTableProperties->find( PropertyDefinition( PROP_HEADER_ROW_COUNT, false ) );
+ if( aRepeatIter == m_aTableProperties->end() )
+ m_aTableProperties->Insert( PROP_HEADER_ROW_COUNT, false, uno::makeAny( (sal_Int32)0 ));
+
+ // Remove the PROP_HEADER_ROW_COUNT from the table default to avoid
+ // propagating it to the cells
+ PropertyMap::iterator aDefaultRepeatIt =
+ pTableDefaults->find( PropertyDefinition( PROP_HEADER_ROW_COUNT, false ) );
+ if ( aDefaultRepeatIt != pTableDefaults->end( ) )
+ pTableDefaults->erase( aDefaultRepeatIt );
+
+ aTableProperties = m_aTableProperties->GetPropertyValues();
+ }
+
+ // expands to uno::Sequence< Sequence< beans::PropertyValues > >
+ CellPropertyValuesSeq_t aCellProperties( m_aCellProperties.size() );
+
+ // 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;
+
+ //it's a uno::Sequence< beans::PropertyValues >*
+ RowPropertyValuesSeq_t* pCellProperties = aCellProperties.getArray();
+ while( aRowOfCellsIterator != aRowOfCellsIteratorEnd )
+ {
+ //aRowOfCellsIterator points to a vector of PropertyMapPtr
+ PropertyMapVector1::const_iterator aCellIterator = aRowOfCellsIterator->begin();
+ PropertyMapVector1::const_iterator aCellIteratorEnd = aRowOfCellsIterator->end();
+ PropertyMapVector1::const_iterator aLastCellIterator = aRowOfCellsIterator->end() - 1;
+
+ // Get the row style properties
+ sal_Int32 nRowStyleMask = sal_Int32( 0 );
+ PropertyMapPtr pRowProps = m_aRowProperties[nRow];
+ if ( pRowProps.get( ) )
+ {
+ PropertyMap::iterator pTcCnfStyleIt = pRowProps->find( PropertyDefinition( PROP_CNF_STYLE, true ) );
+ if ( pTcCnfStyleIt != pRowProps->end( ) )
+ {
+ if ( pTableStyle )
+ {
+ rtl::OUString sMask;
+ pTcCnfStyleIt->second >>= sMask;
+ nRowStyleMask = sMask.toInt32( 2 );
+ }
+ pRowProps->erase( pTcCnfStyleIt );
+ }
+ }
+
+ sal_Int32 nCell = 0;
+ pCellProperties[nRow].realloc( aRowOfCellsIterator->size() );
+ beans::PropertyValues* pSingleCellProperties = pCellProperties[nRow].getArray();
+ while( aCellIterator != aCellIteratorEnd )
+ {
+ PropertyMapPtr pAllCellProps( new PropertyMap );
+
+ bool bIsEndCol = aCellIterator == aLastCellIterator;
+ bool bIsEndRow = aRowOfCellsIterator == aLastRowIterator;
+
+ //aCellIterator points to a PropertyMapPtr;
+ if( aCellIterator->get() )
+ {
+ if ( pTableDefaults->size( ) )
+ pAllCellProps->insert( pTableDefaults );
+
+ // Fill the cell properties with the ones of the style
+ sal_Int32 nCellStyleMask = 0;
+ const PropertyMap::iterator aCnfStyleIter =
+ aCellIterator->get()->find( PropertyDefinition( PROP_CNF_STYLE, false ) );
+ if ( aCnfStyleIter != aCellIterator->get( )->end( ) )
+ {
+ if ( pTableStyle ) {
+ rtl::OUString sMask;
+ aCnfStyleIter->second >>= sMask;
+ nCellStyleMask = sMask.toInt32( 2 );
+ }
+ aCellIterator->get( )->erase( aCnfStyleIter );
+ }
+
+ if ( pTableStyle )
+ {
+ PropertyMapPtr pStyleProps = pTableStyle->GetProperties( nCellStyleMask + nRowStyleMask );
+ pAllCellProps->insert( pStyleProps );
+ }
+
+ // Then add the cell properties
+ pAllCellProps->insert( *aCellIterator );
+ aCellIterator->get( )->swap( *pAllCellProps.get( ) );
+
+#if DEBUG
+ clog << "Cell #" << nCell << ", Row #" << nRow << endl;
+#endif
+
+ lcl_computeCellBorders( pTableBorders, *aCellIterator, nCell, nRow, bIsEndCol, bIsEndRow );
+
+ //now set the default left+right border distance TODO: there's an sprm containing the default distance!
+ const PropertyMap::const_iterator aLeftDistanceIter =
+ aCellIterator->get()->find( PropertyDefinition(PROP_LEFT_BORDER_DISTANCE, false) );
+ if( aLeftDistanceIter == aCellIterator->get()->end() )
+ aCellIterator->get()->Insert( PROP_LEFT_BORDER_DISTANCE, false,
+ uno::makeAny(nLeftBorderDistance ) );
+ const PropertyMap::const_iterator aRightDistanceIter =
+ aCellIterator->get()->find( PropertyDefinition(PROP_RIGHT_BORDER_DISTANCE, false) );
+ if( aRightDistanceIter == aCellIterator->get()->end() )
+ aCellIterator->get()->Insert( PROP_RIGHT_BORDER_DISTANCE, false,
+ uno::makeAny((sal_Int32) nRightBorderDistance ) );
+
+ const PropertyMap::const_iterator aTopDistanceIter =
+ aCellIterator->get()->find( PropertyDefinition(PROP_TOP_BORDER_DISTANCE, false) );
+ if( aTopDistanceIter == aCellIterator->get()->end() )
+ aCellIterator->get()->Insert( PROP_TOP_BORDER_DISTANCE, false,
+ uno::makeAny((sal_Int32) nTopBorderDistance ) );
+
+ const PropertyMap::const_iterator aBottomDistanceIter =
+ aCellIterator->get()->find( PropertyDefinition(PROP_BOTTOM_BORDER_DISTANCE, false) );
+ if( aBottomDistanceIter == aCellIterator->get()->end() )
+ aCellIterator->get()->Insert( PROP_BOTTOM_BORDER_DISTANCE, false,
+ uno::makeAny((sal_Int32) nBottomBorderDistance ) );
+
+ pSingleCellProperties[nCell] = aCellIterator->get()->GetPropertyValues();
+ }
+ ++nCell;
+ ++aCellIterator;
+ }
+#if OSL_DEBUG_LEVEL > 1
+//-->debug cell properties
+ {
+ ::rtl::OUString sNames;
+ const uno::Sequence< beans::PropertyValues > aDebugCurrentRow = aCellProperties[nRow];
+ sal_Int32 nDebugCells = aDebugCurrentRow.getLength();
+ (void) nDebugCells;
+ for( sal_Int32 nDebugCell = 0; nDebugCell < nDebugCells; ++nDebugCell)
+ {
+ const uno::Sequence< beans::PropertyValue >& aDebugCellProperties = aDebugCurrentRow[nDebugCell];
+ sal_Int32 nDebugCellProperties = aDebugCellProperties.getLength();
+ for( sal_Int32 nDebugProperty = 0; nDebugProperty < nDebugCellProperties; ++nDebugProperty)
+ {
+ const ::rtl::OUString sName = aDebugCellProperties[nDebugProperty].Name;
+ sNames += sName;
+ sNames += ::rtl::OUString('-');
+ }
+ sNames += ::rtl::OUString('\n');
+ }
+ (void)sNames;
+ }
+//--<
+#endif
+ ++nRow;
+ ++aRowOfCellsIterator;
+ }
+#if OSL_DEBUG_LEVEL > 1
+//-->debug cell properties of all rows
+ {
+ ::rtl::OUString sNames;
+ for( sal_Int32 nDebugRow = 0; nDebugRow < aCellProperties.getLength(); ++nDebugRow)
+ {
+ const uno::Sequence< beans::PropertyValues > aDebugCurrentRow = aCellProperties[nDebugRow];
+ sal_Int32 nDebugCells = aDebugCurrentRow.getLength();
+ (void) nDebugCells;
+ for( sal_Int32 nDebugCell = 0; nDebugCell < nDebugCells; ++nDebugCell)
+ {
+ const uno::Sequence< beans::PropertyValue >& aDebugCellProperties = aDebugCurrentRow[nDebugCell];
+ sal_Int32 nDebugCellProperties = aDebugCellProperties.getLength();
+ for( sal_Int32 nDebugProperty = 0; nDebugProperty < nDebugCellProperties; ++nDebugProperty)
+ {
+ const ::rtl::OUString sName = aDebugCellProperties[nDebugProperty].Name;
+ sNames += sName;
+ sNames += ::rtl::OUString('-');
+ }
+ sNames += ::rtl::OUString('+');
+ }
+ sNames += ::rtl::OUString('|');
+ }
+ (void)sNames;
+ }
+//--<
+#endif
+
+ RowPropertyValuesSeq_t aRowProperties( m_aRowProperties.size() );
+ PropertyMapVector1::const_iterator aRowIter = m_aRowProperties.begin();
+ PropertyMapVector1::const_iterator aRowIterEnd = m_aRowProperties.end();
+ nRow = 0;
+ while( aRowIter != aRowIterEnd )
+ {
+ if( aRowIter->get() )
+ {
+ //set default to 'break across pages"
+ if( aRowIter->get()->find( PropertyDefinition( PROP_IS_SPLIT_ALLOWED, false )) == aRowIter->get()->end())
+ aRowIter->get()->Insert( PROP_IS_SPLIT_ALLOWED, false, uno::makeAny(sal_True ) );
+
+ aRowProperties[nRow] = aRowIter->get()->GetPropertyValues();
+ }
+ ++nRow;
+ ++aRowIter;
+ }
+
+ if (m_pTableSeq->getLength() > 0)
+ {
+ try
+ {
+#if OSL_DEBUG_LEVEL > 1
+ {
+ sal_Int32 nCellPropertiesRows = aCellProperties.getLength();
+ sal_Int32 nCellPropertiesCells = aCellProperties[0].getLength();
+ sal_Int32 nCellPropertiesProperties = aCellProperties[0][0].getLength();
+ (void) nCellPropertiesRows;
+ (void) nCellPropertiesCells;
+ (void) nCellPropertiesProperties;
+ ++nCellPropertiesProperties;
+ }
+ clog << "Converting table" << endl;
+#endif
+
+ uno::Reference<text::XTextTable> xTable = m_xText->convertToTable(*m_pTableSeq,
+ aCellProperties,
+ aRowProperties,
+ aTableProperties);
+
+ m_xTableRange = xTable->getAnchor( );
+ }
+ catch (lang::IllegalArgumentException e)
+ {
+#if OSL_DEBUG_LEVEL > 1
+ clog << "failed to import table!" << endl;
+#endif
+ }
+#if OSL_DEBUG_LEVEL > 1
+ catch ( uno::Exception e )
+ {
+ clog << "Caught an other exception: " << rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr( ) << endl;
+ }
+#endif
+ }
+
+ m_aTableProperties.reset();
+ m_aCellProperties.clear();
+ m_aRowProperties.clear();
+}
+
+void DomainMapperTableHandler::startRow(unsigned int nCells,
+ TablePropertyMapPtr pProps)
+{
+ m_aRowProperties.push_back( pProps );
+ m_aCellProperties.push_back( PropertyMapVector1() );
+
+#if OSL_DEBUG_LEVEL > 1
+ char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), "%d", nCells);
+
+ clog << "<table.row cells=\"" << sBuffer << "\">" << endl;
+ lcl_printProperties( pProps );
+#endif
+
+ m_pRowSeq = RowSequencePointer_t(new RowSequence_t(nCells));
+ m_nCellIndex = 0;
+}
+
+void DomainMapperTableHandler::endRow()
+{
+ (*m_pTableSeq)[m_nRowIndex] = *m_pRowSeq;
+ ++m_nRowIndex;
+ m_nCellIndex = 0;
+#if OSL_DEBUG_LEVEL > 1
+ clog << "</table.row>" << endl;
+#endif
+}
+
+void DomainMapperTableHandler::startCell(const Handle_t & start,
+ TablePropertyMapPtr pProps )
+{
+ sal_uInt32 nRow = m_aRowProperties.size();
+ if ( pProps.get( ) )
+ m_aCellProperties[nRow - 1].push_back( pProps );
+ 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 );
+ }
+
+#if OSL_DEBUG_LEVEL > 1
+ clog << "<table.cell>";
+ lcl_printHandle(start);
+ lcl_printProperties( pProps );
+ clog << ",";
+#endif
+
+ //add a new 'row' of properties
+// if( m_pCellProperties.size() <= sal::static_int_cast< sal_uInt32, sal_Int32>(m_nRowIndex) )
+// m_pCellProperties.push_back( RowProperties_t() );
+// m_pCellProperties[m_nRowIndex].push_back( pProps );
+ m_pCellSeq = CellSequencePointer_t(new CellSequence_t(2));
+ if (!start.get())
+ return;
+ (*m_pCellSeq)[0] = start->getStart();
+}
+
+void DomainMapperTableHandler::endCell(const Handle_t & end)
+{
+#if OSL_DEBUG_LEVEL > 1
+ lcl_printHandle(end);
+ clog << "</table.cell>" << endl;
+#endif
+
+ if (!end.get())
+ return;
+ (*m_pCellSeq)[1] = end->getEnd();
+ (*m_pRowSeq)[m_nCellIndex] = *m_pCellSeq;
+ ++m_nCellIndex;
+}
+
+}}
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.hxx b/writerfilter/source/dmapper/DomainMapperTableHandler.hxx
new file mode 100644
index 000000000000..a71475f6eaa1
--- /dev/null
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.hxx
@@ -0,0 +1,97 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_DOMAIN_MAPPER_TABLE_HANDLER_HXX
+#define INCLUDED_DOMAIN_MAPPER_TABLE_HANDLER_HXX
+
+#include <resourcemodel/TableManager.hxx>
+#include <PropertyMap.hxx>
+
+#include <com/sun/star/text/XTextAppendAndConvert.hpp>
+
+namespace writerfilter {
+namespace dmapper {
+
+typedef ::com::sun::star::text::XTextRange TextRange_t;
+typedef ::com::sun::star::uno::Reference< TextRange_t > Handle_t;
+typedef ::com::sun::star::uno::Sequence< Handle_t> CellSequence_t;
+typedef boost::shared_ptr<CellSequence_t> CellSequencePointer_t;
+typedef ::com::sun::star::uno::Sequence< CellSequence_t > RowSequence_t;
+typedef boost::shared_ptr<RowSequence_t> RowSequencePointer_t;
+typedef ::com::sun::star::uno::Sequence< RowSequence_t> TableSequence_t;
+typedef boost::shared_ptr<TableSequence_t> TableSequencePointer_t;
+typedef ::com::sun::star::text::XTextAppendAndConvert Text_t;
+typedef ::com::sun::star::uno::Reference<Text_t> TextReference_t;
+
+typedef ::com::sun::star::beans::PropertyValues TablePropertyValues_t;
+typedef ::com::sun::star::uno::Sequence< TablePropertyValues_t > RowPropertyValuesSeq_t;
+typedef ::com::sun::star::uno::Sequence< RowPropertyValuesSeq_t> CellPropertyValuesSeq_t;
+
+typedef std::vector<PropertyMapPtr> PropertyMapVector1;
+typedef std::vector<PropertyMapVector1> PropertyMapVector2;
+
+class DomainMapper_Impl;
+class DomainMapperTableHandler : public TableDataHandler<Handle_t , TablePropertyMapPtr >
+{
+ TextReference_t m_xText;
+ DomainMapper_Impl& m_rDMapper_Impl;
+ CellSequencePointer_t m_pCellSeq;
+ RowSequencePointer_t m_pRowSeq;
+ TableSequencePointer_t m_pTableSeq;
+
+ Handle_t m_xTableRange;
+
+ // properties
+ PropertyMapVector2 m_aCellProperties;
+ PropertyMapVector1 m_aRowProperties;
+ TablePropertyMapPtr m_aTableProperties;
+
+ sal_Int32 m_nCellIndex;
+ sal_Int32 m_nRowIndex;
+
+public:
+ typedef boost::shared_ptr<DomainMapperTableHandler> Pointer_t;
+
+ DomainMapperTableHandler(TextReference_t xText, DomainMapper_Impl& rDMapper_Impl);
+ virtual ~DomainMapperTableHandler();
+
+ virtual void startTable(unsigned int nRows, unsigned int nDepth,
+ TablePropertyMapPtr pProps);
+ virtual void endTable();
+ virtual void startRow(unsigned int nCells, TablePropertyMapPtr pProps);
+ virtual void endRow();
+ virtual void startCell(const Handle_t & start, TablePropertyMapPtr pProps);
+ virtual void endCell(const Handle_t & end);
+
+ virtual Handle_t* getTable( )
+ {
+ return &m_xTableRange;
+ };
+};
+
+}}
+
+#endif // INCLUDED_DOMAIN_MAPPER_TABLE_HANDLER_HXX
diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.cxx b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
new file mode 100644
index 000000000000..f49bf9ea93b1
--- /dev/null
+++ b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
@@ -0,0 +1,445 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <DomainMapperTableManager.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <BorderHandler.hxx>
+#include <CellColorHandler.hxx>
+#include <CellMarginHandler.hxx>
+#include <ConversionHelper.hxx>
+#include <MeasureHandler.hxx>
+#include <TDefTableHandler.hxx>
+#include <com/sun/star/text/HoriOrientation.hpp>
+#include <com/sun/star/text/SizeType.hpp>
+#include <com/sun/star/text/TableColumnSeparator.hpp>
+#include <com/sun/star/text/VertOrientation.hpp>
+#include <ooxml/resourceids.hxx>
+#include <doctok/sprmids.hxx>
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+using namespace ::std;
+/*-- 23.04.2007 14:57:49---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+DomainMapperTableManager::DomainMapperTableManager(bool bOOXML) :
+ m_nRow(0),
+ m_nCell(0),
+ m_nCellBorderIndex(0),
+ m_nHeaderRepeat(0),
+ m_nTableWidth(0),
+ m_bOOXML( bOOXML ),
+ m_pTablePropsHandler( new TablePropertiesHandler( bOOXML ) )
+{
+ m_pTablePropsHandler->SetTableManager( this );
+}
+/*-- 23.04.2007 14:57:49---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+DomainMapperTableManager::~DomainMapperTableManager()
+{
+ if ( m_pTablePropsHandler )
+ delete m_pTablePropsHandler, m_pTablePropsHandler = NULL;
+}
+/*-- 23.04.2007 15:25:37---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+bool DomainMapperTableManager::sprm(Sprm & rSprm)
+{
+ bool bRet = DomainMapperTableManager_Base_t::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.get() != NULL) ? pValue->getInt() : 0);
+ switch ( nSprmId )
+ {
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case 0xf661: //sprmTTRLeft left table indent
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case 0xf614: // sprmTTPreferredWidth - preferred table width
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case NS_ooxml::LN_CT_TblPrBase_tblW: //90722;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case NS_ooxml::LN_CT_TblPrBase_tblInd: //90725
+ {
+ //contains unit and value
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ { //contains attributes x2902 (LN_unit) and x17e2 (LN_trleft)
+ MeasureHandlerPtr pMeasureHandler( new MeasureHandler );
+ pProperties->resolve(*pMeasureHandler);
+ TablePropertyMapPtr pPropMap( new TablePropertyMap );
+ if( nSprmId == 0xf661 || 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, m_nTableWidth );
+ }
+ insertTableProps(pPropMap);
+ }
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case 0x3404:// sprmTTableHeader
+ case NS_ooxml::LN_CT_TrPrBase_tblHeader: //90704
+ // 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 >= 0 )
+ {
+ ++m_nHeaderRepeat;
+ TablePropertyMapPtr pPropMap( new TablePropertyMap );
+ pPropMap->Insert( PROP_HEADER_ROW_COUNT, false, uno::makeAny( m_nHeaderRepeat ));
+ insertTableProps(pPropMap);
+ }
+ else
+ m_nHeaderRepeat = -1;
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case 0xd608: // TDefTable
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ TDefTableHandlerPtr pTDefTableHandler( new TDefTableHandler(m_bOOXML) );
+ pProperties->resolve( *pTDefTableHandler );
+
+ TablePropertyMapPtr pRowPropMap( new TablePropertyMap );
+ pRowPropMap->insert( pTDefTableHandler->getRowProperties() );
+ insertRowProps( pRowPropMap );
+ if( !m_nTableWidth )
+ {
+ m_nTableWidth= pTDefTableHandler->getTableWidth();
+ if( m_nTableWidth )
+ {
+ TablePropertyMapPtr pPropMap( new TablePropertyMap );
+ pPropMap->setValue( TablePropertyMap::TABLE_WIDTH, m_nTableWidth );
+ insertTableProps(pPropMap);
+ }
+ }
+ for( size_t nCell = 0; nCell < pTDefTableHandler->getCellCount(); ++nCell )
+ {
+ TablePropertyMapPtr pCellPropMap( new TablePropertyMap );
+ pTDefTableHandler->fillCellProperties( nCell, pCellPropMap );
+ cellPropsByCell( nCell, pCellPropMap );
+ }
+ }
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case 0xD605: // sprmTTableBorders
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ BorderHandlerPtr pBorderHandler( new BorderHandler(m_bOOXML) );
+ pProperties->resolve(*pBorderHandler);
+ TablePropertyMapPtr pCellPropMap( new TablePropertyMap() );
+ pCellPropMap->insert( pBorderHandler->getProperties() );
+ cellPropsByCell( m_nCellBorderIndex, pCellPropMap );
+ ++m_nCellBorderIndex;
+ }
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ case 0xd632 : //sprmTNewSpacing
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ case 0xd634 : //sprmTNewSpacing
+ //TODO: sprms contain default (TNew) and actual border spacing of cells - not resolvable yet
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ case 0xd613: //sprmTGridLineProps
+ // TODO: needs a handler
+ /*contains:
+ GridLineProps">
+ rtf:LINEPROPSTOP
+ rtf:LINEPROPSLEFT
+ rtf:LINEPROPSBOTTOM
+ rtf:LINEPROPSRIGHT
+ rtf:LINEPROPSHORIZONTAL
+ rtf:LINEPROPSVERTICAL
+ rtf:LINECOLOR
+ rtf:LINEWIDTH
+ rtf:LINETYPE
+
+ */
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ case 0x740a : //sprmTTlp
+ //TODO: Table look specifier
+ break;
+ case 0x6816 : //unknown
+ case 0x3466 : //unknown
+ case 0x3615 : //unknown
+ case 0x646b : //unknown - expandable sprm - see ww8scan.cxx
+ case 0x7479 : //unknown
+ case 0xf617 : //unknown
+ case 0xf618 : //unknown
+ bRet = false;
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case NS_ooxml::LN_CT_TblPrBase_tblStyle: //table style name
+ {
+ m_sTableStyleName = pValue->getString();
+ TablePropertyMapPtr pPropMap( new TablePropertyMap );
+ pPropMap->Insert( META_PROP_TABLE_STYLE_NAME, false, uno::makeAny( m_sTableStyleName ));
+ insertTableProps(pPropMap);
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case NS_ooxml::LN_CT_TblGridBase_gridCol:
+ {
+ getCurrentGrid()->push_back( ConversionHelper::convertTwipToMM100( nIntValue ) );
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ 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, false, uno::makeAny( bool( sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_ST_Merge_restart )) );
+ cellProps( pMergeProps);
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case NS_ooxml::LN_CT_TcPrBase_gridSpan: //number of grid positions spanned by this cell
+ {
+#if DEBUG
+ clog << "GridSpan: " << nIntValue << endl;
+#endif
+ //the cell width is determined by its position in the table grid
+ //it takes 'gridSpan' grid elements
+ IntVectorPtr pCurrentSpans = getCurrentSpans( );
+ if( pCurrentSpans->size() < m_nCell)
+ {
+ //fill missing elements with '1'
+ pCurrentSpans->insert( pCurrentSpans->end(), m_nCell - pCurrentSpans->size(), 1 );
+ }
+ pCurrentSpans->push_back( nIntValue );
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ case NS_ooxml::LN_CT_TblPrBase_tblLook:
+ break; //todo: table look specifier
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_TcPrBase_tcW:
+ break; //fixed column width is not supported
+ case NS_ooxml::LN_CT_TrPrBase_cnfStyle:
+ {
+ TablePropertyMapPtr pProps( new TablePropertyMap );
+ pProps->Insert( PROP_CNF_STYLE, true, uno::makeAny( pValue->getString( ) ) );
+ insertRowProps( pProps );
+ }
+ break;
+ case NS_ooxml::LN_CT_PPrBase_cnfStyle:
+ // TODO cnfStyle on a paragraph
+ break;
+ case NS_ooxml::LN_CT_TcPrBase_cnfStyle:
+ {
+ TablePropertyMapPtr pProps( new TablePropertyMap );
+ pProps->Insert( PROP_CNF_STYLE, true, uno::makeAny( pValue->getString( ) ) );
+ cellProps( pProps );
+ }
+ break;
+ case NS_ooxml::LN_tblStart:
+ {
+ startLevel( );
+ }
+ break;
+ default:
+ bRet = false;
+ }
+ }
+ return bRet;
+}
+
+boost::shared_ptr< vector<sal_Int32> > DomainMapperTableManager::getCurrentGrid( )
+{
+ return m_aTableGrid.back( );
+}
+
+boost::shared_ptr< vector< sal_Int32 > > DomainMapperTableManager::getCurrentSpans( )
+{
+ return m_aGridSpans.back( );
+}
+
+void DomainMapperTableManager::startLevel( )
+{
+ DomainMapperTableManager_Base_t::startLevel( );
+
+ IntVectorPtr pNewGrid( new vector<sal_Int32> );
+ IntVectorPtr pNewSpans( new vector<sal_Int32> );
+ m_aTableGrid.push_back( pNewGrid );
+ m_aGridSpans.push_back( pNewSpans );
+ m_nTableWidth = 0;
+}
+
+void DomainMapperTableManager::endLevel( )
+{
+ m_aTableGrid.pop_back( );
+ m_aGridSpans.pop_back( );
+
+ DomainMapperTableManager_Base_t::endLevel( );
+}
+
+/*-- 02.05.2007 14:36:26---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapperTableManager::endOfCellAction()
+{
+ ++m_nCell;
+}
+/*-- 02.05.2007 14:36:26---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapperTableManager::endOfRowAction()
+{
+ IntVectorPtr pTableGrid = getCurrentGrid( );
+ if(!m_nTableWidth && pTableGrid->size())
+ {
+ ::std::vector<sal_Int32>::const_iterator aCellIter = pTableGrid->begin();
+ while( aCellIter != pTableGrid->end() )
+ m_nTableWidth += *aCellIter++;
+ if( m_nTableWidth > 0)
+ {
+ TablePropertyMapPtr pPropMap( new TablePropertyMap );
+// pPropMap->Insert( PROP_WIDTH, false, uno::makeAny( m_nTableWidth ));
+ pPropMap->setValue( TablePropertyMap::TABLE_WIDTH, m_nTableWidth );
+ insertTableProps(pPropMap);
+ }
+ }
+
+ IntVectorPtr pCurrentSpans = getCurrentSpans( );
+ if( pCurrentSpans->size() < m_nCell)
+ {
+ //fill missing elements with '1'
+ pCurrentSpans->insert( pCurrentSpans->end( ), m_nCell - pCurrentSpans->size(), 1 );
+ }
+ //calculate number of used grids - it has to match the size of m_aTableGrid
+ size_t nGrids = 0;
+ ::std::vector<sal_Int32>::const_iterator aGridSpanIter = pCurrentSpans->begin();
+ for( ; aGridSpanIter != pCurrentSpans->end(); ++aGridSpanIter)
+ nGrids += *aGridSpanIter;
+
+ if( pTableGrid->size() == nGrids )
+ {
+ //determine table width
+ double nFullWidth = m_nTableWidth;
+ //the positions have to be distibuted in a range of 10000
+ const double nFullWidthRelative = 10000.;
+ uno::Sequence< text::TableColumnSeparator > aSeparators( m_nCell - 1 );
+ text::TableColumnSeparator* pSeparators = aSeparators.getArray();
+ sal_Int16 nLastRelPos = 0;
+ sal_uInt32 nBorderGridIndex = 0;
+
+ ::std::vector< sal_Int32 >::const_iterator aSpansIter = pCurrentSpans->begin( );
+ for( sal_uInt32 nBorder = 0; nBorder < m_nCell - 1; ++nBorder )
+ {
+ sal_Int32 nGridCount = *aSpansIter;
+ double fGridWidth = 0.;
+ do
+ {
+ fGridWidth += (*pTableGrid.get())[nBorderGridIndex++];
+ }while( --nGridCount );
+
+ sal_Int16 nRelPos =
+ sal::static_int_cast< sal_Int16 >(fGridWidth * nFullWidthRelative / nFullWidth );
+
+ pSeparators[nBorder].Position = nRelPos + nLastRelPos;
+ pSeparators[nBorder].IsVisible = sal_True;
+ nLastRelPos = nLastRelPos + nRelPos;
+ aSpansIter++;
+ }
+ TablePropertyMapPtr pPropMap( new TablePropertyMap );
+ pPropMap->Insert( PROP_TABLE_COLUMN_SEPARATORS, false, uno::makeAny( aSeparators ) );
+ insertRowProps(pPropMap);
+ }
+
+ ++m_nRow;
+ m_nCell = 0;
+ m_nCellBorderIndex = 0;
+ pCurrentSpans->clear();
+}
+/*-- 18.06.2007 10:34:37---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapperTableManager::clearData()
+{
+ m_nRow = m_nCell = m_nCellBorderIndex = m_nHeaderRepeat = m_nTableWidth = 0;
+ m_sTableStyleName = ::rtl::OUString();
+ m_pTableStyleTextProperies.reset();
+}
+/*-- 27.06.2007 14:19:50---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void lcl_CopyTextProperties(PropertyMapPtr pToFill,
+ const StyleSheetEntry* pStyleSheetEntry, StyleSheetTablePtr pStyleSheetTable)
+{
+ if( !pStyleSheetEntry )
+ return;
+ //fill base style properties first, recursively
+ if( pStyleSheetEntry->sBaseStyleIdentifier.getLength())
+ {
+ const StyleSheetEntryPtr pParentStyleSheet =
+ pStyleSheetTable->FindStyleSheetByISTD(pStyleSheetEntry->sBaseStyleIdentifier);
+ OSL_ENSURE( pParentStyleSheet, "table style not found" );
+ lcl_CopyTextProperties( pToFill, pParentStyleSheet.get( ), pStyleSheetTable);
+ }
+
+ PropertyMap::const_iterator aPropIter = pStyleSheetEntry->pProperties->begin();
+ while(aPropIter != pStyleSheetEntry->pProperties->end())
+ {
+ //copy all text properties form the table style to the current run attributes
+ if( aPropIter->first.bIsTextProperty )
+ pToFill->insert(*aPropIter);
+ ++aPropIter;
+ }
+}
+void DomainMapperTableManager::CopyTextProperties(PropertyMapPtr pContext, StyleSheetTablePtr pStyleSheetTable)
+{
+ if( !m_pTableStyleTextProperies.get())
+ {
+ m_pTableStyleTextProperies.reset( new PropertyMap );
+ const StyleSheetEntryPtr pStyleSheetEntry = pStyleSheetTable->FindStyleSheetByISTD(
+ m_sTableStyleName);
+ OSL_ENSURE( pStyleSheetEntry, "table style not found" );
+ lcl_CopyTextProperties(m_pTableStyleTextProperies, pStyleSheetEntry.get( ), pStyleSheetTable);
+ }
+ pContext->insert( m_pTableStyleTextProperies );
+}
+}}
diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.hxx b/writerfilter/source/dmapper/DomainMapperTableManager.hxx
new file mode 100644
index 000000000000..3d1e7f66effa
--- /dev/null
+++ b/writerfilter/source/dmapper/DomainMapperTableManager.hxx
@@ -0,0 +1,121 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_DOMAIN_MAPPER_TABLE_MANAGER_HXX
+#define INCLUDED_DOMAIN_MAPPER_TABLE_MANAGER_HXX
+
+#include "TablePropertiesHandler.hxx"
+
+#include <resourcemodel/TableManager.hxx>
+#include <PropertyMap.hxx>
+#include <StyleSheetTable.hxx>
+#include <com/sun/star/text/XTextRange.hpp>
+#include <vector>
+
+namespace writerfilter {
+namespace dmapper {
+
+class DomainMapperTableManager : public DomainMapperTableManager_Base_t
+{
+ typedef boost::shared_ptr< std::vector<sal_Int32> > IntVectorPtr;
+
+ sal_uInt32 m_nRow;
+ sal_uInt32 m_nCell;
+ sal_uInt32 m_nCellBorderIndex; //borders are provided for all cells and need counting
+ 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
+ bool m_bOOXML;
+ ::rtl::OUString m_sTableStyleName;
+ PropertyMapPtr m_pTableStyleTextProperies;
+
+ ::std::vector< IntVectorPtr > m_aTableGrid;
+ ::std::vector< IntVectorPtr > m_aGridSpans;
+
+ TablePropertiesHandler *m_pTablePropsHandler;
+ PropertyMapPtr m_pStyleProps;
+
+ virtual void clearData();
+
+public:
+
+ DomainMapperTableManager(bool bOOXML);
+ virtual ~DomainMapperTableManager();
+
+ // use this method to avoid adding the properties for the table
+ // but in the provided properties map.
+ inline void SetStyleProperties( PropertyMapPtr pProperties ) { m_pStyleProps = pProperties; };
+
+ virtual bool sprm(Sprm & rSprm);
+
+ virtual void startLevel( );
+ virtual void endLevel( );
+
+ virtual void endOfCellAction();
+ virtual void endOfRowAction();
+
+ IntVectorPtr getCurrentGrid( );
+ IntVectorPtr getCurrentSpans( );
+
+ const ::rtl::OUString& getTableStyleName() const { return m_sTableStyleName; }
+ /// copy the text properties of the table style and its parent into pContext
+ void CopyTextProperties(PropertyMapPtr pContext, StyleSheetTablePtr pStyleSheetTable);
+
+ inline virtual void cellProps(TablePropertyMapPtr pProps)
+ {
+ if ( m_pStyleProps.get( ) )
+ m_pStyleProps->insert( pProps, true );
+ else
+ DomainMapperTableManager_Base_t::cellProps( pProps );
+ };
+
+ inline virtual void cellPropsByCell(unsigned int i, TablePropertyMapPtr pProps)
+ {
+ if ( m_pStyleProps.get( ) )
+ m_pStyleProps->insert( pProps, true );
+ else
+ DomainMapperTableManager_Base_t::cellPropsByCell( i, pProps );
+ };
+
+ inline virtual void insertRowProps(TablePropertyMapPtr pProps)
+ {
+ if ( m_pStyleProps.get( ) )
+ m_pStyleProps->insert( pProps, true );
+ else
+ DomainMapperTableManager_Base_t::insertRowProps( pProps );
+ };
+
+ inline virtual void insertTableProps(TablePropertyMapPtr pProps)
+ {
+ if ( m_pStyleProps.get( ) )
+ m_pStyleProps->insert( pProps, true );
+ else
+ DomainMapperTableManager_Base_t::insertTableProps( pProps );
+ };
+};
+
+}}
+
+#endif // INCLUDED_DOMAIN_MAPPER_TABLE_MANAGER_HXX
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
new file mode 100644
index 000000000000..596682cf9b46
--- /dev/null
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -0,0 +1,3722 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <DomainMapper_Impl.hxx>
+#include <ConversionHelper.hxx>
+#include <DomainMapperTableHandler.hxx>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/graphic/XGraphic.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/beans/XPropertyState.hpp>
+#include <com/sun/star/container/XIndexReplace.hpp>
+#include <com/sun/star/container/XNamed.hpp>
+#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
+#include <com/sun/star/drawing/XShapes.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
+#include <com/sun/star/style/LineNumberPosition.hpp>
+#include <com/sun/star/style/NumberingType.hpp>
+#include <com/sun/star/drawing/XShape.hpp>
+#include <com/sun/star/table/BorderLine.hpp>
+#include <com/sun/star/text/ChapterFormat.hpp>
+#include <com/sun/star/text/FilenameDisplayFormat.hpp>
+#include <com/sun/star/text/UserDataPart.hpp>
+#include <com/sun/star/text/SetVariableType.hpp>
+#include <com/sun/star/text/XFootnote.hpp>
+#include <com/sun/star/text/XLineNumberingProperties.hpp>
+#include <com/sun/star/text/PageNumberType.hpp>
+#include <com/sun/star/text/RelOrientation.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/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/XTextAppendAndConvert.hpp>
+#include <com/sun/star/text/XTextCopy.hpp>
+#include <com/sun/star/text/XTextField.hpp>
+#include <com/sun/star/text/XTextFieldsSupplier.hpp>
+#include <com/sun/star/style/DropCapFormat.hpp>
+#include <com/sun/star/util/DateTime.hpp>
+#include <com/sun/star/util/XNumberFormatsSupplier.hpp>
+#include <com/sun/star/util/XNumberFormats.hpp>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/string.h>
+
+#include <tools/string.hxx>
+#ifdef DEBUG_DOMAINMAPPER
+#include <resourcemodel/QNameToString.hxx>
+#include <resourcemodel/util.hxx>
+#endif
+#include <ooxml/OOXMLFastTokens.hxx>
+
+#if DEBUG
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#endif
+
+#include <map>
+
+using namespace ::com::sun::star;
+using namespace ::rtl;
+namespace writerfilter {
+namespace dmapper{
+/*-- 08.09.2006 09:39:50---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+//defaultswitch { Upper FirstCap Lower }
+//Numberingswitch { Arabic, ALPHABETIC, ...} see lcl_ParseNumberingType
+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
+ /* 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
+ /* 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
+ todo: not yet supported
+ */
+ ,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 upporterd
+ */
+ ,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
+ /* REF targetbkm \f \* MERGEFORMAT ->
+ imports a ShowVariable (bookmarkname)?
+ \h hyerlink to paragraph
+ \p relative to para above/below
+ \f refenence number
+ \d separator number separator
+ \n paragraph number
+ \r paragraph number in relative context
+ \t suppres 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, sucah 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 contens 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
+};
+struct FieldConversion
+{
+ ::rtl::OUString sWordCommand;
+ const sal_Char* cFieldServiceName;
+ const sal_Char* cFieldMasterServiceName;
+ FieldId eFieldId;
+};
+
+typedef ::std::map< ::rtl::OUString, FieldConversion>
+ FieldConversionMap_t;
+
+/*-- 18.07.2006 08:56:55---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Int32 FIB::GetData( Id nName )
+{
+ if( nName >= NS_rtf::LN_WIDENT && nName <= NS_rtf::LN_LCBSTTBFUSSR)
+ return aFIBData[nName - NS_rtf::LN_WIDENT];
+ OSL_ENSURE( false, "invalid index in FIB");
+ return -1;
+}
+/*-- 18.07.2006 08:56:55---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FIB::SetData( Id nName, sal_Int32 nValue )
+{
+ OSL_ENSURE( nName >= NS_rtf::LN_WIDENT && nName <= NS_rtf::LN_LCBSTTBFUSSR, "invalid index in FIB");
+ if( nName >= NS_rtf::LN_WIDENT && nName <= NS_rtf::LN_LCBSTTBFUSSR)
+ aFIBData[nName - NS_rtf::LN_WIDENT] = nValue;
+}
+/*-- 01.09.2006 10:22:03---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+DomainMapper_Impl::DomainMapper_Impl(
+ DomainMapper& rDMapper,
+ uno::Reference < uno::XComponentContext > xContext,
+ uno::Reference< lang::XComponent > xModel,
+ SourceDocumentType eDocumentType) :
+ m_eDocumentType( eDocumentType ),
+ m_rDMapper( rDMapper ),
+ m_xTextDocument( xModel, uno::UNO_QUERY ),
+ m_xTextFactory( xModel, uno::UNO_QUERY ),
+ m_xComponentContext( xContext ),
+ m_bFieldMode( false ),
+ m_bSetUserFieldContent( false ),
+ m_bIsFirstSection( true ),
+ m_bIsColumnBreakDeferred( false ),
+ m_bIsPageBreakDeferred( false ),
+ m_bIsInShape( false ),
+ m_bShapeContextAdded( false ),
+ m_TableManager( eDocumentType == DOCUMENT_OOXML ),
+ m_nCurrentTabStopIndex( 0 ),
+ m_sCurrentParaStyleId(),
+ m_bInStyleSheetImport( false ),
+ m_bInAnyTableImport( false ),
+ m_bLineNumberingSet( false ),
+ m_bIsInFootnoteProperties( true ),
+ m_bIsCustomFtnMark( false ),
+ m_bIsParaChange( false )
+{
+ GetBodyText();
+ uno::Reference< text::XTextAppend > xBodyTextAppend = uno::Reference< text::XTextAppend >( m_xBodyText, uno::UNO_QUERY );
+ m_aTextAppendStack.push(xBodyTextAppend);
+
+ //todo: does it make sense to set the body text as static text interface?
+ uno::Reference< text::XTextAppendAndConvert > xBodyTextAppendAndConvert( m_xBodyText, uno::UNO_QUERY );
+ TableDataHandler_t::Pointer_t pTableHandler
+ (new DomainMapperTableHandler(xBodyTextAppendAndConvert, *this));
+ m_TableManager.setHandler(pTableHandler);
+
+ m_TableManager.startLevel();
+}
+/*-- 01.09.2006 10:22:28---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+DomainMapper_Impl::~DomainMapper_Impl()
+{
+ m_TableManager.endLevel();
+}
+/*-------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< container::XNameContainer > DomainMapper_Impl::GetPageStyles()
+{
+ if(!m_xPageStyles.is())
+ {
+ uno::Reference< style::XStyleFamiliesSupplier > xSupplier( m_xTextDocument, uno::UNO_QUERY );
+ xSupplier->getStyleFamilies()->getByName(::rtl::OUString::createFromAscii("PageStyles")) >>= m_xPageStyles;
+ }
+ return m_xPageStyles;
+}
+/*-------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< text::XText > DomainMapper_Impl::GetBodyText()
+{
+ if(!m_xBodyText.is() && m_xTextDocument.is())
+ {
+ m_xBodyText = m_xTextDocument->getText();
+ }
+ return m_xBodyText;
+}
+/*-- 21.12.2006 12:09:30---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< beans::XPropertySet > DomainMapper_Impl::GetDocumentSettings()
+{
+ if( !m_xDocumentSettings.is() )
+ {
+ m_xDocumentSettings = uno::Reference< beans::XPropertySet >(
+ m_xTextFactory->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.Settings"))), uno::UNO_QUERY );
+ }
+ return m_xDocumentSettings;
+}
+/*-- 21.12.2006 12:16:23---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::SetDocumentSettingsProperty( const ::rtl::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::PushProperties(ContextType eId)
+{
+ SectionPropertyMap* pSectionContext = 0;
+ PropertyMapPtr pInsert(eId == CONTEXT_SECTION ?
+ (pSectionContext = 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() );
+ uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
+ if(xTextAppend.is())
+ pSectionContext_->SetStart( xTextAppend->getEnd() );
+ }
+ m_aPropertyStacks[eId].push( pInsert );
+ m_aContextStack.push(eId);
+
+ m_pTopContext = m_aPropertyStacks[eId].top();
+}
+/*-- 13.06.2007 16:18:18---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PushStyleProperties( PropertyMapPtr pStyleProperties )
+{
+ m_aPropertyStacks[CONTEXT_STYLESHEET].push( pStyleProperties );
+ m_aContextStack.push(CONTEXT_STYLESHEET);
+
+ m_pTopContext = m_aPropertyStacks[CONTEXT_STYLESHEET].top();
+}
+/*-- 28.01.2008 14:47:46---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PushListProperties(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");
+ 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.reset();
+ }
+}
+/*-------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+PropertyMapPtr DomainMapper_Impl::GetTopContextOfType(ContextType eId)
+{
+ PropertyMapPtr pRet;
+ OSL_ENSURE( !m_aPropertyStacks[eId].empty(),
+ "no context of this type available");
+ if(!m_aPropertyStacks[eId].empty())
+ pRet = m_aPropertyStacks[eId].top();
+ return pRet;
+}
+
+/*-- 24.05.2007 15:54:51---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< text::XTextAppend > DomainMapper_Impl::GetTopTextAppend()
+{
+ OSL_ENSURE(!m_aTextAppendStack.empty(), "text append stack is empty" );
+ return m_aTextAppendStack.top().xTextAppend;
+}
+
+/*-- 17.07.2006 08:47:04---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::InitTabStopFromStyle( const uno::Sequence< style::TabStop >& rInitTabStops )
+{
+ OSL_ENSURE(!m_aCurrentTabStops.size(), "tab stops already initialized");
+ for( sal_Int32 nTab = 0; nTab < rInitTabStops.getLength(); ++nTab)
+ {
+ m_aCurrentTabStops.push_back( DeletableTabStop(rInitTabStops[nTab]) );
+ }
+}
+
+/*-- 29.06.2006 13:35:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::ModifyCurrentTabStop( Id nId, sal_Int32 nValue)
+{
+ OSL_ENSURE(nId == NS_rtf::LN_dxaAdd || m_nCurrentTabStopIndex < m_aCurrentTabStops.size(),
+ "tab stop creation error");
+
+ if( nId != NS_rtf::LN_dxaAdd && m_nCurrentTabStopIndex >= m_aCurrentTabStops.size())
+ return;
+ static const style::TabAlign aTabAlignFromWord[] =
+ {
+ style::TabAlign_LEFT,
+ style::TabAlign_CENTER,
+ style::TabAlign_RIGHT,
+ style::TabAlign_DECIMAL,
+ style::TabAlign_LEFT
+ };
+ static const sal_Unicode aTabFillCharWord[] =
+ {
+ ' ',
+ '.',
+ '-',
+ '_',
+ '_',
+ 0xb7
+ };
+
+ switch(nId)
+ {
+ case NS_rtf::LN_dxaAdd: //set tab
+ m_aCurrentTabStops.push_back(
+ DeletableTabStop(style::TabStop(ConversionHelper::convertTwipToMM100(nValue), style::TabAlign_LEFT, ' ', ' ')));
+ break;
+ case NS_rtf::LN_dxaDel: //deleted tab
+ {
+ //mark the tab stop at the given position as deleted
+ ::std::vector<DeletableTabStop>::iterator aIt = m_aCurrentTabStops.begin();
+ ::std::vector<DeletableTabStop>::iterator aEndIt = m_aCurrentTabStops.end();
+ sal_Int32 nConverted = ConversionHelper::convertTwipToMM100(nValue);
+ for( ; aIt != aEndIt; ++aIt)
+ {
+ if( aIt->Position == nConverted )
+ {
+ aIt->bDeleted = true;
+ break;
+ }
+ }
+ }
+ break;
+ case NS_rtf::LN_TLC: //tab leading characters - for decimal tabs
+ // 0 - no leader, 1- dotted, 2 - hyphenated, 3 - single line, 4 - heavy line, 5 - middle dot
+ if( nValue >= 0 && nValue < sal::static_int_cast<sal_Int32>(sizeof(aTabFillCharWord) / sizeof (sal_Unicode)))
+ m_aCurrentTabStops[m_nCurrentTabStopIndex].FillChar = aTabFillCharWord[nValue];
+ break;
+ case NS_rtf::LN_JC: //tab justification
+ //0 - left, 1 - centered, 2 - right, 3 - decimal 4 - bar
+ if( nValue >= 0 && nValue < sal::static_int_cast<sal_Int32>(sizeof(aTabAlignFromWord) / sizeof (style::TabAlign)))
+ m_aCurrentTabStops[m_nCurrentTabStopIndex].Alignment = aTabAlignFromWord[nValue];
+ break;
+ }
+}
+
+void DomainMapper_Impl::IncorporateTabStop( const DeletableTabStop & rTabStop )
+{
+ ::std::vector<DeletableTabStop>::iterator aIt = m_aCurrentTabStops.begin();
+ ::std::vector<DeletableTabStop>::iterator aEndIt = m_aCurrentTabStops.end();
+ sal_Int32 nConverted = rTabStop.Position;
+ bool bFound = false;
+ for( ; aIt != aEndIt; ++aIt)
+ {
+ if( aIt->Position == nConverted )
+ {
+ bFound = true;
+ if( rTabStop.bDeleted )
+ m_aCurrentTabStops.erase( aIt );
+ else
+ *aIt = rTabStop;
+ break;
+ }
+ }
+ if( !bFound )
+ m_aCurrentTabStops.push_back( rTabStop );
+}
+/*-- 29.06.2006 13:35:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Sequence< style::TabStop > DomainMapper_Impl::GetCurrentTabStopAndClear()
+{
+ uno::Sequence< style::TabStop > aRet( m_aCurrentTabStops.size() );
+ style::TabStop* pArray = aRet.getArray();
+ ::std::vector<DeletableTabStop>::const_iterator aIt = m_aCurrentTabStops.begin();
+ ::std::vector<DeletableTabStop>::const_iterator aEndIt = m_aCurrentTabStops.end();
+ sal_Int32 nDeleted = 0;
+ for(sal_Int32 nIndex = 0; aIt != aEndIt; ++aIt)
+ {
+ if(!aIt->bDeleted)
+ pArray[nIndex++] = *aIt;
+ else
+ ++nDeleted;
+ }
+ m_aCurrentTabStops.clear();
+ m_nCurrentTabStopIndex = 0;
+ if(nDeleted)
+ {
+ aRet.realloc( aRet.getLength() - nDeleted);
+ }
+ return aRet;
+}
+
+/*-- 17.07.2006 09:08:26---------------------------------------------------
+ returns a the value from the current paragraph style - if available
+ TODO: What about parent styles?
+ -----------------------------------------------------------------------*/
+uno::Any DomainMapper_Impl::GetPropertyFromStyleSheet(PropertyIds eId)
+{
+ StyleSheetEntryPtr pEntry;
+ if( m_bInStyleSheetImport )
+ pEntry = GetStyleSheetTable()->FindParentStyleSheet(::rtl::OUString());
+ else
+ pEntry =
+ GetStyleSheetTable()->FindStyleSheetByISTD(GetCurrentParaStyleId());
+ while(pEntry.get( ) )
+ {
+ //is there a tab stop set?
+ if(pEntry->pProperties)
+ {
+ PropertyMap::const_iterator aPropertyIter =
+ pEntry->pProperties->find(PropertyDefinition(eId, false ));
+ if( aPropertyIter != pEntry->pProperties->end())
+ {
+ return aPropertyIter->second;
+ }
+ }
+ //search until the property is set or no parent is available
+ pEntry = GetStyleSheetTable()->FindParentStyleSheet(pEntry->sBaseStyleIdentifier);
+ }
+ return uno::Any();
+}
+/*-------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ListTablePtr DomainMapper_Impl::GetListTable()
+{
+ if(!m_pListTable)
+ m_pListTable.reset(
+ new ListTable( 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:
+ 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::clearDeferredBreaks()
+{
+ m_bIsColumnBreakDeferred = false;
+ m_bIsPageBreakDeferred = false;
+}
+/*-------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void lcl_MoveBorderPropertiesToFrame(uno::Sequence<beans::PropertyValue>& rFrameProperties,
+ uno::Reference<text::XTextRange> xStartTextRange,
+ uno::Reference<text::XTextRange> xEndTextRange )
+{
+ try
+ {
+ 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 ;
+
+ PropertyIds 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
+ };
+
+ sal_uInt32 nStart = rFrameProperties.getLength();
+ sal_uInt32 nBorderPropertyCount = sizeof( aBorderProperties ) / sizeof(PropertyIds);
+ rFrameProperties.realloc(nStart + nBorderPropertyCount);
+
+ beans::PropertyValue* pFrameProperties = rFrameProperties.getArray();
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ for( sal_uInt32 nProperty = 0; nProperty < nBorderPropertyCount; ++nProperty)
+ {
+ ::rtl::OUString sPropertyName = rPropNameSupplier.GetName(aBorderProperties[nProperty]);
+ pFrameProperties[nStart].Name = sPropertyName;
+ pFrameProperties[nStart].Value = xTextRangeProperties->getPropertyValue(sPropertyName);
+ if( nProperty < 4 )
+ xTextRangeProperties->setPropertyValue( sPropertyName, uno::makeAny(table::BorderLine()));
+ ++nStart;
+ }
+ rFrameProperties.realloc(nStart);
+ }
+ catch( const uno::Exception& rEx )
+ {
+ (void)rEx;
+ }
+}
+/*-- 04.01.2008 10:59:19---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void lcl_AddRangeAndStyle(
+ ParagraphPropertiesPtr& pToBeSavedProperties,
+ uno::Reference< text::XTextAppend > xTextAppend,
+ PropertyMapPtr pPropertyMap)
+{
+ uno::Reference<text::XParagraphCursor> xParaCursor(
+ xTextAppend->createTextCursorByRange( xTextAppend->getEnd()), uno::UNO_QUERY_THROW );
+ pToBeSavedProperties->SetEndingRange(xParaCursor->getStart());
+ xParaCursor->gotoStartOfParagraph( false );
+
+ pToBeSavedProperties->SetStartingRange(xParaCursor->getStart());
+ if(pPropertyMap)
+ {
+ PropertyMap::iterator aParaStyleIter = pPropertyMap->find(PropertyDefinition( PROP_PARA_STYLE_NAME, false ) );
+ if( aParaStyleIter != pPropertyMap->end())
+ {
+ ::rtl::OUString sName;
+ aParaStyleIter->second >>= sName;
+ pToBeSavedProperties->SetParaStyleName(sName);
+ }
+ }
+}
+/*-------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+//define some default frame width - 0cm ATM: this allow the frame to be wrapped around the text
+#define DEFAULT_FRAME_MIN_WIDTH 0
+
+void DomainMapper_Impl::finishParagraph( PropertyMapPtr pPropertyMap )
+{
+#if DEBUG
+ clog << "finishParagraph" << endl;
+#endif
+
+ ParagraphPropertyMap* pParaContext = dynamic_cast< ParagraphPropertyMap* >( pPropertyMap.get() );
+ TextAppendContext& rAppendContext = m_aTextAppendStack.top();
+ uno::Reference< text::XTextAppend > xTextAppend = rAppendContext.xTextAppend;
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ if(xTextAppend.is() && ! m_TableManager.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_wordprocessingml_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(rPropNameSupplier.GetName(PROP_CHAR_ESCAPEMENT));
+ xParaProperties->setPropertyToDefault(rPropNameSupplier.GetName(PROP_CHAR_HEIGHT));
+ //handles (2) and part of (6)
+ pToBeSavedProperties.reset( new ParagraphProperties(*pParaContext) );
+ sal_Int32 nCount = xParaCursor->getString().getLength();
+ pToBeSavedProperties->SetDropCapLength(nCount > 0 && nCount < 255 ? (sal_Int8)nCount : 1);
+ }
+ if( rAppendContext.pLastParagraphProperties.get() )
+ {
+ if( sal::static_int_cast<Id>(rAppendContext.pLastParagraphProperties->GetDropCap()) != NS_ooxml::LN_Value_wordprocessingml_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 < 254 ? (sal_Int8)++nLines : 2;
+ aDrop.Count = rAppendContext.pLastParagraphProperties->GetDropCapLength();
+ aDrop.Distance = 0; //TODO: find distance value
+ //completes (5)
+ if( pParaContext->IsFrameMode() )
+ pToBeSavedProperties.reset( new ParagraphProperties(*pParaContext) );
+ }
+ else if(*rAppendContext.pLastParagraphProperties == *pParaContext )
+ {
+ //handles (7)
+ rAppendContext.pLastParagraphProperties->SetEndingRange(xTextAppend->getEnd());
+ bKeepLastParagraphProperties = true;
+ }
+ else
+ {
+ //handles (8)(9) and completes (6)
+ try
+ {
+ //
+ StyleSheetEntryPtr pParaStyle =
+ m_pStyleSheetTable->FindStyleSheetByConvertedStyleName(rAppendContext.pLastParagraphProperties->GetParaStyleName());
+
+ uno::Sequence< beans::PropertyValue > aFrameProperties(pParaStyle ? 15: 0);
+ if ( pParaStyle.get( ) )
+ {
+ const ParagraphProperties* pStyleProperties = dynamic_cast<const ParagraphProperties*>( pParaStyle->pProperties.get() );
+ beans::PropertyValue* pFrameProperties = aFrameProperties.getArray();
+ pFrameProperties[0].Name = rPropNameSupplier.GetName(PROP_WIDTH);
+ pFrameProperties[1].Name = rPropNameSupplier.GetName(PROP_HEIGHT);
+ pFrameProperties[2].Name = rPropNameSupplier.GetName(PROP_SIZE_TYPE);
+ pFrameProperties[3].Name = rPropNameSupplier.GetName(PROP_WIDTH_TYPE);
+ pFrameProperties[4].Name = rPropNameSupplier.GetName(PROP_HORI_ORIENT);
+ pFrameProperties[5].Name = rPropNameSupplier.GetName(PROP_HORI_ORIENT_POSITION);
+ pFrameProperties[6].Name = rPropNameSupplier.GetName(PROP_HORI_ORIENT_RELATION);
+ pFrameProperties[7].Name = rPropNameSupplier.GetName(PROP_VERT_ORIENT);
+ pFrameProperties[8].Name = rPropNameSupplier.GetName(PROP_VERT_ORIENT_POSITION);
+ pFrameProperties[9].Name = rPropNameSupplier.GetName(PROP_VERT_ORIENT_RELATION);
+ pFrameProperties[10].Name = rPropNameSupplier.GetName(PROP_SURROUND);
+ pFrameProperties[11].Name = rPropNameSupplier.GetName(PROP_LEFT_MARGIN);
+ pFrameProperties[12].Name = rPropNameSupplier.GetName(PROP_RIGHT_MARGIN);
+ pFrameProperties[13].Name = rPropNameSupplier.GetName(PROP_TOP_MARGIN);
+ pFrameProperties[14].Name = rPropNameSupplier.GetName(PROP_BOTTOM_MARGIN);
+ sal_Int32 nWidth =
+ rAppendContext.pLastParagraphProperties->Getw() > 0 ?
+ rAppendContext.pLastParagraphProperties->Getw() :
+ pStyleProperties->Getw();
+ bool bAutoWidth = nWidth < 1;
+ if( bAutoWidth )
+ nWidth = DEFAULT_FRAME_MIN_WIDTH;
+ pFrameProperties[0].Value <<= nWidth;
+ pFrameProperties[1].Value <<=
+ rAppendContext.pLastParagraphProperties->Geth() > 0 ?
+ rAppendContext.pLastParagraphProperties->Geth() :
+ pStyleProperties->Geth();
+ pFrameProperties[2].Value <<= sal_Int16(
+ rAppendContext.pLastParagraphProperties->GethRule() >= 0 ?
+ rAppendContext.pLastParagraphProperties->GethRule() :
+ pStyleProperties->GethRule() >=0 ? pStyleProperties->GethRule() : text::SizeType::VARIABLE);
+
+ pFrameProperties[3].Value <<= bAutoWidth ? text::SizeType::MIN : text::SizeType::FIX;
+
+ sal_Int16 nHoriOrient = sal_Int16(
+ rAppendContext.pLastParagraphProperties->GetxAlign() >= 0 ?
+ rAppendContext.pLastParagraphProperties->GetxAlign() :
+ pStyleProperties->GetxAlign() >= 0 ? pStyleProperties->GetxAlign() : text::HoriOrientation::NONE );
+ pFrameProperties[4].Value <<= nHoriOrient;
+
+ pFrameProperties[5].Value <<=
+ rAppendContext.pLastParagraphProperties->IsxValid() ?
+ rAppendContext.pLastParagraphProperties->Getx() : pStyleProperties->Getx();
+ pFrameProperties[6].Value <<= sal_Int16(
+ rAppendContext.pLastParagraphProperties->GethAnchor() >= 0 ?
+ rAppendContext.pLastParagraphProperties->GethAnchor() :
+ pStyleProperties->GethAnchor() );
+
+ sal_Int16 nVertOrient = sal_Int16(
+ rAppendContext.pLastParagraphProperties->GetyAlign() >= 0 ?
+ rAppendContext.pLastParagraphProperties->GetyAlign() :
+ pStyleProperties->GetyAlign() >= 0 ? pStyleProperties->GetyAlign() : text::VertOrientation::NONE );
+ pFrameProperties[7].Value <<= nVertOrient;
+
+ pFrameProperties[8].Value <<=
+ rAppendContext.pLastParagraphProperties->IsyValid() ?
+ rAppendContext.pLastParagraphProperties->Gety() : pStyleProperties->Gety();
+ pFrameProperties[9].Value <<= sal_Int16(
+ rAppendContext.pLastParagraphProperties->GetvAnchor() >= 0 ?
+ rAppendContext.pLastParagraphProperties->GetvAnchor() :
+ pStyleProperties->GetvAnchor() );
+
+ pFrameProperties[10].Value <<= text::WrapTextMode(
+ rAppendContext.pLastParagraphProperties->GetWrap() >= 0 ?
+ rAppendContext.pLastParagraphProperties->GetWrap() :
+ pStyleProperties->GetWrap());
+
+ sal_Int32 nBottomDist;
+ sal_Int32 nTopDist = nBottomDist =
+ rAppendContext.pLastParagraphProperties->GethSpace() >= 0 ?
+ rAppendContext.pLastParagraphProperties->GethSpace() :
+ pStyleProperties->GethSpace();
+
+ pFrameProperties[11].Value <<= nVertOrient == text::VertOrientation::TOP ? 0 : nTopDist;
+ pFrameProperties[12].Value <<= nVertOrient == text::VertOrientation::BOTTOM ? 0 : nBottomDist;
+
+ sal_Int32 nRightDist;
+ sal_Int32 nLeftDist = nRightDist =
+ rAppendContext.pLastParagraphProperties->GetvSpace() >= 0 ?
+ rAppendContext.pLastParagraphProperties->GetvSpace() :
+ pStyleProperties->GetvSpace() >= 0 ? pStyleProperties->GetvSpace() : 0;
+ pFrameProperties[13].Value <<= nHoriOrient == text::HoriOrientation::LEFT ? 0 : nLeftDist;
+ pFrameProperties[14].Value <<= nHoriOrient == text::HoriOrientation::RIGHT ? 0 : nRightDist;
+
+ 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 );
+ // next frame follows directly
+ if( pParaContext->IsFrameMode() )
+ {
+ pToBeSavedProperties.reset( new ParagraphProperties(*pParaContext) );
+ lcl_AddRangeAndStyle(pToBeSavedProperties, xTextAppend, pPropertyMap);
+ }
+ }
+ catch( const uno::Exception& rEx )
+ {
+ (void)rEx;
+ }
+ }
+
+ }
+ else //
+ {
+ // (1) doesn't need handling
+ //
+ if( !bIsDropCap && pParaContext->IsFrameMode() )
+ {
+ pToBeSavedProperties.reset( new ParagraphProperties(*pParaContext) );
+ lcl_AddRangeAndStyle(pToBeSavedProperties, xTextAppend, pPropertyMap);
+ }
+ }
+ uno::Sequence< beans::PropertyValue > aProperties;
+ if( pPropertyMap.get() )
+ {
+ aProperties = pPropertyMap->GetPropertyValues();
+ }
+ if( !bIsDropCap )
+ {
+ if( aDrop.Lines > 1 )
+ {
+ sal_uInt32 nLength = aProperties.getLength();
+ aProperties.realloc( nLength + 1 );
+ aProperties[nLength].Value <<= aDrop;
+ aProperties[nLength].Name = rPropNameSupplier.GetName(PROP_DROP_CAP_FORMAT);
+ }
+ uno::Reference< text::XTextRange > xTextRange =
+ xTextAppend->finishParagraph( aProperties );
+ m_TableManager.handle(xTextRange);
+
+ // Set the anchor of the objects to the created paragraph
+ while ( m_aAnchoredStack.size( ) > 0 && !m_bIsInShape )
+ {
+ uno::Reference< text::XTextContent > xObj = m_aAnchoredStack.top( );
+ try
+ {
+#if DEBUG
+ rtl::OUString sText( xTextRange->getString( ) );
+#endif
+ xObj->attach( xTextRange );
+ }
+ catch ( uno::RuntimeException& )
+ {
+ // this is normal: the shape is already attached
+ }
+ m_aAnchoredStack.pop( );
+ }
+
+ // Get the end of paragraph character inserted
+ uno::Reference< text::XTextCursor > xCur = xTextRange->getText( )->createTextCursor( );
+ xCur->gotoEnd( false );
+ xCur->goLeft( 1 , true );
+ uno::Reference< text::XTextRange > xParaEnd( xCur, uno::UNO_QUERY );
+ CheckParaRedline( xParaEnd );
+ }
+ if( !bKeepLastParagraphProperties )
+ rAppendContext.pLastParagraphProperties = pToBeSavedProperties;
+ }
+ catch(const lang::IllegalArgumentException& rIllegal)
+ {
+ (void)rIllegal;
+ OSL_ENSURE( false, "IllegalArgumentException in DomainMapper_Impl::finishParagraph" );
+ }
+ catch(const uno::Exception& rEx)
+ {
+ (void)rEx;
+ //OSL_ENSURE( false, "ArgumentException in DomainMapper_Impl::finishParagraph" );
+ }
+ }
+}
+/*-------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+util::DateTime lcl_DateStringToDateTime( const ::rtl::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_THROW(())
+ sal_Int32 nIndex = 0;
+ ::rtl::OUString sDate = rDateTime.getToken( 0, 'T', nIndex );
+ ::rtl::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() );
+ 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() );
+ aDateTime.Seconds = sal_uInt16( sTime.copy( nIndex ).toInt32() );
+
+ return aDateTime;
+}
+void DomainMapper_Impl::appendTextPortion( const ::rtl::OUString& rString, PropertyMapPtr pPropertyMap )
+{
+ uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
+ if(xTextAppend.is() && ! m_TableManager.isIgnore())
+ {
+ try
+ {
+ uno::Reference< text::XTextRange > xTextRange =
+ xTextAppend->appendTextPortion
+ (rString, pPropertyMap->GetPropertyValues());
+ CheckRedline( xTextRange );
+
+ //m_TableManager.handle(xTextRange);
+ }
+ catch(const lang::IllegalArgumentException& rEx)
+ {
+ (void)rEx;
+ OSL_ENSURE( false, "IllegalArgumentException in DomainMapper_Impl::appendTextPortion" );
+ }
+ catch(const uno::Exception& rEx)
+ {
+ (void)rEx;
+ OSL_ENSURE( false, "Exception in DomainMapper_Impl::appendTextPortion" );
+ }
+ }
+}
+/*-- 02.11.2006 12:08:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::appendTextContent(
+ const uno::Reference< text::XTextContent > xContent,
+ const uno::Sequence< beans::PropertyValue > xPropertyValues
+ )
+{
+ 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() && ! m_TableManager.isIgnore())
+ {
+ try
+ {
+ xTextAppendAndConvert->appendTextContent( xContent, xPropertyValues );
+ }
+ catch(const lang::IllegalArgumentException& )
+ {
+ }
+ catch(const uno::Exception& )
+ {
+ }
+ }
+}
+
+/*-- 24.04.2008 08:38:07---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::appendOLE( const ::rtl::OUString& rStreamName, OLEHandlerPtr pOLEHandler )
+{
+ static const rtl::OUString sEmbeddedService(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextEmbeddedObject"));
+ try
+ {
+ uno::Reference< text::XTextContent > xOLE( m_xTextFactory->createInstance(sEmbeddedService), uno::UNO_QUERY_THROW );
+ uno::Reference< beans::XPropertySet > xOLEProperties(xOLE, uno::UNO_QUERY_THROW);
+
+ xOLEProperties->setPropertyValue(PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_STREAM_NAME ),
+ uno::makeAny( rStreamName ));
+ awt::Size aSize = pOLEHandler->getSize();
+ if( !aSize.Width )
+ aSize.Width = 1000;
+ if( !aSize.Height )
+ aSize.Height = 1000;
+ xOLEProperties->setPropertyValue(PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_WIDTH ),
+ uno::makeAny(aSize.Width));
+ xOLEProperties->setPropertyValue(PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_HEIGHT ),
+ uno::makeAny(aSize.Height));
+
+ uno::Reference< graphic::XGraphic > xGraphic = pOLEHandler->getReplacement();
+ xOLEProperties->setPropertyValue(PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_GRAPHIC ),
+ uno::makeAny(xGraphic));
+
+ //
+ appendTextContent( xOLE, uno::Sequence< beans::PropertyValue >() );
+
+ }
+ catch( const uno::Exception& rEx )
+ {
+ (void)rEx;
+ OSL_ENSURE( false, "Exception in creation of OLE object" );
+ }
+
+}
+/*-- 14.12.2006 12:26:00---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< beans::XPropertySet > DomainMapper_Impl::appendTextSectionAfter(
+ uno::Reference< text::XTextRange >& xBefore )
+{
+ uno::Reference< beans::XPropertySet > 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 );
+ xCursor->gotoEnd( true );
+ //the paragraph after this new section is already inserted
+ xCursor->goLeft(1, true);
+ static const rtl::OUString sSectionService(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextSection"));
+ uno::Reference< text::XTextContent > xSection( m_xTextFactory->createInstance(sSectionService), uno::UNO_QUERY_THROW );
+ xSection->attach( uno::Reference< text::XTextRange >( xCursor, uno::UNO_QUERY_THROW) );
+ xRet = uno::Reference< beans::XPropertySet > (xSection, uno::UNO_QUERY );
+ }
+ catch(const uno::Exception& )
+ {
+ }
+
+ }
+
+ return xRet;
+}
+/*-- 02.11.2006 12:08:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PushPageHeader(SectionPropertyMap::PageType eType)
+{
+ //get the section context
+ PropertyMapPtr pContext = DomainMapper_Impl::GetTopContextOfType(CONTEXT_SECTION);
+ //ask for the header name of the given type
+ SectionPropertyMap* pSectionContext = dynamic_cast< SectionPropertyMap* >( pContext.get() );
+ if(pSectionContext)
+ {
+ uno::Reference< beans::XPropertySet > xPageStyle =
+ pSectionContext->GetPageStyle(
+ GetPageStyles(),
+ m_xTextFactory,
+ eType == SectionPropertyMap::PAGE_FIRST );
+ try
+ {
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ //switch on header use
+ xPageStyle->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_HEADER_IS_ON),
+ uno::makeAny(sal_True) );
+ // if a left header is available then header are not shared
+ bool bLeft = eType == SectionPropertyMap::PAGE_LEFT;
+ if( bLeft )
+ xPageStyle->setPropertyValue(rPropNameSupplier.GetName(PROP_HEADER_IS_SHARED), uno::makeAny( false ));
+
+ //set the interface
+ uno::Reference< text::XText > xHeaderText;
+ xPageStyle->getPropertyValue(rPropNameSupplier.GetName( bLeft ? PROP_HEADER_TEXT_LEFT : PROP_HEADER_TEXT) ) >>= xHeaderText;
+ m_aTextAppendStack.push( uno::Reference< text::XTextAppend >( xHeaderText, uno::UNO_QUERY_THROW));
+ }
+ catch( uno::Exception& )
+ {
+ }
+ }
+}
+/*-- 24.07.2006 09:41:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PushPageFooter(SectionPropertyMap::PageType eType)
+{
+ //get the section context
+ PropertyMapPtr pContext = DomainMapper_Impl::GetTopContextOfType(CONTEXT_SECTION);
+ //ask for the footer name of the given type
+ SectionPropertyMap* pSectionContext = dynamic_cast< SectionPropertyMap* >( pContext.get() );
+ if(pSectionContext)
+ {
+ uno::Reference< beans::XPropertySet > xPageStyle =
+ pSectionContext->GetPageStyle(
+ GetPageStyles(),
+ m_xTextFactory,
+ eType == SectionPropertyMap::PAGE_FIRST );
+ try
+ {
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ //switch on footer use
+ xPageStyle->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_FOOTER_IS_ON),
+ uno::makeAny(sal_True) );
+ // if a left header is available then footer is not shared
+ bool bLeft = eType == SectionPropertyMap::PAGE_LEFT;
+ if( bLeft )
+ xPageStyle->setPropertyValue(rPropNameSupplier.GetName(PROP_FOOTER_IS_SHARED), uno::makeAny( false ));
+ //set the interface
+ uno::Reference< text::XText > xFooterText;
+ xPageStyle->getPropertyValue(rPropNameSupplier.GetName( bLeft ? PROP_FOOTER_TEXT_LEFT : PROP_FOOTER_TEXT) ) >>= xFooterText;
+ m_aTextAppendStack.push(uno::Reference< text::XTextAppend >( xFooterText, uno::UNO_QUERY_THROW ));
+ }
+ catch( uno::Exception& )
+ {
+ }
+ }
+}
+/*-- 24.07.2006 09:41:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PopPageHeaderFooter()
+{
+ //header and footer always have an empty paragraph at the end
+ //this has to be removed
+ uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
+ try
+ {
+ uno::Reference< text::XTextCursor > xCursor = xTextAppend->createTextCursor();
+ xCursor->gotoEnd(false);
+ xCursor->goLeft( 1, true );
+ xCursor->setString(::rtl::OUString());
+ }
+ catch( const uno::Exception& rEx)
+ {
+ (void)rEx;
+ }
+ m_aTextAppendStack.pop();
+}
+/*-- 24.05.2007 14:22:28---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PushFootOrEndnote( bool bIsFootnote )
+{
+ try
+ {
+ PropertyMapPtr pTopContext = GetTopContext();
+ uno::Reference< text::XText > xFootnoteText( GetTextFactory()->createInstance(
+ bIsFootnote ?
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.Footnote") ) : ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.Endnote") )),
+ uno::UNO_QUERY_THROW );
+ uno::Reference< text::XFootnote > xFootnote( xFootnoteText, uno::UNO_QUERY_THROW );
+ pTopContext->SetFootnote( xFootnote );
+ if( pTopContext->GetFootnoteSymbol() != 0)
+ {
+ xFootnote->setLabel( ::rtl::OUString( pTopContext->GetFootnoteSymbol() ) );
+ }
+ FontTablePtr pFontTable = GetFontTable();
+ uno::Sequence< beans::PropertyValue > aFontProperties;
+ if( pFontTable && pTopContext->GetFootnoteFontId() >= 0 && pFontTable->size() > (size_t)pTopContext->GetFootnoteFontId() )
+ {
+ const FontEntry* pFontEntry = pFontTable->getFontEntry(sal_uInt32(pTopContext->GetFootnoteFontId()));
+ PropertyMapPtr aFontProps( new PropertyMap );
+ aFontProps->Insert(PROP_CHAR_FONT_NAME, true, uno::makeAny( pFontEntry->sFontName ));
+ aFontProps->Insert(PROP_CHAR_FONT_CHAR_SET, true, uno::makeAny( (sal_Int16)pFontEntry->nTextEncoding ));
+ aFontProps->Insert(PROP_CHAR_FONT_PITCH, true, uno::makeAny( pFontEntry->nPitchRequest ));
+ aFontProperties = aFontProps->GetPropertyValues();
+ }
+ else if(pTopContext->GetFootnoteFontName().getLength())
+ {
+ PropertyMapPtr aFontProps( new PropertyMap );
+ aFontProps->Insert(PROP_CHAR_FONT_NAME, true, uno::makeAny( pTopContext->GetFootnoteFontName() ));
+ aFontProperties = aFontProps->GetPropertyValues();
+ }
+ appendTextContent( uno::Reference< text::XTextContent >( xFootnoteText, uno::UNO_QUERY_THROW ), aFontProperties );
+ m_aTextAppendStack.push(uno::Reference< text::XTextAppend >( xFootnoteText, uno::UNO_QUERY_THROW ));
+
+ // Redlines for the footnote anchor
+ CheckRedline( xFootnote->getAnchor( ) );
+ }
+ catch( uno::Exception& )
+ {
+ OSL_ENSURE( false, "exception in PushFootOrEndnote" );
+ }
+}
+
+void DomainMapper_Impl::CreateRedline( uno::Reference< text::XTextRange > xRange, RedlineParamsPtr& pRedline )
+{
+ if ( pRedline.get( ) )
+ {
+#if DEBUG
+ clog << "REDLINE: Writing redline: " << pRedline->m_nId << endl;
+#endif
+ try
+ {
+ ::rtl::OUString sType;
+ PropertyNameSupplier & rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier( );
+ switch ( pRedline->m_nToken & 0xffff )
+ {
+ case ooxml::OOXML_mod:
+ sType = rPropNameSupplier.GetName( PROP_FORMAT );
+ break;
+ case ooxml::OOXML_ins:
+ sType = rPropNameSupplier.GetName( PROP_INSERT );
+ break;
+ case ooxml::OOXML_del:
+ sType = rPropNameSupplier.GetName( PROP_DELETE );
+ break;
+ }
+ uno::Reference < text::XRedline > xRedline( xRange, uno::UNO_QUERY_THROW );
+ beans::PropertyValues aRedlineProperties( 2 );
+ beans::PropertyValue * pRedlineProperties = aRedlineProperties.getArray( );
+ pRedlineProperties[0].Name = rPropNameSupplier.GetName( PROP_REDLINE_AUTHOR );
+ pRedlineProperties[0].Value <<= pRedline->m_sAuthor;
+ pRedlineProperties[1].Name = rPropNameSupplier.GetName( PROP_REDLINE_DATE_TIME );
+ pRedlineProperties[1].Value <<= lcl_DateStringToDateTime( pRedline->m_sDate );
+
+ xRedline->makeRedline( sType, aRedlineProperties );
+ }
+ catch( const uno::Exception & rEx )
+ {
+#if DEBUG
+ clog << "REDLINE: error - " << rtl::OUStringToOString( rEx.Message, RTL_TEXTENCODING_UTF8 ).getStr( ) << endl;
+#endif
+ ( void ) rEx;
+ OSL_ENSURE( false, "Exception in makeRedline" );
+ }
+ }
+}
+
+void DomainMapper_Impl::CheckParaRedline( uno::Reference< text::XTextRange > xRange )
+{
+ if ( m_pParaRedline.get( ) )
+ {
+ CreateRedline( xRange, m_pParaRedline );
+ ResetParaRedline( );
+ }
+}
+
+void DomainMapper_Impl::CheckRedline( uno::Reference< text::XTextRange > xRange )
+{
+ vector<RedlineParamsPtr>::iterator pIt = m_aRedlines.begin( );
+ vector< RedlineParamsPtr > aCleaned;
+ for (; pIt != m_aRedlines.end( ); pIt++ )
+ {
+ CreateRedline( xRange, *pIt );
+
+ // Adding the non-mod redlines to the temporary vector
+ if ( pIt->get( ) && ( ( *pIt )->m_nToken & 0xffff ) != ooxml::OOXML_mod )
+ {
+ aCleaned.push_back( *pIt );
+ }
+ }
+
+ m_aRedlines.swap( aCleaned );
+}
+
+void DomainMapper_Impl::StartParaChange( )
+{
+ m_bIsParaChange = true;
+}
+
+void DomainMapper_Impl::EndParaChange( )
+{
+ m_bIsParaChange = false;
+}
+
+/*-- 22.12.2008 13:45:15---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PushAnnotation()
+{
+ try
+ {
+ PropertyMapPtr pTopContext = GetTopContext();
+ m_xAnnotationField = uno::Reference< beans::XPropertySet >( GetTextFactory()->createInstance(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextField.Annotation") ) ),
+ uno::UNO_QUERY_THROW );
+ uno::Reference< text::XText > xAnnotationText;
+ m_xAnnotationField->getPropertyValue(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("TextRange"))) >>= xAnnotationText;
+ m_aTextAppendStack.push(uno::Reference< text::XTextAppend >( xAnnotationText, uno::UNO_QUERY_THROW ));
+ }
+ catch( uno::Exception& )
+ {
+ OSL_ENSURE( false, "exception in PushFootOrEndnote" );
+ }
+}
+/*-- 24.05.2007 14:22:29---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PopFootOrEndnote()
+{
+ m_aTextAppendStack.pop();
+}
+/*-- 22.12.2008 13:45:15---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PopAnnotation()
+{
+ m_aTextAppendStack.pop();
+ uno::Sequence< beans::PropertyValue > aEmptyProperties;
+ appendTextContent( uno::Reference< text::XTextContent >( m_xAnnotationField, uno::UNO_QUERY_THROW ), aEmptyProperties );
+ m_xAnnotationField.clear();
+
+}
+
+void DomainMapper_Impl::PushShapeContext( const uno::Reference< drawing::XShape > xShape )
+{
+#if DEBUG
+ clog << "PushShapeContext" << endl;
+#endif
+ m_bIsInShape = true;
+ try
+ {
+ // Add the shape to the text append stack
+ m_aTextAppendStack.push( uno::Reference< text::XTextAppend >( xShape, uno::UNO_QUERY_THROW ) );
+ m_bShapeContextAdded = true;
+
+ // Add the shape to the anchored objects stack
+ uno::Reference< text::XTextContent > xTxtContent( xShape, uno::UNO_QUERY_THROW );
+ m_aAnchoredStack.push( xTxtContent );
+
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ uno::Reference< beans::XPropertySet > xProps( xShape, uno::UNO_QUERY_THROW );
+ xProps->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_ANCHOR_TYPE ),
+ uno::makeAny( text::TextContentAnchorType_AT_PARAGRAPH ) );
+ xProps->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_OPAQUE ),
+ uno::makeAny( true ) );
+ }
+ catch ( const uno::Exception& e )
+ {
+#if DEBUG
+ clog << "Exception when adding shape: ";
+ clog << rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr( );
+ clog << endl;
+#endif
+ }
+}
+
+/*-- 20.03.2008 09:01:59---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PopShapeContext()
+{
+#if DEBUG
+ clog << "PopShapeContext" << endl;
+#endif
+
+ if ( m_bShapeContextAdded )
+ {
+ m_aTextAppendStack.pop();
+ m_bShapeContextAdded = false;
+ }
+ m_bIsInShape = false;
+}
+/*-- 12.09.2006 08:07:55---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::rtl::OUString lcl_FindQuotedText( const ::rtl::OUString& rCommand,
+ const sal_Char* cStartQuote, const sal_Unicode uEndQuote )
+{
+ ::rtl::OUString sRet;
+ ::rtl::OUString sStartQuote( ::rtl::OUString::createFromAscii(cStartQuote) );
+ sal_Int32 nStartIndex = rCommand.indexOf( sStartQuote );
+ if( nStartIndex >= 0 )
+ {
+ sal_Int32 nStartLength = sStartQuote.getLength();
+ sal_Int32 nEndIndex = rCommand.indexOf( uEndQuote, nStartIndex + nStartLength);
+ if( nEndIndex > nStartIndex )
+ {
+ sRet = rCommand.copy( nStartIndex + nStartLength, nEndIndex - nStartIndex - nStartLength);
+ }
+ }
+ return sRet;
+
+}
+/*-- 08.09.2006 14:05:17---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Int16 lcl_ParseNumberingType( const ::rtl::OUString& rCommand )
+{
+ sal_Int16 nRet = style::NumberingType::PAGE_DESCRIPTOR;
+
+ // The command looks like: " PAGE \* Arabic "
+ ::rtl::OUString sNumber = lcl_FindQuotedText(rCommand, "\\* ", ' ');
+
+ if( sNumber.getLength() )
+ {
+ //todo: might make sense to hash this list, too
+ struct NumberingPairs
+ {
+ const sal_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( sal_uInt32 nNum = 0; nNum < sizeof(aNumberingPairs)/sizeof( NumberingPairs ); ++nNum)
+ {
+ if( /*sCommand*/sNumber.equalsAscii(aNumberingPairs[nNum].cWordName ))
+ {
+ nRet = aNumberingPairs[nNum].nType;
+ break;
+ }
+ }
+
+ }
+ return nRet;
+}
+/*-- 08.09.2006 13:52:09---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+OUString lcl_ParseFormat( const ::rtl::OUString& rCommand )
+{
+ // The command looks like: " DATE \@ "dd MMMM yyyy"
+ return lcl_FindQuotedText(rCommand, "\\@ \"", '\"');
+}
+/*-- 19.09.2006 10:01:20---------------------------------------------------
+extract a parameter (with or without quotes) between the command and the following backslash
+ -----------------------------------------------------------------------*/
+::rtl::OUString lcl_ExtractParameter(const ::rtl::OUString& rCommand, sal_Int32 nCommandLength )
+{
+ sal_Int32 nStartIndex = nCommandLength;
+ sal_Int32 nEndIndex = 0;
+ sal_Int32 nQuoteIndex = rCommand.indexOf( '\"', nStartIndex);
+ if( nQuoteIndex >= 0)
+ {
+ nStartIndex = nQuoteIndex + 1;
+ nEndIndex = rCommand.indexOf( '\"', nStartIndex + 1) - 1;
+ }
+ else
+ {
+ nEndIndex = rCommand.indexOf( ::rtl::OUString::createFromAscii(" \\"), nStartIndex);
+ }
+ ::rtl::OUString sRet;
+ if( nEndIndex > nStartIndex + 1 )
+ {
+ //remove spaces at start and end of the result
+ if(nQuoteIndex <= 0)
+ {
+ const sal_Unicode* pCommandStr = rCommand.getStr();
+ while( nStartIndex < nEndIndex && pCommandStr[nStartIndex] == ' ')
+ ++nStartIndex;
+ while( nEndIndex > nStartIndex && pCommandStr[nEndIndex] == ' ')
+ --nEndIndex;
+ }
+ sRet = rCommand.copy( nStartIndex, nEndIndex - nStartIndex + 1);
+ }
+ return sRet;
+}
+
+/*-- 15.09.2006 10:57:57---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::rtl::OUString lcl_ExctractAskVariableAndHint( const ::rtl::OUString& rCommand, ::rtl::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'
+ while(rCommand.getStr()[nIndex] == ' ')
+ ++nIndex;
+ ::rtl::OUString sShortCommand( rCommand.copy( nIndex ) ); //cut off the " ASK "
+
+ nIndex = 0;
+ sShortCommand = sShortCommand.getToken( 0, '\\', nIndex);
+ nIndex = 0;
+ ::rtl::OUString sRet = sShortCommand.getToken( 0, ' ', nIndex);
+ if( nIndex > 0)
+ rHint = sShortCommand.copy( nIndex );
+ if( !rHint.getLength() )
+ rHint = sRet;
+ return sRet;
+}
+/*-- 24.01.2007 16:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+bool lcl_FindInCommand(
+ const ::rtl::OUString& rCommand,
+ sal_Unicode cSwitch,
+ ::rtl::OUString& rValue )
+{
+ bool bRet = false;
+ ::rtl::OUString sSearch('\\');
+ sSearch += ::rtl::OUString( 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() - 1;
+ if( nEndIndex - nIndex > 3 )
+ rValue = rCommand.copy( nIndex + 3, nEndIndex - nIndex - 3);
+ }
+ return bRet;
+}
+/*-- 01.09.2006 11:48:08---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+/*void DomainMapper_Impl::CreateField( ::rtl::OUString& rCommand )
+{
+ static FieldConversionMap_t aFieldConversionMap;
+ static bool bFilled = false;
+ m_bSetUserFieldContent = false;
+ if(!bFilled)
+ {
+ static const FieldConversion aFields[] =
+ {
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ADDRESSBLOCK")), "", "", FIELD_ADDRESSBLOCK },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ADVANCE")), "", "", FIELD_ADVANCE },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ASK")), "SetExpression", "SetExpression", FIELD_ASK },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTONUM")), "SetExpression", "SetExpression", FIELD_AUTONUM },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTONUMLGL")), "SetExpression", "SetExpression", FIELD_AUTONUMLGL },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTONUMOUT")), "SetExpression", "SetExpression", FIELD_AUTONUMOUT },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTHOR")), "Author", "", FIELD_AUTHOR },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DATE")), "DateTime", "", FIELD_DATE },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("COMMENTS")), "DocInfo.Description", "", FIELD_COMMENTS },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CREATEDATE")), "DocInfo.CreateDateTime", "", FIELD_CREATEDATE },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DOCPROPERTY")), "", "", FIELD_DOCPROPERTY },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DOCVARIABLE")), "User", "", FIELD_DOCVARIABLE },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("EDITTIME")), "DocInfo.EditTime", "", FIELD_EDITTIME },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FILLIN")), "Input", "", FIELD_FILLIN },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FILENAME")), "FileName", "", FIELD_FILENAME },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FILESIZE")), "", "", FIELD_FILESIZE },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMULA")), "", "", FIELD_FORMULA
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GOTOBUTTON")), "", "", FIELD_GOTOBUTTON },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HYPERLINK")), "", "", FIELD_HYPERLINK },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IF")), "ConditionalText", "", FIELD_IF },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("INFO")), "","", FIELD_INFO },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("INCLUDEPICTURE")), "", "", FIELD_INCLUDEPICTURE},
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("KEYWORDS")), "DocInfo.KeyWords", "", FIELD_KEYWORDS },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LASTSAVEDBY")), "DocInfo.ChangeAuthor", "", FIELD_LASTSAVEDBY },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MACROBUTTON")), "Macro", "", FIELD_MACROBUTTON },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MERGEFIELD")), "Database", "Database", FIELD_MERGEFIELD},
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MERGEREC")), "DatabaseNumberOfSet", "", FIELD_MERGEREC },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MERGESEQ")), "", "", FIELD_MERGESEQ },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NEXT")), "DatabaseNextSet", "", FIELD_NEXT },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NEXTIF")), "DatabaseNextSet", "", FIELD_NEXTIF },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PAGE")), "PageNumber", "", FIELD_PAGE },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("REF")), "", "", FIELD_REF },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("REVNUM")), "DocInfo.Revision", "", FIELD_REVNUM },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SAVEDATE")), "DocInfo.Change", "", FIELD_SAVEDATE },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SECTION")), "", "", FIELD_SECTION },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SECTIONPAGES")), "", "", FIELD_SECTIONPAGES },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SEQ")), "SetExpression", "SetExpression", FIELD_SEQ },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SET")), "","", FIELD_SET },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SKIPIF")),"", "", FIELD_SKIPIF },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("STYLEREF")),"", "", FIELD_STYLEREF },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SUBJECT")), "DocInfo.Subject", "", FIELD_SUBJECT },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SYMBOL")),"", "", FIELD_SYMBOL },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TEMPLATE")), "TemplateName", "", FIELD_TEMPLATE},
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TIME")), "DateTime", "", FIELD_TIME },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TITLE")), "DocInfo.Title", "", FIELD_TITLE },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("USERINITIALS")), "ExtendedUser", "", FIELD_USERINITIALS},
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("USERADDRESS")), "", "", FIELD_USERADDRESS },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("USERNAME")), "ExtendedUser", "", FIELD_USERNAME }
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TOC")), "com.sun.star.text.ContentIndex", "", FIELD_TOC},
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TC")), "com.sun.star.text.ContentIndexMark", "", FIELD_TC},
+
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")), "", "", FIELD_},
+
+ };
+ size_t nConversions = sizeof(aFields)/sizeof(FieldConversion);
+ for( size_t nConversion = 0; nConversion < nConversions; ++nConversion)
+ {
+ aFieldConversionMap.insert( FieldConversionMap_t::value_type(
+ aFields[nConversion].sWordCommand,
+ aFields[nConversion] ));
+ }
+
+ bFilled = true;
+ }
+ try
+ {
+ uno::Reference< uno::XInterface > xFieldInterface;
+ //at first determine the field type - skip first space
+ ::rtl::OUString sCommand( rCommand.copy(rCommand.getLength() ? 1 : 0) );
+ sal_Int32 nSpaceIndex = sCommand.indexOf( ' ' );
+ if( 0 <= nSpaceIndex )
+ sCommand = sCommand.copy( 0, nSpaceIndex );
+
+ FieldConversionMap_t::iterator aIt = aFieldConversionMap.find(sCommand);
+ if(aIt != aFieldConversionMap.end())
+ {
+ uno::Reference< beans::XPropertySet > xFieldProperties;
+ if( FIELD_HYPERLINK != aIt->second.eFieldId &&
+ FIELD_DOCPROPERTY != aIt->second.eFieldId &&
+ FIELD_TOC != aIt->second.eFieldId &&
+ FIELD_TC != aIt->second.eFieldId)
+ {
+ //add the service prefix
+ OUString sServiceName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextField."));
+ sServiceName += ::rtl::OUString::createFromAscii(aIt->second.cFieldServiceName );
+ xFieldInterface = m_xTextFactory->createInstance(sServiceName);
+ xFieldProperties = uno::Reference< beans::XPropertySet >( xFieldInterface, uno::UNO_QUERY_THROW);
+ }
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ switch( aIt->second.eFieldId )
+ {
+ case FIELD_ADDRESSBLOCK: break;
+ case FIELD_ADVANCE : break;
+ case FIELD_ASK :
+ {
+ //doesn the command contain a variable name?
+ ::rtl::OUString sVariable, sHint;
+
+ sVariable = lcl_ExctractAskVariableAndHint( rCommand, sHint );
+ if(sVariable.getLength())
+ {
+ // determine field master name
+ uno::Reference< beans::XPropertySet > xMaster = FindOrCreateFieldMaster(
+ "com.sun.star.text.FieldMaster.SetExpression", sVariable );
+
+ // 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(
+ rPropNameSupplier.GetName(PROP_IS_INPUT), uno::makeAny( true ));
+ // set the prompt
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_HINT),
+ uno::makeAny( sHint ));
+ }
+ else
+ {
+ //don't insert the field
+ //todo: maybe import a 'normal' input field here?
+ xFieldInterface = 0;
+ }
+ }
+ break;
+ case FIELD_AUTONUM :
+ case FIELD_AUTONUMLGL :
+ case FIELD_AUTONUMOUT :
+ {
+ //create a sequence field master "AutoNr"
+ uno::Reference< beans::XPropertySet > xMaster = FindOrCreateFieldMaster(
+ "com.sun.star.text.FieldMaster.SetExpression",
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AutoNr") ));
+
+ xMaster->setPropertyValue( rPropNameSupplier.GetName(PROP_SUB_TYPE),
+ uno::makeAny(text::SetVariableType::SEQUENCE));
+
+ //apply the numbering type
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_NUMBERING_TYPE),
+ uno::makeAny( lcl_ParseNumberingType(rCommand) ));
+ // attach the master to the field
+ uno::Reference< text::XDependentTextField > xDependentField( xFieldInterface, uno::UNO_QUERY_THROW );
+ xDependentField->attachTextFieldMaster( xMaster );
+ }
+ break;
+ case FIELD_AUTHOR :
+ {
+ xFieldProperties->setPropertyValue( rPropNameSupplier.GetName(PROP_FULL_NAME), uno::makeAny( true ));
+ ::rtl::OUString sParam = lcl_ExtractParameter(rCommand, sizeof(" AUTHOR") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+ //PROP_CURRENT_PRESENTATION is set later anyway
+ }
+ }
+ break;
+ case FIELD_DATE:
+ {
+ //not fixed,
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_IS_FIXED),
+ uno::makeAny( false ));
+ SetNumberFormat( rCommand, xFieldProperties );
+ }
+ break;
+ case FIELD_COMMENTS :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(rCommand, sizeof(" COMMENTS") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+ //PROP_CURRENT_PRESENTATION is set later anyway
+ }
+ }
+ break;
+ case FIELD_CREATEDATE :
+ {
+ SetNumberFormat( rCommand, xFieldProperties );
+ }
+ break;
+ case FIELD_DOCPROPERTY :
+ {
+ //some docproperties should be imported as document statistic fields, some as DocInfo fields
+ //others should be user fields
+ ::rtl::OUString sParam = lcl_ExtractParameter(rCommand, sizeof(" DOCPROPERTY") );
+ if(sParam.getLength())
+ {
+ #define SET_ARABIC 0x01
+ #define SET_FULL_NAME 0x02
+ struct DocPropertyMap
+ {
+ const sal_Char* pDocPropertyName;
+ const sal_Char* pServiceName;
+ sal_uInt8 nFlags;
+ };
+ static const DocPropertyMap aDocProperties[] =
+ {
+ {"Author", "Author", SET_FULL_NAME},
+ {"CreateTime", "DocInfo.CreateDateTime", 0},
+ {"Characters", "CharacterCount", SET_ARABIC},
+ {"Comments", "DocInfo.Description", 0},
+ {"Keywords", "DocInfo.KeyWords", 0},
+ {"LastPrinted", "DocInfo.PrintDateTime", 0},
+ {"LastSavedBy", "DocInfo.ChangeAuthor", 0},
+ {"LastSavedTime", "DocInfo.ChangeDateTime", 0},
+ {"Paragraphs", "ParagraphCount", SET_ARABIC},
+ {"RevisionNumber", "DocInfo.Revision", 0},
+ {"Subject", "DocInfo.Subject", 0},
+ {"Template", "TemplateName", 0},
+ {"Title", "DocInfo.Title", 0},
+ {"TotalEditingTime", "DocInfo.EditTime", 9},
+ {"Words", "WordCount", SET_ARABIC}
+
+ //other available DocProperties:
+ //Bytes, Category, CharactersWithSpaces, Company
+ //HyperlinkBase,
+ //Lines, Manager, NameofApplication, ODMADocId, Pages,
+ //Security,
+ };
+ //search for a field mapping
+ ::rtl::OUString sFieldServiceName;
+ sal_uInt16 nMap = 0;
+ for( ; nMap < sizeof(aDocProperties) / sizeof(DocPropertyMap); ++nMap )
+ {
+ if(sParam.equalsAscii(aDocProperties[nMap].pDocPropertyName))
+ {
+ sFieldServiceName = ::rtl::OUString::createFromAscii(aDocProperties[nMap].pServiceName);
+ break;
+ }
+ }
+ ::rtl::OUString sServiceName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextField."));
+ if(sFieldServiceName.getLength())
+ {
+ sServiceName += sFieldServiceName;
+ xFieldInterface = m_xTextFactory->createInstance(sServiceName);
+ xFieldProperties = uno::Reference< beans::XPropertySet >( xFieldInterface, uno::UNO_QUERY_THROW);
+ if(0 != (aDocProperties[nMap].nFlags & SET_ARABIC))
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_NUMBERING_TYPE),
+ uno::makeAny( style::NumberingType::ARABIC ));
+ else if(0 != (aDocProperties[nMap].nFlags & SET_FULL_NAME))
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_FULL_NAME), uno::makeAny( true ));
+
+ }
+ else
+ {
+ //create a user field and type
+ uno::Reference< beans::XPropertySet > xMaster =
+ FindOrCreateFieldMaster( "com.sun.star.text.FieldMaster.User", sParam );
+ sServiceName += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("User"));
+ xFieldInterface = m_xTextFactory->createInstance(sServiceName);
+ xFieldProperties = uno::Reference< beans::XPropertySet >( xFieldInterface, uno::UNO_QUERY_THROW);
+ uno::Reference< text::XDependentTextField > xDependentField( xFieldInterface, uno::UNO_QUERY_THROW );
+ xDependentField->attachTextFieldMaster( xMaster );
+ m_bSetUserFieldContent = true;
+ }
+ }
+ }
+ #undef SET_ARABIC
+ #undef SET_FULL_NAME
+ break;
+ case FIELD_DOCVARIABLE :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(rCommand, sizeof(" DOCVARIABLE") );
+ //create a user field and type
+ uno::Reference< beans::XPropertySet > xMaster =
+ FindOrCreateFieldMaster( "com.sun.star.text.FieldMaster.User", sParam );
+ 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( rCommand, xFieldProperties );
+ break;
+ case FIELD_FILLIN :
+ {
+ sal_Int32 nIndex = 0;
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_HINT), uno::makeAny( rCommand.getToken( 1, '\"', nIndex)));
+ }
+ break;
+ case FIELD_FILENAME:
+ {
+ sal_Int32 nNumberingTypeIndex = rCommand.indexOf( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\\p")));
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_FILE_FORMAT),
+ uno::makeAny( nNumberingTypeIndex > 0 ? text::FilenameDisplayFormat::FULL : text::FilenameDisplayFormat::NAME ));
+ }
+ break;
+ case FIELD_FILESIZE : break;
+ case FIELD_FORMULA : break;
+ case FIELD_GOTOBUTTON : break;
+ case FIELD_HYPERLINK:
+ {
+ sal_Int32 nStartQuote = rCommand.indexOf( '\"' );
+ sal_Int32 nEndQuote = nStartQuote < rCommand.getLength() + 1 ? rCommand.indexOf( '\"', nStartQuote + 1) : -1;
+ if( nEndQuote > 0)
+ m_sHyperlinkURL = rCommand.copy(nStartQuote + 1, nEndQuote - nStartQuote - 1);
+ }
+ break;
+ case FIELD_IF : break;
+ case FIELD_INFO : break;
+ case FIELD_INCLUDEPICTURE: break;
+ case FIELD_KEYWORDS :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(rCommand, sizeof(" KEYWORDS") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( 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 ");
+ ::rtl::OUString sMacro = rCommand.getToken( 0, ' ', nIndex);
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_MACRO_NAME), uno::makeAny( sMacro ));
+
+ //extract quick help text
+ if( rCommand.getLength() > nIndex + 1)
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_HINT),
+ uno::makeAny( rCommand.copy( nIndex )));
+ }
+ }
+ break;
+ case FIELD_MERGEFIELD :
+ {
+ //todo: create a database field and fieldmaster pointing to a column, only
+ ::rtl::OUString sParam = lcl_ExtractParameter(rCommand, sizeof(" MERGEFIELD") );
+ //create a user field and type
+ uno::Reference< beans::XPropertySet > xMaster =
+ FindOrCreateFieldMaster( "com.sun.star.text.FieldMaster.Database", sParam );
+
+// xFieldProperties->setPropertyValue(
+// ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FieldCode")),
+// uno::makeAny( rCommand.copy( nIndex + 1 )));
+ uno::Reference< text::XDependentTextField > xDependentField( xFieldInterface, uno::UNO_QUERY_THROW );
+ xDependentField->attachTextFieldMaster( xMaster );
+ m_bSetUserFieldContent = true;
+ }
+ break;
+ case FIELD_MERGEREC : break;
+ case FIELD_MERGESEQ : break;
+ case FIELD_NEXT : break;
+ case FIELD_NEXTIF : break;
+ case FIELD_PAGE :
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_NUMBERING_TYPE),
+ uno::makeAny( lcl_ParseNumberingType(rCommand) ));
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_SUB_TYPE),
+ uno::makeAny( text::PageNumberType_CURRENT ));
+
+ break;
+ case FIELD_REF : break;
+ case FIELD_REVNUM : break;
+ case FIELD_SAVEDATE :
+ SetNumberFormat( rCommand, xFieldProperties );
+ break;
+ case FIELD_SECTION : break;
+ case FIELD_SECTIONPAGES : break;
+ case FIELD_SEQ : break;
+ case FIELD_SET : break;
+ case FIELD_SKIPIF : break;
+ case FIELD_STYLEREF : break;
+ case FIELD_SUBJECT :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(rCommand, sizeof(" SUBJECT") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+ //PROP_CURRENT_PRESENTATION is set later anyway
+ }
+ }
+ break;
+ case FIELD_SYMBOL : break;
+ case FIELD_TEMPLATE: break;
+ case FIELD_TIME :
+ SetNumberFormat( rCommand, xFieldProperties );
+ break;
+ case FIELD_TITLE :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(rCommand, sizeof(" TITLE") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+ //PROP_CURRENT_PRESENTATION is set later anyway
+ }
+ }
+ break;
+ case FIELD_USERINITIALS:
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_USER_DATA_TYPE), uno::makeAny( text::UserDataPart::SHORTCUT ));
+ //todo: if initials are provided - set them as fixed content
+ ::rtl::OUString sParam = lcl_ExtractParameter(rCommand, sizeof(" USERINITIALS") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( 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_USERNAME : //todo: user name is firstname + lastname
+ break;
+ case FIELD_TOC:
+ {
+ ::rtl::OUString sValue;
+ bool bTableOfFigures = false;
+ bool bHyperlinks = false;
+ bool bFromOutline = false;
+ bool bFromEntries = false;
+ ::rtl::OUString sTemplate;
+ ::rtl::OUString sChapterNoSeparator;
+// \a Builds a table of figures but does not include the captions's label and number
+ if( lcl_FindInCommand( rCommand, '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( rCommand, 'b', sValue ))
+// { //todo: sValue contains the bookmark name - unsupported feature
+// }
+ if( lcl_FindInCommand( rCommand, 'c', sValue ))
+// \c Builds a table of figures of the given label
+ {
+ //todo: sValue contains the label's name
+ bTableOfFigures = true;
+ }
+// \d Defines the separator between sequence and page numbers
+ if( lcl_FindInCommand( rCommand, '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( rCommand, '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( rCommand, '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( rCommand, 'l', sValue ))
+// {
+ //todo: entries can only be included completely
+// }
+// \n Builds a table of contents or a range of entries, sucah as “1-9”, in a table of contents without page numbers
+// if( lcl_FindInCommand( rCommand, '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( rCommand, 'o', sValue ))
+ {
+ bFromOutline = true;
+ }
+// \p Defines the separator between the table entry and its page number
+ if( lcl_FindInCommand( rCommand, 'p', sValue ))
+ { }
+// \s Builds a table of contents by using a sequence type
+ if( lcl_FindInCommand( rCommand, 's', sValue ))
+ { }
+// \t Builds a table of contents by using style names other than the standard outline styles
+ if( lcl_FindInCommand( rCommand, 't', sValue ))
+ {
+ sTemplate = sValue;
+ }
+// \u Builds a table of contents by using the applied paragraph outline level
+ if( lcl_FindInCommand( rCommand, 'u', sValue ))
+ {
+ bFromOutline = true;
+ //todo: what doesn 'the applied paragraph outline level' refer to?
+ }
+// \w Preserve tab characters within table entries
+// if( lcl_FindInCommand( rCommand, 'w', sValue ))
+// {
+ //todo: not supported
+// }
+// \x Preserve newline characters within table entries
+// if( lcl_FindInCommand( rCommand, 'x', sValue ))
+// {
+ //todo: unsupported
+// }
+// \z Hides page numbers within the table of contens when shown in Web Layout View
+// if( lcl_FindInCommand( rCommand, 'z', sValue ))
+// { //todo: unsupported feature }
+
+ m_xTOC = uno::Reference< beans::XPropertySet >(
+ m_xTextFactory->createInstance(
+ bTableOfFigures ?
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.IllustrationsIndex")) :
+ ::rtl::OUString::createFromAscii(aIt->second.cFieldServiceName)),
+ uno::UNO_QUERY_THROW);
+ if( !bTableOfFigures )
+ {
+ m_xTOC->setPropertyValue( rPropNameSupplier.GetName( PROP_CREATE_FROM_OUTLINE ), uno::makeAny( bFromOutline ));
+ m_xTOC->setPropertyValue( rPropNameSupplier.GetName( PROP_CREATE_FROM_MARKS ), uno::makeAny( bFromEntries ));
+ if( sTemplate.getLength() )
+ {
+ uno::Reference< container::XIndexReplace> xParaStyles;
+ m_xTOC->getPropertyValue(rPropNameSupplier.GetName(PROP_LEVEL_PARAGRAPH_STYLES)) >>= xParaStyles;
+ uno::Sequence< rtl::OUString> aStyles(1);
+ aStyles[0] = sTemplate;
+ xParaStyles->replaceByIndex(0, uno::makeAny(aStyles));
+ }
+ if(bHyperlinks || sChapterNoSeparator.getLength())
+ {
+ uno::Reference< container::XIndexReplace> xLevelFormats;
+ m_xTOC->getPropertyValue(rPropNameSupplier.GetName(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;
+ //create a copy of the level and add two new entries - hyperlink start and end
+ bool bChapterNoSeparator = sChapterNoSeparator.getLength() > 0;
+ 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 = rPropNameSupplier.GetName( PROP_TOKEN_TYPE );
+ aHyperlink[0].Value <<= rPropNameSupplier.GetName( PROP_TOKEN_HYPERLINK_START );
+ pNewLevel[0] = aHyperlink;
+ aHyperlink[0].Value <<= rPropNameSupplier.GetName( PROP_TOKEN_HYPERLINK_END );
+ pNewLevel[aNewLevel.getLength() -1] = aHyperlink;
+ }
+ if( bChapterNoSeparator )
+ {
+ beans::PropertyValues aChapterNo(2);
+ aChapterNo[0].Name = rPropNameSupplier.GetName( PROP_TOKEN_TYPE );
+ aChapterNo[0].Value <<= rPropNameSupplier.GetName( PROP_TOKEN_CHAPTER_INFO );
+ aChapterNo[1].Name = rPropNameSupplier.GetName( 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 = rPropNameSupplier.GetName( PROP_TOKEN_TYPE );
+ aChapterSeparator[0].Value <<= rPropNameSupplier.GetName( PROP_TOKEN_TEXT );
+ aChapterSeparator[1].Name = rPropNameSupplier.GetName( PROP_TEXT );
+ aChapterSeparator[1].Value <<= sChapterNoSeparator;
+ pNewLevel[aNewLevel.getLength() - (bHyperlinks ? 3 : 1)] = aChapterSeparator;
+ }
+ //copy the 'old' entries except the last (page no)
+ for( sal_Int32 nToken = 0; nToken < aLevel.getLength() - 1; ++nToken)
+ {
+ pNewLevel[nToken + 1] = aLevel[nToken];
+ }
+ //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];
+
+ xLevelFormats->replaceByIndex( nLevel, uno::makeAny( aNewLevel ) );
+ }
+ }
+ }
+ }
+ break;
+ case FIELD_TC :
+ {
+ m_xTC = uno::Reference< beans::XPropertySet >(
+ m_xTextFactory->createInstance(
+ ::rtl::OUString::createFromAscii(aIt->second.cFieldServiceName)),
+ uno::UNO_QUERY_THROW);
+ ::rtl::OUString sTCText = lcl_ExtractParameter(rCommand, sizeof(" TC") );
+ if( sTCText.getLength())
+ m_xTC->setPropertyValue(rPropNameSupplier.GetName(PROP_ALTERNATIVE_TEXT),
+ uno::makeAny(sTCText));
+ ::rtl::OUString sValue;
+ // \f TC entry in doc with multiple tables
+// if( lcl_FindInCommand( rCommand, 'f', sValue ))
+// {
+ // todo: unsupported
+// }
+ if( lcl_FindInCommand( rCommand, 'l', sValue ))
+ // \l Outline Level
+ {
+ sal_Int32 nLevel = sValue.toInt32();
+ if( sValue.getLength() && nLevel >= 0 && nLevel <= 10 )
+ m_xTC->setPropertyValue(rPropNameSupplier.GetName(PROP_LEVEL), uno::makeAny( nLevel ));
+ }
+// if( lcl_FindInCommand( rCommand, 'n', sValue ))
+// \n Suppress page numbers
+// {
+ //todo: unsupported feature
+// }
+ }
+ break;
+ }
+ }
+ m_xTextField = uno::Reference< text::XTextField >( xFieldInterface, uno::UNO_QUERY );
+ }
+ catch( uno::Exception& )
+ {
+ }
+}
+*/
+
+/*-- 11.09.2006 13:16:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+/*bool DomainMapper_Impl::IsFieldAvailable() const
+{
+ return m_xTextField.is() || m_xTOC.is() || m_xTC.is() || m_sHyperlinkURL.getLength();
+}
+*/
+/*-- 14.09.2006 12:46:52---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::GetCurrentLocale(lang::Locale& rLocale)
+{
+ PropertyMapPtr pTopContext = GetTopContext();
+ PropertyDefinition aCharLocale( PROP_CHAR_LOCALE, true );
+ PropertyMap::iterator aLocaleIter = pTopContext->find( aCharLocale );
+ if( aLocaleIter != pTopContext->end())
+ aLocaleIter->second >>= rLocale;
+ else
+ {
+ PropertyMapPtr pParaContext = GetTopContextOfType(CONTEXT_PARAGRAPH);
+ aLocaleIter = pParaContext->find(aCharLocale);
+ if( aLocaleIter != pParaContext->end())
+ {
+ aLocaleIter->second >>= rLocale;
+ }
+ }
+}
+
+/*-- 14.09.2006 12:52:58---------------------------------------------------
+ extract the number format from the command and apply the resulting number
+ format to the XPropertySet
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::SetNumberFormat( const ::rtl::OUString& rCommand,
+ uno::Reference< beans::XPropertySet >& xPropertySet )
+{
+ OUString sFormatString = lcl_ParseFormat( rCommand );
+ // find \h - hijri/luna calendar todo: what about saka/era calendar?
+ bool bHijri = 0 < rCommand.indexOf( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\\h ")));
+ lang::Locale aUSLocale;
+ aUSLocale.Language = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("en"));
+ aUSLocale.Country = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("US"));
+
+ //determine current locale - todo: is it necessary to initialize this locale?
+ lang::Locale aCurrentLocale = aUSLocale;
+ GetCurrentLocale( aCurrentLocale );
+ ::rtl::OUString sFormat = ConversionHelper::ConvertMSFormatStringToSO( sFormatString, aCurrentLocale, bHijri);
+
+ //get the number formatter and convert the string to a format value
+ try
+ {
+ uno::Reference< util::XNumberFormatsSupplier > xNumberSupplier( m_xTextDocument, uno::UNO_QUERY_THROW );
+ long nKey = xNumberSupplier->getNumberFormats()->addNewConverted( sFormat, aUSLocale, aCurrentLocale );
+ xPropertySet->setPropertyValue(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName(PROP_NUMBER_FORMAT),
+ uno::makeAny( nKey ));
+ }
+ catch(const uno::Exception&)
+ {
+ }
+}
+
+/*-- 15.09.2006 15:10:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< beans::XPropertySet > DomainMapper_Impl::FindOrCreateFieldMaster(
+ const sal_Char* pFieldMasterService, const ::rtl::OUString& rFieldMasterName )
+ throw(::com::sun::star::uno::Exception)
+{
+ // query master, create if not available
+ uno::Reference< text::XTextFieldsSupplier > xFieldsSupplier( GetTextDocument(), uno::UNO_QUERY );
+ uno::Reference< container::XNameAccess > xFieldMasterAccess = xFieldsSupplier->getTextFieldMasters();
+ uno::Reference< beans::XPropertySet > xMaster;
+ ::rtl::OUString sFieldMasterService( ::rtl::OUString::createFromAscii(pFieldMasterService) );
+ ::rtl::OUStringBuffer aFieldMasterName;
+ aFieldMasterName.appendAscii( pFieldMasterService );
+ aFieldMasterName.append(sal_Unicode('.'));
+ aFieldMasterName.append(rFieldMasterName);
+ ::rtl::OUString sFieldMasterName = aFieldMasterName.makeStringAndClear();
+ if(xFieldMasterAccess->hasByName(sFieldMasterName))
+ {
+ //get the master
+ xMaster = uno::Reference< beans::XPropertySet >(xFieldMasterAccess->getByName(sFieldMasterName),
+ uno::UNO_QUERY_THROW);
+ }
+ else
+ {
+ //create the master
+ xMaster = uno::Reference< beans::XPropertySet >(
+ m_xTextFactory->createInstance(sFieldMasterService), uno::UNO_QUERY_THROW);
+ //set the master's name
+// sal_Int32 nIndex = rtl_str_indexOfStr( pFieldMasterService, "Database" );
+// if( nIndex < 0 )
+ xMaster->setPropertyValue(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName(PROP_NAME),
+ uno::makeAny(rFieldMasterName));
+// else
+// {
+// xMaster->setPropertyValue(
+// PropertyNameSupplier::GetPropertyNameSupplier().GetName(PROP_DATA_COLUMN_NAME),
+// uno::makeAny(rFieldMasterName));
+// }
+ }
+ return xMaster;
+}
+
+/*-- 29.01.2007 11:33:10---------------------------------------------------
+//field context starts with a 0x13
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PushFieldContext()
+{
+ uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
+ //insert a dummy char to make sure the start range doesn't move together with the to-be-appended text
+ xTextAppend->appendTextPortion(::rtl::OUString( '-' ), uno::Sequence< beans::PropertyValue >() );
+ uno::Reference< text::XTextCursor > xCrsr = xTextAppend->createTextCursorByRange( xTextAppend->getEnd() );
+ xCrsr->goLeft( 1, false );
+ m_aFieldStack.push( FieldContextPtr( new FieldContext( xCrsr->getStart() ) ) );
+}
+/*-- 29.01.2007 11:33:13---------------------------------------------------
+//the current field context waits for the completion of the command
+ -----------------------------------------------------------------------*/
+bool DomainMapper_Impl::IsOpenFieldCommand() const
+{
+ return !m_aFieldStack.empty() && !m_aFieldStack.top()->IsCommandCompleted();
+}
+/*-- 29.01.2007 11:33:13---------------------------------------------------
+//the current field context waits for the completion of the command
+ -----------------------------------------------------------------------*/
+bool DomainMapper_Impl::IsOpenField() const
+{
+ return !m_aFieldStack.empty();
+}
+/*-- 29.01.2007 11:49:13---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+FieldContext::FieldContext(uno::Reference< text::XTextRange > xStart) :
+ m_bFieldCommandCompleted( false )
+ ,m_xStartRange( xStart )
+{
+}
+/*-- 29.01.2007 11:48:44---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+FieldContext::~FieldContext()
+{
+}
+/*-- 29.01.2007 11:48:45---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FieldContext::AppendCommand(const ::rtl::OUString& rPart)
+{
+ m_sCommand += rPart;
+}
+/*-- 29.01.2007 11:33:15---------------------------------------------------
+//collect the pieces of the command
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::AppendFieldCommand(::rtl::OUString& rPartOfCommand)
+{
+ FieldContextPtr pContext = m_aFieldStack.top();
+ OSL_ENSURE( pContext.get(), "no field context available");
+ if( pContext.get() )
+ {
+ pContext->AppendCommand( rPartOfCommand );
+ }
+}
+/*-- 13.12.2007 11:45:43---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+typedef std::multimap < sal_Int32, ::rtl::OUString > TOCStyleMap;
+/*-- 29.01.2007 11:33:16---------------------------------------------------
+//the field command has to be closed (0x14 appeared)
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::CloseFieldCommand()
+{
+ FieldContextPtr pContext = m_aFieldStack.top();
+ OSL_ENSURE( pContext.get(), "no field context available");
+ if( pContext.get() )
+ {
+ static FieldConversionMap_t aFieldConversionMap;
+ static bool bFilled = false;
+ m_bSetUserFieldContent = false;
+ if(!bFilled)
+ {
+ static const FieldConversion aFields[] =
+ {
+ // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ADDRESSBLOCK")), "", "", FIELD_ADDRESSBLOCK },
+ // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ADVANCE")), "", "", FIELD_ADVANCE },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ASK")), "SetExpression", "SetExpression", FIELD_ASK },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTONUM")), "SetExpression", "SetExpression", FIELD_AUTONUM },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTONUMLGL")), "SetExpression", "SetExpression", FIELD_AUTONUMLGL },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTONUMOUT")), "SetExpression", "SetExpression", FIELD_AUTONUMOUT },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTHOR")), "Author", "", FIELD_AUTHOR },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DATE")), "DateTime", "", FIELD_DATE },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("COMMENTS")), "DocInfo.Description", "", FIELD_COMMENTS },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CREATEDATE")), "DocInfo.CreateDateTime", "", FIELD_CREATEDATE },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DOCPROPERTY")), "", "", FIELD_DOCPROPERTY },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DOCVARIABLE")), "User", "", FIELD_DOCVARIABLE },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("EDITTIME")), "DocInfo.EditTime", "", FIELD_EDITTIME },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FILLIN")), "Input", "", FIELD_FILLIN },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FILENAME")), "FileName", "", FIELD_FILENAME },
+ // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FILESIZE")), "", "", FIELD_FILESIZE },
+ // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMULA")), "", "", FIELD_FORMULA
+ // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GOTOBUTTON")), "", "", FIELD_GOTOBUTTON },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HYPERLINK")), "", "", FIELD_HYPERLINK },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IF")), "ConditionalText", "", FIELD_IF },
+ // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("INFO")), "","", FIELD_INFO },
+ // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("INCLUDEPICTURE")), "", "", FIELD_INCLUDEPICTURE},
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("KEYWORDS")), "DocInfo.KeyWords", "", FIELD_KEYWORDS },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LASTSAVEDBY")), "DocInfo.ChangeAuthor", "", FIELD_LASTSAVEDBY },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MACROBUTTON")), "Macro", "", FIELD_MACROBUTTON },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MERGEFIELD")), "Database", "Database", FIELD_MERGEFIELD},
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MERGEREC")), "DatabaseNumberOfSet", "", FIELD_MERGEREC },
+ // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MERGESEQ")), "", "", FIELD_MERGESEQ },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NEXT")), "DatabaseNextSet", "", FIELD_NEXT },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NEXTIF")), "DatabaseNextSet", "", FIELD_NEXTIF },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PAGE")), "PageNumber", "", FIELD_PAGE },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("REF")), "GetReference", "", FIELD_REF },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("REVNUM")), "DocInfo.Revision", "", FIELD_REVNUM },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SAVEDATE")), "DocInfo.Change", "", FIELD_SAVEDATE },
+ // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SECTION")), "", "", FIELD_SECTION },
+ // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SECTIONPAGES")), "", "", FIELD_SECTIONPAGES },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SEQ")), "SetExpression", "SetExpression", FIELD_SEQ },
+ // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SET")), "","", FIELD_SET },
+ // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SKIPIF")),"", "", FIELD_SKIPIF },
+ // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("STYLEREF")),"", "", FIELD_STYLEREF },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SUBJECT")), "DocInfo.Subject", "", FIELD_SUBJECT },
+ // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SYMBOL")),"", "", FIELD_SYMBOL },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TEMPLATE")), "TemplateName", "", FIELD_TEMPLATE},
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TIME")), "DateTime", "", FIELD_TIME },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TITLE")), "DocInfo.Title", "", FIELD_TITLE },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("USERINITIALS")), "ExtendedUser", "", FIELD_USERINITIALS},
+ // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("USERADDRESS")), "", "", FIELD_USERADDRESS },
+ // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("USERNAME")), "ExtendedUser", "", FIELD_USERNAME }
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TOC")), "com.sun.star.text.ContentIndex", "", FIELD_TOC},
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TC")), "com.sun.star.text.ContentIndexMark", "", FIELD_TC},
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NUMCHARS")), "CharacterCount", "", FIELD_NUMCHARS},
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NUMWORDS")), "WordCount", "", FIELD_NUMWORDS},
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NUMPAGES")), "PageCount", "", FIELD_NUMPAGES},
+
+ // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")), "", "", FIELD_},
+
+ };
+ size_t nConversions = sizeof(aFields)/sizeof(FieldConversion);
+ for( size_t nConversion = 0; nConversion < nConversions; ++nConversion)
+ {
+ aFieldConversionMap.insert( FieldConversionMap_t::value_type(
+ aFields[nConversion].sWordCommand,
+ aFields[nConversion] ));
+ }
+
+ bFilled = true;
+ }
+ try
+ {
+ uno::Reference< uno::XInterface > xFieldInterface;
+ //at first determine the field type - erase leading and trailing whitespaces
+ ::rtl::OUString sCommand( pContext->GetCommand().trim() );
+ sal_Int32 nSpaceIndex = sCommand.indexOf( ' ' );
+ if( 0 <= nSpaceIndex )
+ sCommand = sCommand.copy( 0, nSpaceIndex );
+
+ FieldConversionMap_t::iterator aIt = aFieldConversionMap.find(sCommand);
+ if(aIt != aFieldConversionMap.end())
+ {
+ uno::Reference< beans::XPropertySet > xFieldProperties;
+ if( FIELD_HYPERLINK != aIt->second.eFieldId &&
+ FIELD_DOCPROPERTY != aIt->second.eFieldId &&
+ FIELD_TOC != aIt->second.eFieldId &&
+ FIELD_TC != aIt->second.eFieldId)
+ {
+ //add the service prefix
+ OUString sServiceName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextField."));
+ sServiceName += ::rtl::OUString::createFromAscii(aIt->second.cFieldServiceName );
+ xFieldInterface = m_xTextFactory->createInstance(sServiceName);
+ xFieldProperties = uno::Reference< beans::XPropertySet >( xFieldInterface, uno::UNO_QUERY_THROW);
+ }
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ switch( aIt->second.eFieldId )
+ {
+ case FIELD_ADDRESSBLOCK: break;
+ case FIELD_ADVANCE : break;
+ case FIELD_ASK :
+ {
+ //doesn the command contain a variable name?
+ ::rtl::OUString sVariable, sHint;
+
+ sVariable = lcl_ExctractAskVariableAndHint( pContext->GetCommand(), sHint );
+ if(sVariable.getLength())
+ {
+ // determine field master name
+ uno::Reference< beans::XPropertySet > xMaster = FindOrCreateFieldMaster(
+ "com.sun.star.text.FieldMaster.SetExpression", sVariable );
+
+ // 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(
+ rPropNameSupplier.GetName(PROP_IS_INPUT), uno::makeAny( true ));
+ // set the prompt
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_HINT),
+ uno::makeAny( sHint ));
+ }
+ else
+ {
+ //don't insert the field
+ //todo: maybe import a 'normal' input field here?
+ xFieldInterface = 0;
+ }
+ }
+ break;
+ case FIELD_AUTONUM :
+ case FIELD_AUTONUMLGL :
+ case FIELD_AUTONUMOUT :
+ {
+ //create a sequence field master "AutoNr"
+ uno::Reference< beans::XPropertySet > xMaster = FindOrCreateFieldMaster(
+ "com.sun.star.text.FieldMaster.SetExpression",
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AutoNr") ));
+
+ xMaster->setPropertyValue( rPropNameSupplier.GetName(PROP_SUB_TYPE),
+ uno::makeAny(text::SetVariableType::SEQUENCE));
+
+ //apply the numbering type
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(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 );
+ }
+ break;
+ case FIELD_AUTHOR :
+ {
+ xFieldProperties->setPropertyValue( rPropNameSupplier.GetName(PROP_FULL_NAME), uno::makeAny( true ));
+ ::rtl::OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" AUTHOR") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+ //PROP_CURRENT_PRESENTATION is set later anyway
+ }
+ }
+ break;
+ case FIELD_DATE:
+ {
+ //not fixed,
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_IS_FIXED),
+ uno::makeAny( false ));
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_IS_DATE),
+ uno::makeAny( true ));
+ SetNumberFormat( pContext->GetCommand(), xFieldProperties );
+ }
+ break;
+ case FIELD_COMMENTS :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" COMMENTS") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+ //PROP_CURRENT_PRESENTATION is set later anyway
+ }
+ }
+ break;
+ case FIELD_CREATEDATE :
+ {
+ SetNumberFormat( pContext->GetCommand(), xFieldProperties );
+ }
+ break;
+ case FIELD_DOCPROPERTY :
+ {
+ //some docproperties should be imported as document statistic fields, some as DocInfo fields
+ //others should be user fields
+ ::rtl::OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" DOCPROPERTY") );
+ if(sParam.getLength())
+ {
+ #define SET_ARABIC 0x01
+ #define SET_FULL_NAME 0x02
+ struct DocPropertyMap
+ {
+ const sal_Char* pDocPropertyName;
+ const sal_Char* pServiceName;
+ sal_uInt8 nFlags;
+ };
+ static const DocPropertyMap aDocProperties[] =
+ {
+ {"Author", "Author", SET_FULL_NAME},
+ {"CreateTime", "DocInfo.CreateDateTime", 0},
+ {"Characters", "CharacterCount", SET_ARABIC},
+ {"Comments", "DocInfo.Description", 0},
+ {"Keywords", "DocInfo.KeyWords", 0},
+ {"LastPrinted", "DocInfo.PrintDateTime", 0},
+ {"LastSavedBy", "DocInfo.ChangeAuthor", 0},
+ {"LastSavedTime", "DocInfo.ChangeDateTime", 0},
+ {"Paragraphs", "ParagraphCount", SET_ARABIC},
+ {"RevisionNumber", "DocInfo.Revision", 0},
+ {"Subject", "DocInfo.Subject", 0},
+ {"Template", "TemplateName", 0},
+ {"Title", "DocInfo.Title", 0},
+ {"TotalEditingTime", "DocInfo.EditTime", 9},
+ {"Words", "WordCount", SET_ARABIC}
+
+ //other available DocProperties:
+ //Bytes, Category, CharactersWithSpaces, Company
+ //HyperlinkBase,
+ //Lines, Manager, NameofApplication, ODMADocId, Pages,
+ //Security,
+ };
+ //search for a field mapping
+ ::rtl::OUString sFieldServiceName;
+ sal_uInt16 nMap = 0;
+ for( ; nMap < sizeof(aDocProperties) / sizeof(DocPropertyMap); ++nMap )
+ {
+ if(sParam.equalsAscii(aDocProperties[nMap].pDocPropertyName))
+ {
+ sFieldServiceName = ::rtl::OUString::createFromAscii(aDocProperties[nMap].pServiceName);
+ break;
+ }
+ }
+ ::rtl::OUString sServiceName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextField."));
+ bool bIsCustomField = false;
+ if(!sFieldServiceName.getLength())
+ {
+ //create a custom property field
+ sServiceName += ::rtl::OUString::createFromAscii("DocInfo.Custom");
+ bIsCustomField = true;
+ }
+ else
+ {
+ sServiceName += sFieldServiceName;
+ }
+ xFieldInterface = m_xTextFactory->createInstance(sServiceName);
+ xFieldProperties = uno::Reference< beans::XPropertySet >( xFieldInterface, uno::UNO_QUERY_THROW);
+ if( bIsCustomField )
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_NAME), uno::makeAny( sParam ));
+ else
+ {
+ if(0 != (aDocProperties[nMap].nFlags & SET_ARABIC))
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_NUMBERING_TYPE),
+ uno::makeAny( style::NumberingType::ARABIC ));
+ else if(0 != (aDocProperties[nMap].nFlags & SET_FULL_NAME))
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_FULL_NAME), uno::makeAny( true ));
+ }
+ }
+ }
+ #undef SET_ARABIC
+ #undef SET_FULL_NAME
+ break;
+ case FIELD_DOCVARIABLE :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" DOCVARIABLE") );
+ //create a user field and type
+ uno::Reference< beans::XPropertySet > xMaster =
+ FindOrCreateFieldMaster( "com.sun.star.text.FieldMaster.User", sParam );
+ 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_FILLIN :
+ {
+ sal_Int32 nIndex = 0;
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_HINT), uno::makeAny( pContext->GetCommand().getToken( 1, '\"', nIndex)));
+ }
+ break;
+ case FIELD_FILENAME:
+ {
+ sal_Int32 nNumberingTypeIndex = pContext->GetCommand().indexOf( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\\p")));
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_FILE_FORMAT),
+ uno::makeAny( nNumberingTypeIndex > 0 ? text::FilenameDisplayFormat::FULL : text::FilenameDisplayFormat::NAME ));
+ }
+ break;
+ case FIELD_FILESIZE : break;
+ case FIELD_FORMULA : break;
+ case FIELD_GOTOBUTTON : break;
+ case FIELD_HYPERLINK:
+ {
+ sal_Int32 nStartQuote = pContext->GetCommand().indexOf( '\"' );
+ sal_Int32 nEndQuote = nStartQuote < pContext->GetCommand().getLength() + 1 ? pContext->GetCommand().indexOf( '\"', nStartQuote + 1) : -1;
+ if( nEndQuote > 0)
+ pContext->SetHyperlinkURL( pContext->GetCommand().copy(nStartQuote + 1, nEndQuote - nStartQuote - 1) );
+ }
+ break;
+ case FIELD_IF : break;
+ case FIELD_INFO : break;
+ case FIELD_INCLUDEPICTURE: break;
+ case FIELD_KEYWORDS :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" KEYWORDS") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( 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 ");
+ ::rtl::OUString sMacro = pContext->GetCommand().getToken( 0, ' ', nIndex);
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_MACRO_NAME), uno::makeAny( sMacro ));
+
+ //extract quick help text
+ if( pContext->GetCommand().getLength() > nIndex + 1)
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_HINT),
+ uno::makeAny( pContext->GetCommand().copy( nIndex )));
+ }
+ }
+ break;
+ case FIELD_MERGEFIELD :
+ {
+ //todo: create a database field and fieldmaster pointing to a column, only
+ ::rtl::OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" MERGEFIELD") );
+ //create a user field and type
+ uno::Reference< beans::XPropertySet > xMaster =
+ FindOrCreateFieldMaster( "com.sun.star.text.FieldMaster.Database", sParam );
+
+ // xFieldProperties->setPropertyValue(
+ // ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FieldCode")),
+ // uno::makeAny( pContext->GetCommand().copy( nIndex + 1 )));
+ uno::Reference< text::XDependentTextField > xDependentField( xFieldInterface, uno::UNO_QUERY_THROW );
+ xDependentField->attachTextFieldMaster( xMaster );
+ m_bSetUserFieldContent = true;
+ }
+ break;
+ case FIELD_MERGEREC : break;
+ case FIELD_MERGESEQ : break;
+ case FIELD_NEXT : break;
+ case FIELD_NEXTIF : break;
+ case FIELD_PAGE :
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_NUMBERING_TYPE),
+ uno::makeAny( lcl_ParseNumberingType(pContext->GetCommand()) ));
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_SUB_TYPE),
+ uno::makeAny( text::PageNumberType_CURRENT ));
+
+ break;
+ case FIELD_REF:
+ {
+ ::rtl::OUString sBookmark = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" REF") );
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_REFERENCE_FIELD_SOURCE),
+ uno::makeAny( sal_Int16(text::ReferenceFieldSource::BOOKMARK)) );
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_SOURCE_NAME),
+ uno::makeAny( sBookmark) );
+ sal_Int16 nFieldPart = text::ReferenceFieldPart::TEXT;
+ ::rtl::OUString sValue;
+ if( lcl_FindInCommand( pContext->GetCommand(), 'p', sValue ))
+ {
+ //above-below
+ nFieldPart = text::ReferenceFieldPart::UP_DOWN;
+ }
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_REFERENCE_FIELD_PART ), uno::makeAny( nFieldPart ));
+ }
+ break;
+ case FIELD_REVNUM : break;
+ case FIELD_SAVEDATE :
+ SetNumberFormat( pContext->GetCommand(), xFieldProperties );
+ break;
+ case FIELD_SECTION : break;
+ case FIELD_SECTIONPAGES : break;
+ case FIELD_SEQ : break;
+ case FIELD_SET : break;
+ case FIELD_SKIPIF : break;
+ case FIELD_STYLEREF : break;
+ case FIELD_SUBJECT :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" SUBJECT") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+ //PROP_CURRENT_PRESENTATION is set later anyway
+ }
+ }
+ break;
+ case FIELD_SYMBOL : break;
+ case FIELD_TEMPLATE: break;
+ case FIELD_TIME :
+ SetNumberFormat( pContext->GetCommand(), xFieldProperties );
+ break;
+ case FIELD_TITLE :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" TITLE") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+ //PROP_CURRENT_PRESENTATION is set later anyway
+ }
+ }
+ break;
+ case FIELD_USERINITIALS:
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_USER_DATA_TYPE), uno::makeAny( text::UserDataPart::SHORTCUT ));
+ //todo: if initials are provided - set them as fixed content
+ ::rtl::OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" USERINITIALS") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( 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_USERNAME : //todo: user name is firstname + lastname
+ break;
+ case FIELD_TOC:
+ {
+ ::rtl::OUString sValue;
+ bool bTableOfFigures = false;
+ bool bHyperlinks = false;
+ bool bFromOutline = false;
+ bool bFromEntries = false;
+ sal_Int16 nMaxLevel = 10;
+ ::rtl::OUString sTemplate;
+ ::rtl::OUString sChapterNoSeparator;
+ // \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 ))
+ // { //todo: sValue contains the bookmark name - unsupported feature
+ // }
+ 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;
+ }
+ // \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, sucah 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;
+ UniString sParam( sValue );
+ xub_StrLen nIndex = 0;
+ sParam.GetToken( 0, '-', nIndex );
+ nMaxLevel = sal_Int16( sParam.Copy( nIndex ).ToInt32( ) );
+ }
+ // \p Defines the separator between the table entry and its page number
+ if( lcl_FindInCommand( pContext->GetCommand(), 'p', sValue ))
+ { }
+ // \s Builds a table of contents by using a sequence type
+ if( lcl_FindInCommand( pContext->GetCommand(), 's', sValue ))
+ { }
+ // \t Builds a table of contents by using style names other than the standard outline styles
+ if( lcl_FindInCommand( pContext->GetCommand(), 't', sValue ))
+ {
+ sal_Int32 nPos = 0;
+ ::rtl::OUString sToken = sValue.getToken( 1, '"', nPos);
+ sTemplate = sToken.getLength() ? sToken : sValue;
+ }
+ // \u Builds a table of contents by using the applied paragraph outline level
+ if( lcl_FindInCommand( pContext->GetCommand(), 'u', sValue ))
+ {
+ bFromOutline = 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 ))
+ // {
+ //todo: not supported
+ // }
+ // \x Preserve newline characters within table entries
+ // if( lcl_FindInCommand( pContext->GetCommand(), 'x', sValue ))
+ // {
+ //todo: unsupported
+ // }
+ // \z Hides page numbers within the table of contens when shown in Web Layout View
+ // if( lcl_FindInCommand( pContext->GetCommand(), 'z', sValue ))
+ // { //todo: unsupported feature }
+
+ //if there's no option then it should be created from outline
+ if( !bFromOutline && !bFromEntries && !sTemplate.getLength() )
+ bFromOutline = true;
+
+ uno::Reference< beans::XPropertySet > xTOC(
+ m_xTextFactory->createInstance(
+ bTableOfFigures ?
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.IllustrationsIndex")) :
+ ::rtl::OUString::createFromAscii(aIt->second.cFieldServiceName)),
+ uno::UNO_QUERY_THROW);
+ xTOC->setPropertyValue(rPropNameSupplier.GetName( PROP_TITLE ), uno::makeAny(::rtl::OUString()));
+ if( !bTableOfFigures )
+ {
+ xTOC->setPropertyValue( rPropNameSupplier.GetName( PROP_LEVEL ), uno::makeAny( nMaxLevel ) );
+ xTOC->setPropertyValue( rPropNameSupplier.GetName( PROP_CREATE_FROM_OUTLINE ), uno::makeAny( bFromOutline ));
+ xTOC->setPropertyValue( rPropNameSupplier.GetName( PROP_CREATE_FROM_MARKS ), uno::makeAny( bFromEntries ));
+ if( sTemplate.getLength() )
+ {
+ //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)
+ {
+ ::rtl::OUString sStyleName = sTemplate.getToken( 0, ',', nPosition );
+ //empty tokens should be skipped
+ while( !sStyleName.getLength() && nPosition > 0 )
+ sStyleName = sTemplate.getToken( 0, ',', nPosition );
+ nLevel = sTemplate.getToken( 0, ',', nPosition ).toInt32();
+ if( !nLevel )
+ nLevel = 1;
+ if( sStyleName.getLength() )
+ aMap.insert( TOCStyleMap::value_type(nLevel, sStyleName) );
+ }
+ uno::Reference< container::XIndexReplace> xParaStyles;
+ xTOC->getPropertyValue(rPropNameSupplier.GetName(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< rtl::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(rPropNameSupplier.GetName(PROP_CREATE_FROM_LEVEL_PARAGRAPH_STYLES), uno::makeAny( true ));
+
+ }
+ if(bHyperlinks || sChapterNoSeparator.getLength())
+ {
+ uno::Reference< container::XIndexReplace> xLevelFormats;
+ xTOC->getPropertyValue(rPropNameSupplier.GetName(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;
+ //create a copy of the level and add two new entries - hyperlink start and end
+ bool bChapterNoSeparator = sChapterNoSeparator.getLength() > 0;
+ 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 = rPropNameSupplier.GetName( PROP_TOKEN_TYPE );
+ aHyperlink[0].Value <<= rPropNameSupplier.GetName( PROP_TOKEN_HYPERLINK_START );
+ pNewLevel[0] = aHyperlink;
+ aHyperlink[0].Value <<= rPropNameSupplier.GetName( PROP_TOKEN_HYPERLINK_END );
+ pNewLevel[aNewLevel.getLength() -1] = aHyperlink;
+ }
+ if( bChapterNoSeparator )
+ {
+ beans::PropertyValues aChapterNo(2);
+ aChapterNo[0].Name = rPropNameSupplier.GetName( PROP_TOKEN_TYPE );
+ aChapterNo[0].Value <<= rPropNameSupplier.GetName( PROP_TOKEN_CHAPTER_INFO );
+ aChapterNo[1].Name = rPropNameSupplier.GetName( 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 = rPropNameSupplier.GetName( PROP_TOKEN_TYPE );
+ aChapterSeparator[0].Value <<= rPropNameSupplier.GetName( PROP_TOKEN_TEXT );
+ aChapterSeparator[1].Name = rPropNameSupplier.GetName( PROP_TEXT );
+ aChapterSeparator[1].Value <<= sChapterNoSeparator;
+ pNewLevel[aNewLevel.getLength() - (bHyperlinks ? 3 : 1)] = aChapterSeparator;
+ }
+ //copy the 'old' entries except the last (page no)
+ for( sal_Int32 nToken = 0; nToken < aLevel.getLength() - 1; ++nToken)
+ {
+ pNewLevel[nToken + 1] = aLevel[nToken];
+ }
+ //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];
+
+ xLevelFormats->replaceByIndex( nLevel, uno::makeAny( aNewLevel ) );
+ }
+ }
+ }
+ pContext->SetTOC( xTOC );
+ }
+ break;
+ case FIELD_TC :
+ {
+ uno::Reference< beans::XPropertySet > xTC(
+ m_xTextFactory->createInstance(
+ ::rtl::OUString::createFromAscii(aIt->second.cFieldServiceName)),
+ uno::UNO_QUERY_THROW);
+ ::rtl::OUString sTCText = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" TC") );
+ if( sTCText.getLength())
+ xTC->setPropertyValue(rPropNameSupplier.GetName(PROP_ALTERNATIVE_TEXT),
+ uno::makeAny(sTCText));
+ ::rtl::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.getLength() && nLevel >= 0 && nLevel <= 10 )
+ xTC->setPropertyValue(rPropNameSupplier.GetName(PROP_LEVEL), uno::makeAny( (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:
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_NUMBERING_TYPE),
+ uno::makeAny( lcl_ParseNumberingType(pContext->GetCommand()) ));
+ break;
+
+ }
+ }
+ //set the text field if there is any
+ pContext->SetTextField( uno::Reference< text::XTextField >( xFieldInterface, uno::UNO_QUERY ) );
+ }
+ catch( uno::Exception& rEx)
+ {
+ (void)rEx;
+ OSL_ENSURE( false, "Exception in CloseFieldCommand()" );
+ }
+ pContext->SetCommandCompleted();
+ }
+}
+/*-- 29.01.2007 11:33:16---------------------------------------------------
+//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.top();
+ OSL_ENSURE( pContext.get(), "no field context available");
+ if( pContext.get() )
+ {
+ bRet = pContext->GetTextField().is();
+ }
+ return bRet;
+}
+/*-- 01.09.2006 11:48:09---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::SetFieldResult( ::rtl::OUString& rResult )
+{
+ FieldContextPtr pContext = m_aFieldStack.top();
+ OSL_ENSURE( pContext.get(), "no field context available");
+ if( pContext.get() )
+ {
+ uno::Reference<text::XTextField> xTextField = pContext->GetTextField();
+ try
+ {
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ 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(
+ rPropNameSupplier.GetName(PROP_CONTENT),
+ uno::makeAny( rResult ));
+ }
+ else
+ {
+ uno::Reference< beans::XPropertySet > xFieldProperties( xTextField, uno::UNO_QUERY_THROW);
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_CURRENT_PRESENTATION),
+ uno::makeAny( rResult ));
+ }
+ }
+ catch( const beans::UnknownPropertyException& )
+ {
+ //some fields don't have a CurrentPresentation (DateTime)
+ }
+ }
+ }
+ catch( uno::Exception& )
+ {
+
+ }
+ }
+}
+
+/*-- 29.01.2007 11:33:17---------------------------------------------------
+//the end of field is reached (0x15 appeared) - the command might still be open
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PopFieldContext()
+{
+ FieldContextPtr pContext = m_aFieldStack.top();
+ OSL_ENSURE( pContext.get(), "no field context available");
+ if( pContext.get() )
+ {
+ if( !pContext->IsCommandCompleted() )
+ CloseFieldCommand();
+
+ //insert the field, TC or TOC
+ uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
+ if(xTextAppend.is())
+ {
+ try
+ {
+ uno::Reference< text::XTextCursor > xCrsr = xTextAppend->createTextCursorByRange(pContext->GetStartRange());
+ //remove the dummy character
+ xCrsr->goRight( 1, true );
+ xCrsr->setString( ::rtl::OUString() );
+ uno::Reference< text::XTextContent > xToInsert( pContext->GetTOC(), uno::UNO_QUERY );
+ if( xToInsert.is() )
+ {
+ xCrsr->gotoEnd( true );
+ xToInsert->attach( uno::Reference< text::XTextRange >( xCrsr, uno::UNO_QUERY_THROW ));
+ }
+ else
+ {
+ xToInsert = uno::Reference< text::XTextContent >(pContext->GetTC(), uno::UNO_QUERY);
+ if( !xToInsert.is() )
+ xToInsert = uno::Reference< text::XTextContent >(pContext->GetTextField(), uno::UNO_QUERY);
+ if( xToInsert.is() )
+ {
+ uno::Reference< text::XTextAppendAndConvert > xTextAppendAndConvert( xTextAppend, uno::UNO_QUERY_THROW );
+ xTextAppendAndConvert->appendTextContent( xToInsert, uno::Sequence< beans::PropertyValue >() );
+ }
+ else if(pContext->GetHyperlinkURL().getLength())
+ {
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ xCrsr->gotoEnd( true );
+
+ uno::Reference< beans::XPropertySet > xCrsrProperties( xCrsr, uno::UNO_QUERY_THROW );
+ xCrsrProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_HYPER_LINK_U_R_L), uno::
+ makeAny(pContext->GetHyperlinkURL()));
+ }
+ }
+ }
+ catch(const lang::IllegalArgumentException& )
+ {
+ OSL_ENSURE( false, "IllegalArgumentException in PopFieldContext()" );
+ }
+ catch(const uno::Exception& )
+ {
+ OSL_ENSURE( false, "exception in PopFieldContext()" );
+ }
+ }
+ //
+ //TOCs have to include all the imported content
+ //...
+ }
+ //remove the field context
+ m_aFieldStack.pop();
+}
+/*-- 11.06.2007 16:19:00---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::AddBookmark( const ::rtl::OUString& rBookmarkName, const ::rtl::OUString& rId )
+{
+ 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() )
+ {
+ static const rtl::OUString sBookmarkService(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.Bookmark"));
+ uno::Reference< text::XTextContent > xBookmark( m_xTextFactory->createInstance( sBookmarkService ), uno::UNO_QUERY_THROW );
+ uno::Reference< text::XTextCursor > xCursor;
+ uno::Reference< text::XText > xText = aBookmarkIter->second.m_xTextRange->getText();
+ if( aBookmarkIter->second.m_bIsStartOfText )
+ xCursor = xText->createTextCursorByRange( xText->getStart() );
+ else
+ {
+ xCursor = xText->createTextCursorByRange( aBookmarkIter->second.m_xTextRange );
+ xCursor->goRight( 1, false );
+ }
+
+ xCursor->gotoRange( xTextAppend->getEnd(), true );
+ uno::Reference< container::XNamed > xBkmNamed( xBookmark, uno::UNO_QUERY_THROW );
+ //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 );
+ }
+ else
+ {
+ //otherwise insert a text range as marker
+ uno::Reference< text::XTextCursor > xCursor = xTextAppend->createTextCursorByRange( xTextAppend->getEnd() );
+ bool bIsStart = !xCursor->goLeft(1, false);
+ uno::Reference< text::XTextRange > xCurrent = xCursor->getStart();
+ m_aBookmarkMap.insert(BookmarkMap_t::value_type( rId, BookmarkInsertPosition( bIsStart, rBookmarkName, xCurrent ) ));
+ }
+ }
+ catch( const uno::Exception& )
+ {
+ //TODO: What happens to bookmarks where start and end are at different XText objects?
+ }
+}
+/*-- 01.11.2006 14:57:44---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+GraphicImportPtr DomainMapper_Impl::GetGraphicImport(GraphicImportType eGraphicImportType)
+{
+ if(!m_pGraphicImport)
+ m_pGraphicImport.reset( new GraphicImport( m_xComponentContext, m_xTextFactory, m_rDMapper, eGraphicImportType ) );
+ return m_pGraphicImport;
+}
+/*-- 09.08.2007 10:19:45---------------------------------------------------
+ reset graphic import if the last import resulted in a shape, not a graphic
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::ResetGraphicImport()
+{
+ m_pGraphicImport.reset();
+}
+/*-- 01.11.2006 09:25:40---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::ImportGraphic(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());
+
+ //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 >() );
+
+ m_pGraphicImport.reset();
+}
+
+/*-- 28.12.2006 14:00:47---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::SetLineNumbering( sal_Int32 nLnnMod, sal_Int32 nLnc, sal_Int32 ndxaLnn )
+{
+ if( !m_bLineNumberingSet )
+ {
+ const PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ 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( rPropNameSupplier.GetName( PROP_IS_ON ), aTrue);
+ xProperties->setPropertyValue( rPropNameSupplier.GetName( PROP_COUNT_EMPTY_LINES ), aTrue );
+ xProperties->setPropertyValue( rPropNameSupplier.GetName( PROP_COUNT_LINES_IN_FRAMES ), uno::makeAny( false ) );
+ xProperties->setPropertyValue( rPropNameSupplier.GetName( PROP_INTERVAL ), uno::makeAny( static_cast< sal_Int16 >( nLnnMod )));
+ xProperties->setPropertyValue( rPropNameSupplier.GetName( PROP_DISTANCE ), uno::makeAny( ConversionHelper::convertTwipToMM100(ndxaLnn) ));
+ xProperties->setPropertyValue( rPropNameSupplier.GetName( PROP_NUMBER_POSITION ), uno::makeAny( style::LineNumberPosition::LEFT));
+ xProperties->setPropertyValue( rPropNameSupplier.GetName( PROP_NUMBERING_TYPE ), uno::makeAny( style::NumberingType::ARABIC));
+ xProperties->setPropertyValue( rPropNameSupplier.GetName( PROP_RESTART_AT_EACH_PAGE ), uno::makeAny( nLnc == 0 ));
+ }
+ catch( const uno::Exception& )
+ {}
+
+
+
+/*
+ { SW_PROP_NAME(UNO_NAME_CHAR_STYLE_NAME
+ { SW_PROP_NAME(UNO_NAME_COUNT_EMPTY_LINES
+ { SW_PROP_NAME(UNO_NAME_COUNT_LINES_IN_FRAMES
+ { SW_PROP_NAME(UNO_NAME_DISTANCE
+ { SW_PROP_NAME(UNO_NAME_IS_ON
+ { SW_PROP_NAME(UNO_NAME_INTERVAL
+ { SW_PROP_NAME(UNO_NAME_SEPARATOR_TEXT
+ { SW_PROP_NAME(UNO_NAME_NUMBER_POSITION
+ { SW_PROP_NAME(UNO_NAME_NUMBERING_TYPE
+ { SW_PROP_NAME(UNO_NAME_RESTART_AT_EACH_PAGE
+ { SW_PROP_NAME(UNO_NAME_SEPARATOR_INTERVAL
+*/
+ }
+ m_bLineNumberingSet = true;
+}
+/*-- 31.08.2007 13:50:49---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+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 : m_aPageMargins.gutter = nValue; break;
+ }
+}
+
+/*-- 31.08.2007 13:47:50---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+_PageMar::_PageMar()
+{
+ header = footer = top = bottom = ConversionHelper::convertTwipToMM100( sal_Int32(1440));
+ right = left = ConversionHelper::convertTwipToMM100( sal_Int32(1800));
+ gutter = 0;
+}
+
+/*-- 07.03.2008 12:07:27---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::RegisterFrameConversion(
+ uno::Reference< text::XTextRange > xFrameStartRange,
+ uno::Reference< text::XTextRange > xFrameEndRange,
+ uno::Sequence< beans::PropertyValue > aFrameProperties
+ )
+{
+ OSL_ENSURE(
+ !m_aFrameProperties.getLength() && !m_xFrameStartRange.is() && !m_xFrameEndRange.is(),
+ "frame properties not removed");
+ m_aFrameProperties = aFrameProperties;
+ m_xFrameStartRange = xFrameStartRange;
+ m_xFrameEndRange = xFrameEndRange;
+}
+/*-- 07.03.2008 12:07:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+bool DomainMapper_Impl::ExecuteFrameConversion()
+{
+ bool bRet = false;
+ if( m_xFrameStartRange.is() && m_xFrameEndRange.is() )
+ {
+ bRet = true;
+ try
+ {
+ uno::Reference< text::XTextAppendAndConvert > xTextAppendAndConvert( GetTopTextAppend(), uno::UNO_QUERY_THROW );
+ xTextAppendAndConvert->convertToTextFrame(
+ m_xFrameStartRange,
+ m_xFrameEndRange,
+ m_aFrameProperties );
+ }
+ catch( const uno::Exception& rEx)
+ {
+ (void)rEx;
+ bRet = false;
+ }
+ m_xFrameStartRange = 0;
+ m_xFrameEndRange = 0;
+ m_aFrameProperties.realloc( 0 );
+ }
+ return bRet;
+}
+
+void DomainMapper_Impl::AddNewRedline( )
+{
+ RedlineParamsPtr pNew( new RedlineParams );
+ pNew->m_nToken = ooxml::OOXML_mod;
+ if ( !m_bIsParaChange )
+ {
+#if DEBUG
+ clog << "REDLINE: Adding a new redline to stack" << endl;
+#endif
+ m_aRedlines.push_back( pNew );
+ }
+ else
+ {
+#if DEBUG
+ clog << "REDLINE: Setting a new paragraph redline" << endl;
+#endif
+ m_pParaRedline.swap( pNew );
+ }
+}
+
+RedlineParamsPtr DomainMapper_Impl::GetTopRedline( )
+{
+ RedlineParamsPtr pResult;
+ if ( !m_bIsParaChange && m_aRedlines.size( ) > 0 )
+ pResult = m_aRedlines.back( );
+ else if ( m_bIsParaChange )
+ pResult = m_pParaRedline;
+ return pResult;
+}
+
+sal_Int32 DomainMapper_Impl::GetCurrentRedlineToken( )
+{
+ sal_Int32 nToken = 0;
+ RedlineParamsPtr pCurrent( GetTopRedline( ) );
+ if ( pCurrent.get( ) )
+ nToken = pCurrent->m_nToken;
+ return nToken;
+}
+
+void DomainMapper_Impl::SetCurrentRedlineAuthor( rtl::OUString sAuthor )
+{
+ RedlineParamsPtr pCurrent( GetTopRedline( ) );
+ if ( pCurrent.get( ) )
+ pCurrent->m_sAuthor = sAuthor;
+}
+
+void DomainMapper_Impl::SetCurrentRedlineDate( rtl::OUString sDate )
+{
+ RedlineParamsPtr pCurrent( GetTopRedline( ) );
+ if ( pCurrent.get( ) )
+ pCurrent->m_sDate = sDate;
+}
+
+void DomainMapper_Impl::SetCurrentRedlineId( sal_Int32 sId )
+{
+ RedlineParamsPtr pCurrent( GetTopRedline( ) );
+ if ( pCurrent.get( ) )
+ pCurrent->m_nId = sId;
+}
+
+void DomainMapper_Impl::SetCurrentRedlineToken( sal_Int32 nToken )
+{
+ RedlineParamsPtr pCurrent( GetTopRedline( ) );
+ if ( pCurrent.get( ) )
+ pCurrent->m_nToken = nToken;
+}
+
+/*-- 19.03.2008 11:35:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::RemoveCurrentRedline( )
+{
+ if ( m_aRedlines.size( ) > 0 )
+ {
+#if DEBUG
+ clog << "REDLINE: Removing back redline" << endl;
+#endif
+ m_aRedlines.pop_back( );
+ }
+}
+
+void DomainMapper_Impl::ResetParaRedline( )
+{
+ if ( m_pParaRedline.get( ) )
+ {
+#if DEBUG
+ clog << "REDLINE: Cleaning the para redline" << endl;
+#endif
+ RedlineParamsPtr pEmpty;
+ m_pParaRedline.swap( pEmpty );
+ }
+}
+
+}}
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
new file mode 100644
index 000000000000..ae0dec6e1e54
--- /dev/null
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -0,0 +1,539 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_DMAPPER_DOMAINMAPPER_IMPL_HXX
+#define INCLUDED_DMAPPER_DOMAINMAPPER_IMPL_HXX
+
+#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/text/XTextAppendAndConvert.hpp>
+#include <com/sun/star/text/XTextFrame.hpp>
+#include <com/sun/star/style/TabStop.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <vector>
+#include <stack>
+
+#ifndef INCLUDED_RESOURCESIDS
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#endif
+#include <dmapper/DomainMapper.hxx>
+#include <DomainMapperTableManager.hxx>
+#include <PropertyMap.hxx>
+#include <FontTable.hxx>
+#include <ListTable.hxx>
+#include <LFOTable.hxx>
+#include <StyleSheetTable.hxx>
+#include <ThemeTable.hxx>
+#include <SettingsTable.hxx>
+#include <GraphicImport.hxx>
+#include <OLEHandler.hxx>
+#include <map>
+
+#include <string.h>
+
+namespace com{ namespace sun{ namespace star{
+ namespace awt{
+ struct Size;
+ }
+ namespace lang{
+ class XMultiServiceFactory;
+ struct Locale;
+ }
+ namespace text
+ {
+ class XTextField;
+ }
+ namespace beans{ class XPropertySet;}
+}}}
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace com::sun::star;
+
+//#define TWIP_TO_MM100(TWIP) ((TWIP) >= 0 ? (((TWIP)*127L+36L)/72L) : (((TWIP)*127L-36L)/72L))
+//sal_Int32 lcl_convertToMM100(sal_Int32 _t);
+
+struct _PageMar
+{
+ sal_Int32 top;
+ sal_Int32 right;
+ sal_Int32 bottom;
+ sal_Int32 left;
+ sal_Int32 header;
+ sal_Int32 footer;
+ sal_Int32 gutter;
+ 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
+};
+
+/*-- 14.06.2006 07:42:52---------------------------------------------------
+ property stack element
+ -----------------------------------------------------------------------*/
+enum ContextType
+{
+ CONTEXT_SECTION,
+ CONTEXT_PARAGRAPH,
+ CONTEXT_CHARACTER,
+ CONTEXT_STYLESHEET,
+ CONTEXT_LIST,
+ NUMBER_OF_CONTEXTS
+};
+
+enum BreakType
+{
+ PAGE_BREAK,
+ COLUMN_BREAK
+};
+/*-----------------29.01.2007 11:47-----------------
+ field stack element
+ * --------------------------------------------------*/
+class FieldContext
+{
+ bool m_bFieldCommandCompleted;
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > m_xStartRange;
+
+ ::rtl::OUString m_sCommand;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextField > m_xTextField;
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_xTOC;//TOX
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_xTC;//TOX entry
+ ::rtl::OUString m_sHyperlinkURL;
+
+public:
+ FieldContext(::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xStart);
+ ~FieldContext();
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > GetStartRange() const { return m_xStartRange; }
+
+ void AppendCommand(const ::rtl::OUString& rPart);
+ const ::rtl::OUString& GetCommand() const {return m_sCommand; }
+
+ void SetCommandCompleted() { m_bFieldCommandCompleted = true; }
+ bool IsCommandCompleted() const { return m_bFieldCommandCompleted; }
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextField > GetTextField() const { return m_xTextField;}
+ void SetTextField(::com::sun::star::uno::Reference< ::com::sun::star::text::XTextField > xTextField) { m_xTextField = xTextField;}
+
+ void SetTOC( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xTOC ) { m_xTOC = xTOC; }
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > GetTOC() { return m_xTOC; }
+
+ void SetTC( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xTC ) { m_xTC = xTC; }
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > GetTC( ) { return m_xTC; }
+
+ void SetHyperlinkURL( const ::rtl::OUString& rURL ) { m_sHyperlinkURL = rURL; }
+ const ::rtl::OUString& GetHyperlinkURL() { return m_sHyperlinkURL; }
+
+};
+
+struct TextAppendContext
+{
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextAppend > xTextAppend;
+ ParagraphPropertiesPtr pLastParagraphProperties;
+
+ TextAppendContext( const ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextAppend >& xAppend ) :
+ xTextAppend( xAppend ){}
+};
+
+typedef boost::shared_ptr<FieldContext> FieldContextPtr;
+
+typedef std::stack<ContextType> ContextStack;
+typedef std::stack<PropertyMapPtr> PropertyStack;
+typedef std::stack< TextAppendContext > TextAppendStack;
+typedef std::stack<FieldContextPtr> FieldStack;
+typedef std::stack< com::sun::star::uno::Reference< com::sun::star::text::XTextContent > > TextContentStack;
+
+/*-- 18.07.2006 08:49:08---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+class FIB
+{
+ sal_Int32 aFIBData[ NS_rtf::LN_LCBSTTBFUSSR - NS_rtf::LN_WIDENT + 1];
+ sal_Int32 nLNCHS;
+ public:
+ FIB() :
+ nLNCHS( 0 )
+ {
+ memset(&aFIBData, 0x00, sizeof(aFIBData));
+ }
+
+ sal_Int32 GetLNCHS() const {return nLNCHS;}
+ void SetLNCHS(sal_Int32 nValue) {nLNCHS = nValue;}
+ sal_Int32 GetData( Id nName );
+ void SetData( Id nName, sal_Int32 nValue );
+};
+
+/*-- 17.07.2006 09:14:13---------------------------------------------------
+ extended tab stop struct
+ -----------------------------------------------------------------------*/
+struct DeletableTabStop : public ::com::sun::star::style::TabStop
+{
+ bool bDeleted;
+ DeletableTabStop() :
+ bDeleted( false ){}
+ DeletableTabStop( const ::com::sun::star::style::TabStop& rTabStop ) :
+ TabStop( rTabStop ),
+ bDeleted( false ){}
+};
+/*-- 12.06.2007 07:15:31---------------------------------------------------
+ /// helper to remember bookmark start position
+ -----------------------------------------------------------------------*/
+struct BookmarkInsertPosition
+{
+ bool m_bIsStartOfText;
+ ::rtl::OUString m_sBookmarkName;
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > m_xTextRange;
+ BookmarkInsertPosition(bool bIsStartOfText, const ::rtl::OUString& rName, ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xTextRange):
+ m_bIsStartOfText( bIsStartOfText ),
+ m_sBookmarkName( rName ),
+ m_xTextRange( xTextRange )
+ {}
+};
+
+struct RedlineParams
+{
+ ::rtl::OUString m_sAuthor;
+ ::rtl::OUString m_sDate;
+ sal_Int32 m_nId;
+ sal_Int32 m_nToken;
+};
+typedef boost::shared_ptr< RedlineParams > RedlineParamsPtr;
+
+/*-- 03.03.2008 11:01:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+struct LineNumberSettings
+{
+ bool bIsOn;
+ sal_Int32 nDistance;
+ sal_Int32 nInterval;
+ sal_Int32 bRestartAtEachPage;
+ sal_Int32 nStartValue;
+ LineNumberSettings() :
+ bIsOn(false)
+ ,nDistance(0)
+ ,nInterval(0)
+ ,bRestartAtEachPage(true)
+ ,nStartValue(1)
+ {}
+
+};
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+class DomainMapper;
+class DomainMapper_Impl
+{
+public:
+ typedef TableManager< ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange >, PropertyMapPtr > TableManager_t;
+ typedef TableDataHandler< ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange >, TablePropertyMapPtr > TableDataHandler_t;
+ typedef std::map < ::rtl::OUString, BookmarkInsertPosition > BookmarkMap_t;
+
+private:
+ SourceDocumentType m_eDocumentType;
+ DomainMapper& m_rDMapper;
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextDocument > m_xTextDocument;
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_xDocumentSettings;
+ ::com::sun::star::uno::Reference < ::com::sun::star::lang::XMultiServiceFactory > m_xTextFactory;
+ ::com::sun::star::uno::Reference < com::sun::star::uno::XComponentContext > m_xComponentContext;
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > m_xPageStyles;
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XText > m_xBodyText;
+
+ TextAppendStack m_aTextAppendStack;
+
+ TextContentStack
+ m_aAnchoredStack;
+
+ FieldStack m_aFieldStack;
+ bool m_bFieldMode;
+ bool m_bSetUserFieldContent;
+ bool m_bIsFirstSection;
+ bool m_bIsColumnBreakDeferred;
+ bool m_bIsPageBreakDeferred;
+ bool m_bIsInShape;
+ bool m_bShapeContextAdded;
+
+ LineNumberSettings m_aLineNumberSettings;
+
+ BookmarkMap_t m_aBookmarkMap;
+
+ _PageMar m_aPageMargins;
+
+
+ DomainMapperTableManager m_TableManager;
+
+ //each context needs a stack of currently used attributes
+ FIB m_aFIB;
+ PropertyStack m_aPropertyStacks[NUMBER_OF_CONTEXTS];
+ ContextStack m_aContextStack;
+ FontTablePtr m_pFontTable;
+ ListTablePtr m_pListTable;
+ LFOTablePtr m_pLFOTable;
+ StyleSheetTablePtr m_pStyleSheetTable;
+ ThemeTablePtr m_pThemeTable;
+ GraphicImportPtr m_pGraphicImport;
+ SettingsTablePtr m_pSettingsTable;
+
+ PropertyMapPtr m_pTopContext;
+
+ ::std::vector<DeletableTabStop> m_aCurrentTabStops;
+ sal_uInt32 m_nCurrentTabStopIndex;
+ ::rtl::OUString m_sCurrentParaStyleId;
+ bool m_bInStyleSheetImport; //in import of fonts, styles, lists or lfos
+ bool m_bInAnyTableImport; //in import of fonts, styles, lists or lfos
+
+ bool m_bLineNumberingSet;
+ bool m_bIsInFootnoteProperties;
+ bool m_bIsCustomFtnMark;
+
+ //registered frame properties
+ ::com::sun::star::uno::Sequence< beans::PropertyValue > m_aFrameProperties;
+ ::com::sun::star::uno::Reference< text::XTextRange > m_xFrameStartRange;
+ ::com::sun::star::uno::Reference< text::XTextRange > m_xFrameEndRange;
+
+ // Redline stack
+ std::vector< RedlineParamsPtr > m_aRedlines;
+ RedlineParamsPtr m_pParaRedline;
+ bool m_bIsParaChange;
+
+
+ //annotation import
+ uno::Reference< beans::XPropertySet > m_xAnnotationField;
+
+ void GetCurrentLocale(::com::sun::star::lang::Locale& rLocale);
+ void SetNumberFormat( const ::rtl::OUString& rCommand,
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xPropertySet );
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >
+ FindOrCreateFieldMaster( const sal_Char* pFieldMasterService,
+ const ::rtl::OUString& rFieldMasterName )
+ throw(::com::sun::star::uno::Exception);
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > GetDocumentSettings();
+
+public:
+ DomainMapper_Impl(
+ DomainMapper& rDMapper,
+ uno::Reference < uno::XComponentContext > xContext,
+ uno::Reference< lang::XComponent > xModel,
+ SourceDocumentType eDocumentType );
+ DomainMapper_Impl();
+ virtual ~DomainMapper_Impl();
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > GetPageStyles();
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XText > GetBodyText();
+ ::com::sun::star::uno::Reference < ::com::sun::star::lang::XMultiServiceFactory > GetTextFactory() const
+ {
+ return m_xTextFactory;
+ }
+ ::com::sun::star::uno::Reference < com::sun::star::uno::XComponentContext > GetComponentContext() const
+ {
+ return m_xComponentContext;
+ }
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextDocument > GetTextDocument() const
+ {
+ return m_xTextDocument;
+ }
+ void SetDocumentSettingsProperty( const ::rtl::OUString& rPropName, const uno::Any& rValue );
+
+ void CreateRedline( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xRange, RedlineParamsPtr& pRedline );
+
+ void CheckParaRedline( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xRange );
+
+ void CheckRedline( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xRange );
+
+ void StartParaChange( );
+ void EndParaChange( );
+
+ void deferBreak( BreakType deferredBreakType );
+ bool isBreakDeferred( BreakType deferredBreakType );
+ void clearDeferredBreaks();
+ void finishParagraph( PropertyMapPtr pPropertyMap );
+ void appendTextPortion( const ::rtl::OUString& rString, PropertyMapPtr pPropertyMap );
+ void appendTextContent( const ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent >,
+ const uno::Sequence< beans::PropertyValue > );
+ void appendOLE( const ::rtl::OUString& rStreamName, OLEHandlerPtr pOleHandler );
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > appendTextSectionAfter(
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange >& xBefore );
+
+// void appendTextSection();
+
+ FIB& GetFIB() {return m_aFIB;}
+ // push the new properties onto the stack and make it the 'current' property map
+ void PushProperties(ContextType eId);
+ void PushStyleProperties(PropertyMapPtr pStyleProperties);
+ void PushListProperties(PropertyMapPtr pListProperties);
+ void PopProperties(ContextType eId);
+
+ ContextType GetTopContextType() const { return m_aContextStack.top(); }
+ PropertyMapPtr GetTopContext()
+ {
+ return m_pTopContext;
+ }
+ PropertyMapPtr GetTopContextOfType(ContextType eId);
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextAppend > GetTopTextAppend();
+
+ FontTablePtr GetFontTable()
+ {
+ if(!m_pFontTable)
+ m_pFontTable.reset(new FontTable());
+ return m_pFontTable;
+ }
+ StyleSheetTablePtr GetStyleSheetTable()
+ {
+ if(!m_pStyleSheetTable)
+ m_pStyleSheetTable.reset(new StyleSheetTable( m_rDMapper, m_xTextDocument ));
+ return m_pStyleSheetTable;
+ }
+ ListTablePtr GetListTable();
+ LFOTablePtr GetLFOTable()
+ {
+ if(!m_pLFOTable)
+ m_pLFOTable.reset( new LFOTable );
+ return m_pLFOTable;
+ }
+ ThemeTablePtr GetThemeTable()
+ {
+ if(!m_pThemeTable)
+ m_pThemeTable.reset( new ThemeTable );
+ return m_pThemeTable;
+ }
+
+ SettingsTablePtr GetSettingsTable( )
+ {
+ if ( !m_pSettingsTable )
+ m_pSettingsTable.reset( new SettingsTable );
+ return m_pSettingsTable;
+ }
+
+ GraphicImportPtr GetGraphicImport( GraphicImportType eGraphicImportType );
+ void ResetGraphicImport();
+ // this method deletes the current m_pGraphicImport after import
+ void ImportGraphic(writerfilter::Reference< Properties>::Pointer_t, GraphicImportType eGraphicImportType );
+
+ void InitTabStopFromStyle( const ::com::sun::star::uno::Sequence< ::com::sun::star::style::TabStop >& rInitTabStops );
+ void ModifyCurrentTabStop( Id nId, sal_Int32 nValue);
+ void IncorporateTabStop( const DeletableTabStop &aTabStop );
+ ::com::sun::star::uno::Sequence< ::com::sun::star::style::TabStop > GetCurrentTabStopAndClear();
+ void NextTabStop() {++m_nCurrentTabStopIndex;}
+
+ void SetCurrentParaStyleId(::rtl::OUString sStringValue) {m_sCurrentParaStyleId = sStringValue;}
+ ::rtl::OUString GetCurrentParaStyleId() const {return m_sCurrentParaStyleId;}
+
+ ::com::sun::star::uno::Any GetPropertyFromStyleSheet(PropertyIds eId);
+ 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;}
+
+ void PushShapeContext( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
+ void PopShapeContext();
+
+ void PushPageHeader(SectionPropertyMap::PageType eType);
+ void PushPageFooter(SectionPropertyMap::PageType eType);
+
+ void PopPageHeaderFooter();
+
+ void PushFootOrEndnote( bool bIsFootnote );
+ void PopFootOrEndnote();
+
+ void PushAnnotation();
+ void PopAnnotation();
+
+ //field context starts with a 0x13
+ void PushFieldContext();
+ //the current field context waits for the completion of the command
+ bool IsOpenFieldCommand() const;
+ bool IsOpenField() const;
+ //collect the pieces of the command
+ void AppendFieldCommand(::rtl::OUString& rPartOfCommand);
+ //the field command has to be closed (0x14 appeared)
+ void CloseFieldCommand();
+ //the _current_ fields require a string type result while TOCs accept richt results
+ bool IsFieldResultAsString();
+ //apply the result text to the related field
+ void SetFieldResult( ::rtl::OUString& rResult );
+ //the end of field is reached (0x15 appeared) - the command might still be open
+ void PopFieldContext();
+
+ void AddBookmark( const ::rtl::OUString& rBookmarkName, const ::rtl::OUString& rId );
+
+ DomainMapperTableManager& getTableManager() { return m_TableManager; }
+
+ void SetLineNumbering( sal_Int32 nLnnMod, sal_Int32 nLnc, sal_Int32 ndxaLnn );
+ bool IsLineNumberingSet() const {return m_bLineNumberingSet;}
+
+ DeletableTabStop m_aCurrentTabStop;
+
+ bool IsOOXMLImport() const { return m_eDocumentType == DOCUMENT_OOXML; }
+
+ 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;}
+
+ void SetCustomFtnMark(bool bSet) { m_bIsCustomFtnMark = bSet; }
+ bool IsCustomFtnMark() const { return m_bIsCustomFtnMark; }
+
+ void RegisterFrameConversion(
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xFrameStartRange,
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xFrameEndRange,
+ ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > aFrameProperties
+ );
+ bool ExecuteFrameConversion();
+
+ void AddNewRedline( );
+
+ RedlineParamsPtr GetTopRedline( );
+
+ sal_Int32 GetCurrentRedlineToken( );
+ void SetCurrentRedlineAuthor( rtl::OUString sAuthor );
+ void SetCurrentRedlineDate( rtl::OUString sDate );
+ void SetCurrentRedlineId( sal_Int32 nId );
+ void SetCurrentRedlineToken( sal_Int32 nToken );
+ void RemoveCurrentRedline( );
+ void ResetParaRedline( );
+
+};
+} //namespace dmapper
+} //namespace writerfilter
+#endif
diff --git a/writerfilter/source/dmapper/FontTable.cxx b/writerfilter/source/dmapper/FontTable.cxx
new file mode 100644
index 000000000000..c5a800769078
--- /dev/null
+++ b/writerfilter/source/dmapper/FontTable.cxx
@@ -0,0 +1,677 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <FontTable.hxx>
+#ifndef INCLUDED_RESOURCESIDS
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#endif
+#include <vector>
+#include <stdio.h>
+
+namespace writerfilter {
+namespace dmapper
+{
+
+struct FontTable_Impl
+{
+ std::vector< FontEntry > aFontEntries;
+ FontEntry* pCurrentEntry;
+ FontTable_Impl() :
+ pCurrentEntry(0){}
+};
+/*-- 19.06.2006 12:04:32---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+FontTable::FontTable() :
+ m_pImpl( new FontTable_Impl )
+{
+}
+/*-- 19.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+FontTable::~FontTable()
+{
+ delete m_pImpl;
+}
+/*-- 19.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::attribute(Id Name, Value & val)
+{
+ OSL_ENSURE( m_pImpl->pCurrentEntry, "current entry has to be set here");
+ if(!m_pImpl->pCurrentEntry)
+ return ;
+ int nIntValue = val.getInt();
+ ::rtl::OUString sValue = val.getString();
+ //printf ( "FontTable::attribute(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)Name, (unsigned int)nIntValue, ::rtl::OUStringToOString(sValue, RTL_TEXTENCODING_DONTKNOW).getStr());
+ /* WRITERFILTERSTATUS: table: FontTable_attributedata */
+ switch(Name)
+ {
+// case NS_rtf::LN_ISTD: break;
+// case NS_rtf::LN_ISTARTAT: break;
+// case NS_rtf::LN_NFC: break;
+// case NS_rtf::LN_JC: break;
+// case NS_rtf::LN_FLEGAL: break;
+// case NS_rtf::LN_FNORESTART: break;
+// case NS_rtf::LN_FPREV: break;
+// case NS_rtf::LN_FPREVSPACE: break;
+// case NS_rtf::LN_FWORD6: break;
+// case NS_rtf::LN_UNUSED5_7: break;
+// case NS_rtf::LN_RGBXCHNUMS: break;
+// case NS_rtf::LN_IXCHFOLLOW: break;
+// case NS_rtf::LN_DXASPACE: break;
+// case NS_rtf::LN_DXAINDENT: break;
+// case NS_rtf::LN_CBGRPPRLCHPX: break;
+// case NS_rtf::LN_CBGRPPRLPAPX: break;
+// case NS_rtf::LN_LSID: break;
+// case NS_rtf::LN_TPLC: break;
+// case NS_rtf::LN_RGISTD: break;
+// case NS_rtf::LN_FSIMPLELIST: break;
+// case NS_rtf::LN_FRESTARTHDN: break;
+// case NS_rtf::LN_UNSIGNED26_2: break;
+// case NS_rtf::LN_ILVL: break;
+// case NS_rtf::LN_FSTARTAT: break;
+// case NS_rtf::LN_FFORMATTING: break;
+// case NS_rtf::LN_UNSIGNED4_6: break;
+// case NS_rtf::LN_UNUSED4: break;
+// case NS_rtf::LN_UNUSED8: break;
+// case NS_rtf::LN_CLFOLVL: break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_CBFFNM1:
+ m_pImpl->pCurrentEntry->sFontName1 = sValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_PRQ:
+ m_pImpl->pCurrentEntry->nPitchRequest = static_cast<sal_Int16>( nIntValue );
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_FTRUETYPE:
+ m_pImpl->pCurrentEntry->bTrueType = nIntValue == 1 ? true : false;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_UNUSED1_3: //unused
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FF: //unused
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_UNUSED1_7: //unused
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_WWEIGHT:
+ m_pImpl->pCurrentEntry->nBaseWeight = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_CHS:
+ m_pImpl->pCurrentEntry->nTextEncoding = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_IXCHSZALT:
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_PANOSE:
+ m_pImpl->pCurrentEntry->sPanose += sValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_FS:
+ m_pImpl->pCurrentEntry->sFontSignature += sValue;
+ break;
+// case NS_rtf::LN_STI: break;
+// case NS_rtf::LN_FSCRATCH: break;
+// case NS_rtf::LN_FINVALHEIGHT: break;
+// case NS_rtf::LN_FHASUPE: break;
+// case NS_rtf::LN_FMASSCOPY: break;
+// case NS_rtf::LN_SGC: break;
+// case NS_rtf::LN_ISTDBASE: break;
+// case NS_rtf::LN_CUPX: break;
+// case NS_rtf::LN_ISTDNEXT: break;
+// case NS_rtf::LN_BCHUPE: break;
+// case NS_rtf::LN_FAUTOREDEF: break;
+// case NS_rtf::LN_FHIDDEN: break;
+// case NS_rtf::LN_UNUSED8_3: break;
+// case NS_rtf::LN_CSTD: break;
+// case NS_rtf::LN_CBSTDBASEINFILE: break;
+// case NS_rtf::LN_FSTDSTYLENAMESWRITTEN: break;
+// case NS_rtf::LN_UNUSED4_2: break;
+// case NS_rtf::LN_STIMAXWHENSAVED: break;
+// case NS_rtf::LN_ISTDMAXFIXEDWHENSAVED: break;
+// case NS_rtf::LN_NVERBUILTINNAMESWHENSAVED: break;
+// case NS_rtf::LN_RGFTCSTANDARDCHPSTSH: break;
+// case NS_rtf::LN_WIDENT: break;
+// case NS_rtf::LN_NFIB: break;
+// case NS_rtf::LN_NPRODUCT: break;
+// case NS_rtf::LN_LID: break;
+// case NS_rtf::LN_PNNEXT: break;
+// case NS_rtf::LN_FDOT: break;
+// case NS_rtf::LN_FGLSY: break;
+// case NS_rtf::LN_FCOMPLEX: break;
+// case NS_rtf::LN_FHASPIC: break;
+// case NS_rtf::LN_CQUICKSAVES: break;
+// case NS_rtf::LN_FENCRYPTED: break;
+// case NS_rtf::LN_FWHICHTBLSTM: break;
+// case NS_rtf::LN_FREADONLYRECOMMENDED: break;
+// case NS_rtf::LN_FWRITERESERVATION: break;
+// case NS_rtf::LN_FEXTCHAR: break;
+// case NS_rtf::LN_FLOADOVERRIDE: break;
+// case NS_rtf::LN_FFAREAST: break;
+// case NS_rtf::LN_FCRYPTO: break;
+// case NS_rtf::LN_NFIBBACK: break;
+// case NS_rtf::LN_LKEY: break;
+// case NS_rtf::LN_ENVR: break;
+// case NS_rtf::LN_FMAC: break;
+// case NS_rtf::LN_FEMPTYSPECIAL: break;
+// case NS_rtf::LN_FLOADOVERRIDEPAGE: break;
+// case NS_rtf::LN_FFUTURESAVEDUNDO: break;
+// case NS_rtf::LN_FWORD97SAVED: break;
+// case NS_rtf::LN_FSPARE0: break;
+// case NS_rtf::LN_CHSTABLES: break;
+// case NS_rtf::LN_FCMIN: break;
+// case NS_rtf::LN_FCMAC: break;
+// case NS_rtf::LN_CSW: break;
+// case NS_rtf::LN_WMAGICCREATED: break;
+// case NS_rtf::LN_WMAGICREVISED: break;
+// case NS_rtf::LN_WMAGICCREATEDPRIVATE: break;
+// case NS_rtf::LN_WMAGICREVISEDPRIVATE: break;
+// case NS_rtf::LN_PNFBPCHPFIRST_W6: break;
+// case NS_rtf::LN_PNCHPFIRST_W6: break;
+// case NS_rtf::LN_CPNBTECHP_W6: break;
+// case NS_rtf::LN_PNFBPPAPFIRST_W6: break;
+// case NS_rtf::LN_PNPAPFIRST_W6: break;
+// case NS_rtf::LN_CPNBTEPAP_W6: break;
+// case NS_rtf::LN_PNFBPLVCFIRST_W6: break;
+// case NS_rtf::LN_PNLVCFIRST_W6: break;
+// case NS_rtf::LN_CPNBTELVC_W6: break;
+// case NS_rtf::LN_LIDFE: break;
+// case NS_rtf::LN_CLW: break;
+// case NS_rtf::LN_CBMAC: break;
+// case NS_rtf::LN_LPRODUCTCREATED: break;
+// case NS_rtf::LN_LPRODUCTREVISED: break;
+// case NS_rtf::LN_CCPTEXT: break;
+// case NS_rtf::LN_CCPFTN: break;
+// case NS_rtf::LN_CCPHDD: break;
+// case NS_rtf::LN_CCPMCR: break;
+// case NS_rtf::LN_CCPATN: break;
+// case NS_rtf::LN_CCPEDN: break;
+// case NS_rtf::LN_CCPTXBX: break;
+// case NS_rtf::LN_CCPHDRTXBX: break;
+// case NS_rtf::LN_PNFBPCHPFIRST: break;
+// case NS_rtf::LN_PNCHPFIRST: break;
+// case NS_rtf::LN_CPNBTECHP: break;
+// case NS_rtf::LN_PNFBPPAPFIRST: break;
+// case NS_rtf::LN_PNPAPFIRST: break;
+// case NS_rtf::LN_CPNBTEPAP: break;
+// case NS_rtf::LN_PNFBPLVCFIRST: break;
+// case NS_rtf::LN_PNLVCFIRST: break;
+// case NS_rtf::LN_CPNBTELVC: break;
+// case NS_rtf::LN_FCISLANDFIRST: break;
+// case NS_rtf::LN_FCISLANDLIM: break;
+// case NS_rtf::LN_CFCLCB: break;
+// case NS_rtf::LN_FCSTSHFORIG: break;
+// case NS_rtf::LN_LCBSTSHFORIG: break;
+// case NS_rtf::LN_FCSTSHF: break;
+// case NS_rtf::LN_LCBSTSHF: break;
+// case NS_rtf::LN_FCPLCFFNDREF: break;
+// case NS_rtf::LN_LCBPLCFFNDREF: break;
+// case NS_rtf::LN_FCPLCFFNDTXT: break;
+// case NS_rtf::LN_LCBPLCFFNDTXT: break;
+// case NS_rtf::LN_FCPLCFANDREF: break;
+// case NS_rtf::LN_LCBPLCFANDREF: break;
+// case NS_rtf::LN_FCPLCFANDTXT: break;
+// case NS_rtf::LN_LCBPLCFANDTXT: break;
+// case NS_rtf::LN_FCPLCFSED: break;
+// case NS_rtf::LN_LCBPLCFSED: break;
+// case NS_rtf::LN_FCPLCFPAD: break;
+// case NS_rtf::LN_LCBPLCFPAD: break;
+// case NS_rtf::LN_FCPLCFPHE: break;
+// case NS_rtf::LN_LCBPLCFPHE: break;
+// case NS_rtf::LN_FCSTTBFGLSY: break;
+// case NS_rtf::LN_LCBSTTBFGLSY: break;
+// case NS_rtf::LN_FCPLCFGLSY: break;
+// case NS_rtf::LN_LCBPLCFGLSY: break;
+// case NS_rtf::LN_FCPLCFHDD: break;
+// case NS_rtf::LN_LCBPLCFHDD: break;
+// case NS_rtf::LN_FCPLCFBTECHPX: break;
+// case NS_rtf::LN_LCBPLCFBTECHPX: break;
+// case NS_rtf::LN_FCPLCFBTEPAPX: break;
+// case NS_rtf::LN_LCBPLCFBTEPAPX: break;
+// case NS_rtf::LN_FCPLCFSEA: break;
+// case NS_rtf::LN_LCBPLCFSEA: break;
+// case NS_rtf::LN_FCSTTBFFFN: break;
+// case NS_rtf::LN_LCBSTTBFFFN: break;
+// case NS_rtf::LN_FCPLCFFLDMOM: break;
+// case NS_rtf::LN_LCBPLCFFLDMOM: break;
+// case NS_rtf::LN_FCPLCFFLDHDR: break;
+// case NS_rtf::LN_LCBPLCFFLDHDR: break;
+// case NS_rtf::LN_FCPLCFFLDFTN: break;
+// case NS_rtf::LN_LCBPLCFFLDFTN: break;
+// case NS_rtf::LN_FCPLCFFLDATN: break;
+// case NS_rtf::LN_LCBPLCFFLDATN: break;
+// case NS_rtf::LN_FCPLCFFLDMCR: break;
+// case NS_rtf::LN_LCBPLCFFLDMCR: break;
+// case NS_rtf::LN_FCSTTBFBKMK: break;
+// case NS_rtf::LN_LCBSTTBFBKMK: break;
+// case NS_rtf::LN_FCPLCFBKF: break;
+// case NS_rtf::LN_LCBPLCFBKF: break;
+// case NS_rtf::LN_FCPLCFBKL: break;
+// case NS_rtf::LN_LCBPLCFBKL: break;
+// case NS_rtf::LN_FCCMDS: break;
+// case NS_rtf::LN_LCBCMDS: break;
+// case NS_rtf::LN_FCPLCMCR: break;
+// case NS_rtf::LN_LCBPLCMCR: break;
+// case NS_rtf::LN_FCSTTBFMCR: break;
+// case NS_rtf::LN_LCBSTTBFMCR: break;
+// case NS_rtf::LN_FCPRDRVR: break;
+// case NS_rtf::LN_LCBPRDRVR: break;
+// case NS_rtf::LN_FCPRENVPORT: break;
+// case NS_rtf::LN_LCBPRENVPORT: break;
+// case NS_rtf::LN_FCPRENVLAND: break;
+// case NS_rtf::LN_LCBPRENVLAND: break;
+// case NS_rtf::LN_FCWSS: break;
+// case NS_rtf::LN_LCBWSS: break;
+// case NS_rtf::LN_FCDOP: break;
+// case NS_rtf::LN_LCBDOP: break;
+// case NS_rtf::LN_FCSTTBFASSOC: break;
+// case NS_rtf::LN_LCBSTTBFASSOC: break;
+// case NS_rtf::LN_FCCLX: break;
+// case NS_rtf::LN_LCBCLX: break;
+// case NS_rtf::LN_FCPLCFPGDFTN: break;
+// case NS_rtf::LN_LCBPLCFPGDFTN: break;
+// case NS_rtf::LN_FCAUTOSAVESOURCE: break;
+// case NS_rtf::LN_LCBAUTOSAVESOURCE: break;
+// case NS_rtf::LN_FCGRPXSTATNOWNERS: break;
+// case NS_rtf::LN_LCBGRPXSTATNOWNERS: break;
+// case NS_rtf::LN_FCSTTBFATNBKMK: break;
+// case NS_rtf::LN_LCBSTTBFATNBKMK: break;
+// case NS_rtf::LN_FCPLCDOAMOM: break;
+// case NS_rtf::LN_LCBPLCDOAMOM: break;
+// case NS_rtf::LN_FCPLCDOAHDR: break;
+// case NS_rtf::LN_LCBPLCDOAHDR: break;
+// case NS_rtf::LN_FCPLCSPAMOM: break;
+// case NS_rtf::LN_LCBPLCSPAMOM: break;
+// case NS_rtf::LN_FCPLCSPAHDR: break;
+// case NS_rtf::LN_LCBPLCSPAHDR: break;
+// case NS_rtf::LN_FCPLCFATNBKF: break;
+// case NS_rtf::LN_LCBPLCFATNBKF: break;
+// case NS_rtf::LN_FCPLCFATNBKL: break;
+// case NS_rtf::LN_LCBPLCFATNBKL: break;
+// case NS_rtf::LN_FCPMS: break;
+// case NS_rtf::LN_LCBPMS: break;
+// case NS_rtf::LN_FCFORMFLDSTTBF: break;
+// case NS_rtf::LN_LCBFORMFLDSTTBF: break;
+// case NS_rtf::LN_FCPLCFENDREF: break;
+// case NS_rtf::LN_LCBPLCFENDREF: break;
+// case NS_rtf::LN_FCPLCFENDTXT: break;
+// case NS_rtf::LN_LCBPLCFENDTXT: break;
+// case NS_rtf::LN_FCPLCFFLDEDN: break;
+// case NS_rtf::LN_LCBPLCFFLDEDN: break;
+// case NS_rtf::LN_FCPLCFPGDEDN: break;
+// case NS_rtf::LN_LCBPLCFPGDEDN: break;
+// case NS_rtf::LN_FCDGGINFO: break;
+// case NS_rtf::LN_LCBDGGINFO: break;
+// case NS_rtf::LN_FCSTTBFRMARK: break;
+// case NS_rtf::LN_LCBSTTBFRMARK: break;
+// case NS_rtf::LN_FCSTTBFCAPTION: break;
+// case NS_rtf::LN_LCBSTTBFCAPTION: break;
+// case NS_rtf::LN_FCSTTBFAUTOCAPTION: break;
+// case NS_rtf::LN_LCBSTTBFAUTOCAPTION: break;
+// case NS_rtf::LN_FCPLCFWKB: break;
+// case NS_rtf::LN_LCBPLCFWKB: break;
+// case NS_rtf::LN_FCPLCFSPL: break;
+// case NS_rtf::LN_LCBPLCFSPL: break;
+// case NS_rtf::LN_FCPLCFTXBXTXT: break;
+// case NS_rtf::LN_LCBPLCFTXBXTXT: break;
+// case NS_rtf::LN_FCPLCFFLDTXBX: break;
+// case NS_rtf::LN_LCBPLCFFLDTXBX: break;
+// case NS_rtf::LN_FCPLCFHDRTXBXTXT: break;
+// case NS_rtf::LN_LCBPLCFHDRTXBXTXT: break;
+// case NS_rtf::LN_FCPLCFFLDHDRTXBX: break;
+// case NS_rtf::LN_LCBPLCFFLDHDRTXBX: break;
+// case NS_rtf::LN_FCSTWUSER: break;
+// case NS_rtf::LN_LCBSTWUSER: break;
+// case NS_rtf::LN_FCSTTBTTMBD: break;
+// case NS_rtf::LN_LCBSTTBTTMBD: break;
+// case NS_rtf::LN_FCUNUSED: break;
+// case NS_rtf::LN_LCBUNUSED: break;
+// case NS_rtf::LN_FCPGDMOTHER: break;
+// case NS_rtf::LN_LCBPGDMOTHER: break;
+// case NS_rtf::LN_FCBKDMOTHER: break;
+// case NS_rtf::LN_LCBBKDMOTHER: break;
+// case NS_rtf::LN_FCPGDFTN: break;
+// case NS_rtf::LN_LCBPGDFTN: break;
+// case NS_rtf::LN_FCBKDFTN: break;
+// case NS_rtf::LN_LCBBKDFTN: break;
+// case NS_rtf::LN_FCPGDEDN: break;
+// case NS_rtf::LN_LCBPGDEDN: break;
+// case NS_rtf::LN_FCBKDEDN: break;
+// case NS_rtf::LN_LCBBKDEDN: break;
+// case NS_rtf::LN_FCSTTBFINTLFLD: break;
+// case NS_rtf::LN_LCBSTTBFINTLFLD: break;
+// case NS_rtf::LN_FCROUTESLIP: break;
+// case NS_rtf::LN_LCBROUTESLIP: break;
+// case NS_rtf::LN_FCSTTBSAVEDBY: break;
+// case NS_rtf::LN_LCBSTTBSAVEDBY: break;
+// case NS_rtf::LN_FCSTTBFNM: break;
+// case NS_rtf::LN_LCBSTTBFNM: break;
+// case NS_rtf::LN_FCPLCFLST: break;
+// case NS_rtf::LN_LCBPLCFLST: break;
+// case NS_rtf::LN_FCPLFLFO: break;
+// case NS_rtf::LN_LCBPLFLFO: break;
+// case NS_rtf::LN_FCPLCFTXBXBKD: break;
+// case NS_rtf::LN_LCBPLCFTXBXBKD: break;
+// case NS_rtf::LN_FCPLCFTXBXHDRBKD: break;
+// case NS_rtf::LN_LCBPLCFTXBXHDRBKD: break;
+// case NS_rtf::LN_FCDOCUNDO: break;
+// case NS_rtf::LN_LCBDOCUNDO: break;
+// case NS_rtf::LN_FCRGBUSE: break;
+// case NS_rtf::LN_LCBRGBUSE: break;
+// case NS_rtf::LN_FCUSP: break;
+// case NS_rtf::LN_LCBUSP: break;
+// case NS_rtf::LN_FCUSKF: break;
+// case NS_rtf::LN_LCBUSKF: break;
+// case NS_rtf::LN_FCPLCUPCRGBUSE: break;
+// case NS_rtf::LN_LCBPLCUPCRGBUSE: break;
+// case NS_rtf::LN_FCPLCUPCUSP: break;
+// case NS_rtf::LN_LCBPLCUPCUSP: break;
+// case NS_rtf::LN_FCSTTBGLSYSTYLE: break;
+// case NS_rtf::LN_LCBSTTBGLSYSTYLE: break;
+// case NS_rtf::LN_FCPLGOSL: break;
+// case NS_rtf::LN_LCBPLGOSL: break;
+// case NS_rtf::LN_FCPLCOCX: break;
+// case NS_rtf::LN_LCBPLCOCX: break;
+// case NS_rtf::LN_FCPLCFBTELVC: break;
+// case NS_rtf::LN_LCBPLCFBTELVC: break;
+// case NS_rtf::LN_DWLOWDATETIME: break;
+// case NS_rtf::LN_DWHIGHDATETIME: break;
+// case NS_rtf::LN_FCPLCFLVC: break;
+// case NS_rtf::LN_LCBPLCFLVC: break;
+// case NS_rtf::LN_FCPLCASUMY: break;
+// case NS_rtf::LN_LCBPLCASUMY: break;
+// case NS_rtf::LN_FCPLCFGRAM: break;
+// case NS_rtf::LN_LCBPLCFGRAM: break;
+// case NS_rtf::LN_FCSTTBLISTNAMES: break;
+// case NS_rtf::LN_LCBSTTBLISTNAMES: break;
+// case NS_rtf::LN_FCSTTBFUSSR: break;
+// case NS_rtf::LN_LCBSTTBFUSSR: break;
+// case NS_rtf::LN_FN: break;
+// case NS_rtf::LN_FCSEPX: break;
+// case NS_rtf::LN_FNMPR: break;
+// case NS_rtf::LN_FCMPR: break;
+// case NS_rtf::LN_ICOFORE: break;
+// case NS_rtf::LN_ICOBACK: break;
+// case NS_rtf::LN_IPAT: break;
+// case NS_rtf::LN_SHDFORECOLOR: break;
+// case NS_rtf::LN_SHDBACKCOLOR: break;
+// case NS_rtf::LN_SHDPATTERN: break;
+// case NS_rtf::LN_DPTLINEWIDTH: break;
+// case NS_rtf::LN_BRCTYPE: break;
+// case NS_rtf::LN_ICO: break;
+// case NS_rtf::LN_DPTSPACE: break;
+// case NS_rtf::LN_FSHADOW: break;
+// case NS_rtf::LN_FFRAME: break;
+// case NS_rtf::LN_UNUSED2_15: break;
+// case NS_rtf::LN_FFIRSTMERGED: break;
+// case NS_rtf::LN_FMERGED: break;
+// case NS_rtf::LN_FVERTICAL: break;
+// case NS_rtf::LN_FBACKWARD: break;
+// case NS_rtf::LN_FROTATEFONT: break;
+// case NS_rtf::LN_FVERTMERGE: break;
+// case NS_rtf::LN_FVERTRESTART: break;
+// case NS_rtf::LN_VERTALIGN: break;
+// case NS_rtf::LN_FUNUSED: break;
+// case NS_rtf::LN_WUNUSED: break;
+// case NS_rtf::LN_BRCTOP: break;
+// case NS_rtf::LN_BRCLEFT: break;
+// case NS_rtf::LN_BRCBOTTOM: break;
+// case NS_rtf::LN_BRCRIGHT: break;
+// case NS_rtf::LN_IBKL: break;
+// case NS_rtf::LN_ITCFIRST: break;
+// case NS_rtf::LN_FPUB: break;
+// case NS_rtf::LN_ITCLIM: break;
+// case NS_rtf::LN_FCOL: break;
+// case NS_rtf::LN_LINECOLOR: break;
+// case NS_rtf::LN_LINEWIDTH: break;
+// case NS_rtf::LN_LINETYPE: break;
+// case NS_rtf::LN_MM: break;
+// case NS_rtf::LN_XEXT: break;
+// case NS_rtf::LN_YEXT: break;
+// case NS_rtf::LN_HMF: break;
+// case NS_rtf::LN_LCB: break;
+// case NS_rtf::LN_CBHEADER: break;
+// case NS_rtf::LN_MFP: break;
+// case NS_rtf::LN_BM_RCWINMF: break;
+// case NS_rtf::LN_DXAGOAL: break;
+// case NS_rtf::LN_DYAGOAL: break;
+// case NS_rtf::LN_MX: break;
+// case NS_rtf::LN_MY: break;
+// case NS_rtf::LN_DXACROPLEFT: break;
+// case NS_rtf::LN_DYACROPTOP: break;
+// case NS_rtf::LN_DXACROPRIGHT: break;
+// case NS_rtf::LN_DYACROPBOTTOM: break;
+// case NS_rtf::LN_BRCL: break;
+// case NS_rtf::LN_FFRAMEEMPTY: break;
+// case NS_rtf::LN_FBITMAP: break;
+// case NS_rtf::LN_FDRAWHATCH: break;
+// case NS_rtf::LN_FERROR: break;
+// case NS_rtf::LN_BPP: break;
+// case NS_rtf::LN_DXAORIGIN: break;
+// case NS_rtf::LN_DYAORIGIN: break;
+// case NS_rtf::LN_CPROPS: break;
+// case NS_rtf::LN_LINEPROPSTOP: break;
+// case NS_rtf::LN_LINEPROPSLEFT: break;
+// case NS_rtf::LN_LINEPROPSBOTTOM: break;
+// case NS_rtf::LN_LINEPROPSRIGHT: break;
+// case NS_rtf::LN_LINEPROPSHORIZONTAL: break;
+// case NS_rtf::LN_LINEPROPSVERTICAL: break;
+// case NS_rtf::LN_headerr: break;
+// case NS_rtf::LN_footerr: break;
+// case NS_rtf::LN_endnote: break;
+// case NS_rtf::LN_BOOKMARKNAME: break;
+
+// case NS_rtf::LN_LISTLEVEL: break;
+// case NS_rtf::LN_LFO: break;
+ case NS_rtf::LN_F:
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_ALTFONTNAME:
+ m_pImpl->pCurrentEntry->sAlternativeFont = sValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_XSZFFN:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Font_name:
+ m_pImpl->pCurrentEntry->sFontName = sValue;
+ break;
+// case NS_rtf::LN_XSTZNAME: break;
+// case NS_rtf::LN_XSTZNAME1: break;
+// case NS_rtf::LN_UPXSTART: break;
+// case NS_rtf::LN_UPX: break;
+// case NS_rtf::LN_sed: break;
+// case NS_rtf::LN_picf: break;
+// case NS_rtf::LN_rgbrc: break;
+// case NS_rtf::LN_shd: break;
+// case NS_rtf::LN_cellShd: break;
+// case NS_rtf::LN_cellTopColor: break;
+// case NS_rtf::LN_cellLeftColor: break;
+// case NS_rtf::LN_cellBottomColor: break;
+// case NS_rtf::LN_cellRightColor: break;
+
+// case NS_rtf::LN_LISTTABLE: break;
+// case NS_rtf::LN_LFOTABLE: break;
+// case NS_rtf::LN_FONTTABLE: break;
+// case NS_rtf::LN_STYLESHEET: break;
+ default:
+ {
+ //----> debug
+ int nVal = val.getInt();
+ ++nVal;
+ //<---- debug
+ }
+ }
+}
+/*-- 19.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::sprm(Sprm& rSprm)
+{
+ OSL_ENSURE( m_pImpl->pCurrentEntry, "current entry has to be set here");
+ if(!m_pImpl->pCurrentEntry)
+ return ;
+ sal_uInt32 nSprmId = rSprm.getId();
+ (void)nSprmId;
+
+ Value::Pointer_t pValue = rSprm.getValue();
+ sal_Int32 nIntValue = pValue->getInt();
+ (void)nIntValue;
+ rtl::OUString sStringValue = pValue->getString();
+
+ //printf ( "FontTable::sprm(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)nSprmId, (unsigned int)nIntValue, ::rtl::OUStringToOString(sStringValue, RTL_TEXTENCODING_DONTKNOW).getStr());
+
+/* switch(nSprmId)
+ {
+ default:
+ {
+ OSL_ENSURE( false, "FontTable::sprm()"); //
+ //Value::Pointer_t pValue_ = rSprm.getValue();
+ }
+ }*/
+}
+
+/*-- 19.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ //create a new font entry
+ OSL_ENSURE( !m_pImpl->pCurrentEntry, "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 = 0;
+}
+/*-- 19.06.2006 12:04:34---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::startSectionGroup()
+{
+}
+/*-- 19.06.2006 12:04:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::endSectionGroup()
+{
+}
+/*-- 19.06.2006 12:04:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::startParagraphGroup()
+{
+}
+/*-- 19.06.2006 12:04:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::endParagraphGroup()
+{
+}
+/*-- 19.06.2006 12:04:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::startCharacterGroup()
+{
+}
+/*-- 19.06.2006 12:04:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::endCharacterGroup()
+{
+}
+/*-- 19.06.2006 12:04:36---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::text(const sal_uInt8*, size_t )
+{
+}
+/*-- 19.06.2006 12:04:36---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::utext(const sal_uInt8* , size_t)
+{
+}
+/*-- 19.06.2006 12:04:37---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::props(writerfilter::Reference<Properties>::Pointer_t)
+{
+}
+/*-- 19.06.2006 12:04:37---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::table(Id, writerfilter::Reference<Table>::Pointer_t)
+{
+}
+/*-- 19.06.2006 12:04:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::substream(Id, ::writerfilter::Reference<Stream>::Pointer_t)
+{
+}
+/*-- 19.06.2006 12:04:39---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::info(const string& )
+{
+}
+
+void FontTable::startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > )
+{
+}
+
+void FontTable::endShape( )
+{
+}
+
+/*-- 21.06.2006 11:21:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+const FontEntry* FontTable::getFontEntry(sal_uInt32 nIndex)
+{
+ const FontEntry* pRet = 0;
+ if(m_pImpl->aFontEntries.size() > nIndex)
+ {
+ pRet = &m_pImpl->aFontEntries[nIndex];
+ }
+ return pRet;
+}
+/*-- 21.06.2006 11:21:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_uInt32 FontTable::size()
+{
+ return m_pImpl->aFontEntries.size();
+}
+
+}//namespace dmapper
+}//namespace writerfilter
diff --git a/writerfilter/source/dmapper/FontTable.hxx b/writerfilter/source/dmapper/FontTable.hxx
new file mode 100644
index 000000000000..f63d0cf0ee1a
--- /dev/null
+++ b/writerfilter/source/dmapper/FontTable.hxx
@@ -0,0 +1,106 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_FONTTABLE_HXX
+#define INCLUDED_FONTTABLE_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <com/sun/star/lang/XComponent.hpp>
+
+namespace writerfilter {
+namespace dmapper
+{
+
+struct FontTable_Impl;
+struct FontEntry
+{
+ ::rtl::OUString sFontName;
+ ::rtl::OUString sFontName1;
+ bool bTrueType;
+ sal_Int16 nPitchRequest;
+ sal_Int32 nTextEncoding;
+ sal_Int32 nFontFamilyId;
+ sal_Int32 nBaseWeight;
+ sal_Int32 nAltFontIndex;
+ ::rtl::OUString sPanose;
+ ::rtl::OUString sFontSignature;
+ ::rtl::OUString sAlternativeFont;
+ FontEntry() :
+ bTrueType(false),
+ nPitchRequest( 0 ),
+ nTextEncoding( 0 ),
+ nFontFamilyId( 0 ),
+ nBaseWeight( 0 ),
+ nAltFontIndex( 0 )
+ {}
+};
+class WRITERFILTER_DLLPRIVATE FontTable : public Properties, public Table
+ /*,public BinaryObj*/, public Stream
+{
+ FontTable_Impl *m_pImpl;
+
+public:
+ FontTable();
+ virtual ~FontTable();
+
+ // Properties
+ virtual void attribute(Id Name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ // Table
+ virtual void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
+ // BinaryObj
+// virtual void data(const sal_Int8* buf, size_t len,
+// writerfilter::Reference<Properties>::Pointer_t ref);
+
+ // Stream
+ virtual void startSectionGroup();
+ virtual void endSectionGroup();
+ virtual void startParagraphGroup();
+ virtual void endParagraphGroup();
+ virtual void startCharacterGroup();
+ virtual void endCharacterGroup();
+ virtual void text(const sal_uInt8 * data, size_t len);
+ virtual void utext(const sal_uInt8 * data, size_t len);
+ virtual void props(writerfilter::Reference<Properties>::Pointer_t ref);
+ virtual void table(Id name,
+ writerfilter::Reference<Table>::Pointer_t ref);
+ virtual void substream(Id name,
+ ::writerfilter::Reference<Stream>::Pointer_t ref);
+ virtual void info(const string & info);
+ virtual void startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
+ virtual void endShape( );
+
+ const FontEntry* getFontEntry(sal_uInt32 nIndex);
+ sal_uInt32 size();
+};
+typedef boost::shared_ptr< FontTable > FontTablePtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/GraphicHelpers.cxx b/writerfilter/source/dmapper/GraphicHelpers.cxx
new file mode 100644
index 000000000000..c77f2dd55d3e
--- /dev/null
+++ b/writerfilter/source/dmapper/GraphicHelpers.cxx
@@ -0,0 +1,223 @@
+#include "ConversionHelper.hxx"
+#include "GraphicHelpers.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 <com/sun/star/text/WrapTextMode.hpp>
+
+#include <iostream>
+using namespace std;
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace com::sun::star;
+
+PositionHandler::PositionHandler( ) :
+ Properties( )
+{
+ m_nOrient = text::VertOrientation::NONE;
+ m_nRelation = text::RelOrientation::FRAME;
+ m_nPosition = 0;
+}
+
+PositionHandler::~PositionHandler( )
+{
+}
+
+void PositionHandler::attribute( Id aName, Value& rVal )
+{
+ sal_Int32 nIntValue = rVal.getInt( );
+ switch ( aName )
+ {
+ case NS_ooxml::LN_CT_PosV_relativeFrom:
+ {
+ // TODO There are some other unhandled values
+ static Id pVertRelValues[] =
+ {
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromV_margin,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromV_page,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromV_paragraph,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromV_line
+ };
+
+ static sal_Int16 pVertRelations[] =
+ {
+ text::RelOrientation::PAGE_PRINT_AREA,
+ text::RelOrientation::PAGE_FRAME,
+ text::RelOrientation::FRAME,
+ text::RelOrientation::TEXT_LINE
+ };
+
+ for ( int i = 0; i < 4; i++ )
+ {
+ if ( pVertRelValues[i] == sal_uInt32( nIntValue ) )
+ m_nRelation = pVertRelations[i];
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_PosH_relativeFrom:
+ {
+ // TODO There are some other unhandled values
+ static Id pHoriRelValues[] =
+ {
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_margin,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_page,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_column,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_character
+ };
+
+ static sal_Int16 pHoriRelations[] =
+ {
+ text::RelOrientation::PAGE_PRINT_AREA,
+ text::RelOrientation::PAGE_FRAME,
+ text::RelOrientation::FRAME,
+ text::RelOrientation::CHAR,
+ };
+
+ for ( int i = 0; i < 4; i++ )
+ {
+ if ( pHoriRelValues[i] == sal_uInt32( nIntValue ) )
+ m_nRelation = pHoriRelations[i];
+ }
+ }
+ break;
+ default:;
+ }
+}
+
+void PositionHandler::sprm( Sprm& rSprm )
+{
+ Value::Pointer_t pValue = rSprm.getValue();
+ sal_Int32 nIntValue = pValue->getInt();
+
+ switch ( rSprm.getId( ) )
+ {
+ case NS_ooxml::LN_CT_PosV_align:
+ {
+ static Id pVertValues[] =
+ {
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignV_top,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignV_bottom,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignV_center,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignV_inside,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignV_outside
+ };
+
+ static sal_Int16 pVertOrients[] =
+ {
+ text::VertOrientation::TOP,
+ text::VertOrientation::BOTTOM,
+ text::VertOrientation::CENTER,
+ text::VertOrientation::NONE,
+ text::VertOrientation::NONE
+ };
+
+ for ( int i = 0; i < 5; i++ )
+ {
+ if ( pVertValues[i] == sal_uInt32( nIntValue ) )
+ m_nOrient = pVertOrients[i];
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_PosH_align:
+ {
+ static Id pHoriValues[] =
+ {
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignH_left,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignH_right,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignH_center,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignH_inside,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignH_outside
+ };
+
+ static sal_Int16 pHoriOrients[] =
+ {
+ text::HoriOrientation::LEFT,
+ text::HoriOrientation::RIGHT,
+ text::HoriOrientation::CENTER,
+ text::HoriOrientation::INSIDE,
+ text::HoriOrientation::OUTSIDE
+ };
+
+ for ( int i = 0; i < 5; i++ )
+ {
+ if ( pHoriValues[i] == sal_uInt32( nIntValue ) )
+ m_nOrient = pHoriOrients[i];
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_PosH_posOffset:
+ case NS_ooxml::LN_CT_PosV_posOffset:
+ m_nPosition = ConversionHelper::convertEMUToMM100( nIntValue );
+ default:;
+ }
+}
+
+WrapHandler::WrapHandler( ) :
+ Properties( ),
+ m_nType( 0 ),
+ m_nSide( 0 )
+{
+}
+
+WrapHandler::~WrapHandler( )
+{
+}
+
+void WrapHandler::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::sprm( Sprm& )
+{
+}
+
+sal_Int32 WrapHandler::getWrapMode( )
+{
+ sal_Int32 nMode = com::sun::star::text::WrapTextMode_NONE;
+
+ switch ( m_nType )
+ {
+ case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapType_square:
+ case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapType_tight:
+ {
+ switch ( m_nSide )
+ {
+ case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapSide_left:
+ nMode = com::sun::star::text::WrapTextMode_LEFT;
+ break;
+ case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapSide_right:
+ nMode = com::sun::star::text::WrapTextMode_RIGHT;
+ break;
+ default:
+ nMode = com::sun::star::text::WrapTextMode_PARALLEL;
+ }
+ }
+ break;
+ case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapType_through:
+ nMode = com::sun::star::text::WrapTextMode_THROUGHT;
+ break;
+ case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapType_topAndBottom:
+ case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapType_none:
+ default:
+ nMode = com::sun::star::text::WrapTextMode_NONE;
+ }
+
+ return nMode;
+}
+
+} }
diff --git a/writerfilter/source/dmapper/GraphicHelpers.hxx b/writerfilter/source/dmapper/GraphicHelpers.hxx
new file mode 100644
index 000000000000..fb8f8b2455ee
--- /dev/null
+++ b/writerfilter/source/dmapper/GraphicHelpers.hxx
@@ -0,0 +1,48 @@
+#ifndef INCLUDED_GRAPHICHELPERS_HXX
+#define INCLUDED_GRAPHICHELPERS_HXX
+
+#include "PropertyMap.hxx"
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+
+#include <boost/shared_ptr.hpp>
+
+namespace writerfilter {
+namespace dmapper
+{
+
+class WRITERFILTER_DLLPRIVATE PositionHandler: public Properties
+{
+public:
+ PositionHandler( );
+ ~PositionHandler( );
+
+ sal_Int16 m_nOrient;
+ sal_Int16 m_nRelation;
+ sal_Int32 m_nPosition;
+
+ virtual void attribute( Id aName, Value& rVal );
+ virtual void sprm( Sprm& rSprm );
+};
+typedef boost::shared_ptr<PositionHandler> PositionHandlerPtr;
+
+class WRITERFILTER_DLLPRIVATE WrapHandler: public Properties
+{
+public:
+ WrapHandler( );
+ ~WrapHandler( );
+
+ sal_Int32 m_nType;
+ sal_Int32 m_nSide;
+
+ sal_Int32 getWrapMode( );
+
+ virtual void attribute( Id aName, Value& rVal );
+ virtual void sprm( Sprm& rSprm );
+};
+typedef boost::shared_ptr<WrapHandler> WrapHandlerPtr;
+
+} }
+
+#endif
diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx
new file mode 100644
index 000000000000..308ce90ace65
--- /dev/null
+++ b/writerfilter/source/dmapper/GraphicImport.cxx
@@ -0,0 +1,2261 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "GraphicImport.hxx"
+#include "GraphicHelpers.hxx"
+
+#include <dmapper/DomainMapper.hxx>
+#include <PropertyMap.hxx>
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#include <ConversionHelper.hxx>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <cppuhelper/implbase1.hxx>
+#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/graphic/XGraphicProvider.hpp>
+#include <com/sun/star/graphic/XGraphic.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/table/BorderLine.hpp>
+#include <com/sun/star/text/GraphicCrop.hpp>
+#include <com/sun/star/text/XTextContent.hpp>
+#include <com/sun/star/text/TextContentAnchorType.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/drawing/XShape.hpp>
+#include <rtl/ustrbuf.hxx>
+
+
+#include <iostream>
+#include <resourcemodel/QNameToString.hxx>
+#include <string.h>
+
+#ifdef DEBUG_DOMAINMAPPER
+#include <resourcemodel/TagLogger.hxx>
+#endif
+
+namespace writerfilter {
+namespace dmapper
+{
+using namespace ::std;
+using namespace ::com::sun::star;
+
+#ifdef DEBUG_DOMAINMAPPER
+extern TagLogger::Pointer_t dmapper_logger;
+#endif
+
+class XInputStreamHelper : public cppu::WeakImplHelper1
+< io::XInputStream >
+{
+ const sal_uInt8* m_pBuffer;
+ const sal_Int32 m_nLength;
+ sal_Int32 m_nPosition;
+ bool m_bBmp;
+
+ const sal_uInt8* m_pBMPHeader; //default BMP-header
+ sal_Int32 m_nHeaderLength;
+public:
+ XInputStreamHelper(const sal_uInt8* buf, size_t len, bool bBmp);
+ ~XInputStreamHelper();
+
+ virtual ::sal_Int32 SAL_CALL readBytes( uno::Sequence< ::sal_Int8 >& aData, ::sal_Int32 nBytesToRead ) throw (io::NotConnectedException, io::BufferSizeExceededException, io::IOException, uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL readSomeBytes( uno::Sequence< ::sal_Int8 >& aData, ::sal_Int32 nMaxBytesToRead ) throw (io::NotConnectedException, io::BufferSizeExceededException, io::IOException, uno::RuntimeException);
+ virtual void SAL_CALL skipBytes( ::sal_Int32 nBytesToSkip ) throw (io::NotConnectedException, io::BufferSizeExceededException, io::IOException, uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL available( ) throw (io::NotConnectedException, io::IOException, uno::RuntimeException);
+ virtual void SAL_CALL closeInput( ) throw (io::NotConnectedException, io::IOException, uno::RuntimeException);
+};
+/*-- 01.11.2006 13:56:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+XInputStreamHelper::XInputStreamHelper(const sal_uInt8* buf, size_t len, bool bBmp) :
+ m_pBuffer( buf ),
+ m_nLength( len ),
+ m_nPosition( 0 ),
+ m_bBmp( bBmp )
+{
+ static const sal_uInt8 aHeader[] =
+ {0x42, 0x4d, 0xe6, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 };
+ m_pBMPHeader = aHeader;
+ m_nHeaderLength = m_bBmp ? sizeof( aHeader ) / sizeof(sal_uInt8) : 0;
+
+}
+/*-- 01.11.2006 13:56:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+XInputStreamHelper::~XInputStreamHelper()
+{
+}
+/*-- 01.11.2006 13:56:21---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::sal_Int32 XInputStreamHelper::readBytes( uno::Sequence< ::sal_Int8 >& aData, ::sal_Int32 nBytesToRead )
+ throw (io::NotConnectedException, io::BufferSizeExceededException, io::IOException, uno::RuntimeException)
+{
+ return readSomeBytes( aData, nBytesToRead );
+}
+/*-- 01.11.2006 13:56:21---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::sal_Int32 XInputStreamHelper::readSomeBytes( uno::Sequence< ::sal_Int8 >& aData, ::sal_Int32 nMaxBytesToRead )
+ throw (io::NotConnectedException, io::BufferSizeExceededException, io::IOException, uno::RuntimeException)
+{
+ sal_Int32 nRet = 0;
+ if( nMaxBytesToRead > 0 )
+ {
+ if( nMaxBytesToRead > (m_nLength + m_nHeaderLength) - m_nPosition )
+ nRet = (m_nLength + m_nHeaderLength) - m_nPosition;
+ else
+ nRet = nMaxBytesToRead;
+ aData.realloc( nRet );
+ sal_Int8* pData = aData.getArray();
+ sal_Int32 nHeaderRead = 0;
+ if( m_nPosition < m_nHeaderLength)
+ {
+ //copy header content first
+ nHeaderRead = m_nHeaderLength - m_nPosition;
+ memcpy( pData, m_pBMPHeader + (m_nPosition ), nHeaderRead );
+ nRet -= nHeaderRead;
+ m_nPosition += nHeaderRead;
+ }
+ if( nRet )
+ {
+ memcpy( pData + nHeaderRead, m_pBuffer + (m_nPosition - m_nHeaderLength), nRet );
+ m_nPosition += nRet;
+ }
+ }
+ return nRet;
+}
+/*-- 01.11.2006 13:56:21---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void XInputStreamHelper::skipBytes( ::sal_Int32 nBytesToSkip ) throw (io::NotConnectedException, io::BufferSizeExceededException, io::IOException, uno::RuntimeException)
+{
+ if( nBytesToSkip < 0 || m_nPosition + nBytesToSkip > (m_nLength + m_nHeaderLength))
+ throw io::BufferSizeExceededException();
+ m_nPosition += nBytesToSkip;
+}
+/*-- 01.11.2006 13:56:22---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::sal_Int32 XInputStreamHelper::available( ) throw (io::NotConnectedException, io::IOException, uno::RuntimeException)
+{
+ return ( m_nLength + m_nHeaderLength ) - m_nPosition;
+}
+/*-- 01.11.2006 13:56:22---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void XInputStreamHelper::closeInput( ) throw (io::NotConnectedException, io::IOException, uno::RuntimeException)
+{
+}
+/*-- 02.11.2006 09:34:29---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+struct GraphicBorderLine
+{
+ sal_Int32 nLineWidth;
+// sal_Int32 nLineType;
+ sal_Int32 nLineColor;
+ sal_Int32 nLineDistance;
+ bool bHasShadow;
+
+ GraphicBorderLine() :
+ nLineWidth(0)
+// ,nLineType(0)
+ ,nLineColor(0)
+ ,nLineDistance(0)
+ ,bHasShadow(false)
+ {}
+
+};
+
+class GraphicImport_Impl
+{
+private:
+ sal_Int32 nXSize;
+ bool bXSizeValid;
+ sal_Int32 nYSize;
+ bool bYSizeValid;
+
+public:
+ GraphicImportType eGraphicImportType;
+ DomainMapper& rDomainMapper;
+
+ sal_Int32 nHoriScaling;
+ sal_Int32 nVertScaling;
+ sal_Int32 nLeftPosition;
+ sal_Int32 nTopPosition;
+ sal_Int32 nRightPosition;
+ sal_Int32 nBottomPosition;
+ sal_Int32 nLeftCrop;
+ sal_Int32 nTopCrop;
+ sal_Int32 nRightCrop;
+ sal_Int32 nBottomCrop;
+
+ bool bUseSimplePos;
+
+ sal_Int16 nHoriOrient;
+ sal_Int16 nHoriRelation;
+ bool bPageToggle;
+ sal_Int16 nVertOrient;
+ sal_Int16 nVertRelation;
+ sal_Int32 nWrap;
+ bool bOpaque;
+ bool bContour;
+ bool bIgnoreWRK;
+
+ sal_Int32 nLeftMargin;
+ sal_Int32 nRightMargin;
+ sal_Int32 nTopMargin;
+ sal_Int32 nBottomMargin;
+
+ sal_Int32 nContrast;
+ sal_Int32 nBrightness;
+ double fGamma;
+
+ sal_Int32 nFillColor;
+
+ drawing::ColorMode eColorMode;
+
+ GraphicBorderLine aBorders[4];
+ sal_Int32 nCurrentBorderLine;
+
+ sal_Int32 nDffType;
+ bool bIsGraphic;
+ bool bIsBitmap;
+ bool bIsTiff;
+ sal_Int32 nBitsPerPixel;
+
+ bool bHoriFlip;
+ bool bVertFlip;
+
+ bool bSizeProtected;
+ bool bPositionProtected;
+
+ bool bInShapeOptionMode;
+ sal_Int32 nShapeOptionType;
+
+ ::rtl::OUString sName;
+ ::rtl::OUString sAlternativeText;
+
+ GraphicImport_Impl(GraphicImportType eImportType, DomainMapper& rDMapper) :
+ nXSize(0)
+ ,bXSizeValid(false)
+ ,nYSize(0)
+ ,bYSizeValid(false)
+ ,eGraphicImportType( eImportType )
+ ,rDomainMapper( rDMapper )
+ ,nHoriScaling(0)
+ ,nVertScaling(0)
+ ,nLeftPosition(0)
+ ,nTopPosition(0)
+ ,nRightPosition(0)
+ ,nBottomPosition(0)
+ ,nLeftCrop(0)
+ ,nTopCrop (0)
+ ,nRightCrop (0)
+ ,nBottomCrop(0)
+ ,bUseSimplePos(false)
+ ,nHoriOrient( text::HoriOrientation::NONE )
+ ,nHoriRelation( text::RelOrientation::FRAME )
+ ,bPageToggle( false )
+ ,nVertOrient( text::VertOrientation::NONE )
+ ,nVertRelation( text::RelOrientation::FRAME )
+ ,nWrap(0)
+ ,bOpaque( true )
+ ,bContour(false)
+ ,bIgnoreWRK(true)
+ ,nLeftMargin(319)
+ ,nRightMargin(319)
+ ,nTopMargin(0)
+ ,nBottomMargin(0)
+ ,nContrast(0)
+ ,nBrightness(0)
+ ,fGamma( -1.0 )
+ ,nFillColor( 0xffffffff )
+ ,eColorMode( drawing::ColorMode_STANDARD )
+ ,nCurrentBorderLine(BORDER_TOP)
+ ,nDffType( 0 )
+ ,bIsGraphic(false)
+ ,bIsBitmap(false)
+ ,bIsTiff(false)
+ ,nBitsPerPixel(0)
+ ,bHoriFlip(false)
+ ,bVertFlip(false)
+ ,bSizeProtected(false)
+ ,bPositionProtected(false)
+ ,bInShapeOptionMode(false)
+ {}
+
+ 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;
+ }
+};
+/*-- 01.11.2006 09:42:42---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+GraphicImport::GraphicImport(uno::Reference < uno::XComponentContext > xComponentContext,
+ uno::Reference< lang::XMultiServiceFactory > xTextFactory,
+ DomainMapper& rDMapper,
+ GraphicImportType eImportType )
+: m_pImpl( new GraphicImport_Impl( eImportType, rDMapper ))
+ ,m_xComponentContext( xComponentContext )
+ ,m_xTextFactory( xTextFactory)
+{
+}
+/*-- 01.11.2006 09:42:42---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+GraphicImport::~GraphicImport()
+{
+ delete m_pImpl;
+}
+/*-- 01.11.2006 09:45:01---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::attribute(Id nName, Value & val)
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("attribute");
+ dmapper_logger->attribute("name", (*QNameToString::Instance())(nName));
+#endif
+ sal_Int32 nIntValue = val.getInt();
+ /* WRITERFILTERSTATUS: table: PICFattribute */
+ switch( nName )
+ {
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_LCB: break;//byte count
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_CBHEADER: break;//ignored
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_MFP: //MetafilePict
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_DffRecord: //dff record - expands to an sprm which expands to ...
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpopt: //shape options
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpfbse: //BLIP store entry
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCTOP: //top border
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCLEFT: //left border
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCBOTTOM: //bottom border
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCRIGHT: //right border
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_shape: //shape
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_blip: //the binary graphic data in a shape
+ {
+ switch(nName)
+ {
+ case NS_rtf::LN_BRCTOP: //top border
+ m_pImpl->nCurrentBorderLine = BORDER_TOP;
+ break;
+ case NS_rtf::LN_BRCLEFT: //left border
+ m_pImpl->nCurrentBorderLine = BORDER_LEFT;
+ break;
+ case NS_rtf::LN_BRCBOTTOM: //bottom border
+ m_pImpl->nCurrentBorderLine = BORDER_BOTTOM;
+ break;
+ case NS_rtf::LN_BRCRIGHT: //right border
+ m_pImpl->nCurrentBorderLine = BORDER_RIGHT;
+ break;
+ case NS_rtf::LN_shpopt:
+ m_pImpl->bInShapeOptionMode = true;
+ break;
+ default:;
+ }
+ writerfilter::Reference<Properties>::Pointer_t pProperties = val.getProperties();
+ if( pProperties.get())
+ {
+ pProperties->resolve(*this);
+ }
+ switch(nName)
+ {
+ case NS_rtf::LN_shpopt:
+ m_pImpl->bInShapeOptionMode = false;
+ break;
+ default:;
+ }
+ }
+ break;
+ case NS_rtf::LN_payload :
+ {
+ writerfilter::Reference<BinaryObj>::Pointer_t pPictureData = val.getBinary();
+ if( pPictureData.get())
+ pPictureData->resolve(*this);
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_rtf::LN_BM_RCWINMF: //windows bitmap structure - if it's a bitmap
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_DXAGOAL: //x-size in twip
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_DYAGOAL: //y-size in twip
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_MX: m_pImpl->nHoriScaling = nIntValue; break;// hori scaling in 0.001%
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_MY: m_pImpl->nVertScaling = nIntValue; break;// vert scaling in 0.001%
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_DXACROPLEFT: m_pImpl->nLeftCrop = ConversionHelper::convertTwipToMM100(nIntValue); break;// left crop in twips
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_DYACROPTOP: m_pImpl->nTopCrop = ConversionHelper::convertTwipToMM100(nIntValue); break;// top crop in twips
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_DXACROPRIGHT: m_pImpl->nRightCrop = ConversionHelper::convertTwipToMM100(nIntValue); break;// right crop in twips
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_DYACROPBOTTOM: m_pImpl->nBottomCrop = ConversionHelper::convertTwipToMM100(nIntValue); break;// bottom crop in twips
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCL: break;//border type - legacy -
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FFRAMEEMPTY: break;// picture consists of a single frame
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FBITMAP:
+ m_pImpl->bIsBitmap = nIntValue > 0 ? true : false;
+ break;//1 if it's a bitmap ???
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FDRAWHATCH: break;//1 if it's an active OLE object
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FERROR: break;// 1 if picture is an error message
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_BPP: m_pImpl->nBitsPerPixel = nIntValue; break;//bits per pixel 0 - unknown, 1- mono, 4 - VGA
+
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_DXAORIGIN: //horizontal offset of hand annotation origin
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_DYAORIGIN: //vertical offset of hand annotation origin
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_CPROPS:break;// unknown - ignored
+ //metafilepict
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_MM:
+// according to the documentation 99 or 98 are provided - but they are not!
+// m_pImpl->bIsBitmap = 99 == nIntValue ? true : false;
+// m_pImpl->bIsTiff = 98 == nIntValue ? true : false;
+
+ break; //mapmode
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_XEXT:
+ m_pImpl->setXSize(nIntValue);
+ break; // x-size
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_YEXT:
+ m_pImpl->setYSize(nIntValue);
+ break; // y-size
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_HMF: break; //identifier - ignored
+
+ //sprm 0xf004 and 0xf008, 0xf00b
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_dfftype://
+ m_pImpl->nDffType = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_dffinstance:
+ //todo: does this still work for PICF?
+ //in case of LN_dfftype == 0xf01f the instance contains the bitmap type:
+ if(m_pImpl->nDffType == 0xf01f)
+ switch( nIntValue )
+ {
+ case 0x216 : // Metafile header then compressed WMF
+
+ case 0x3D4 : // Metafile header then compressed EMF
+
+ case 0x542 : // Metafile hd. then compressed PICT
+
+ {
+
+// rBLIPStream.SeekRel( nSkip + 20 );
+// // read in size of metafile in EMUS
+// rBLIPStream >> aMtfSize100.Width() >> aMtfSize100.Height();
+// // scale to 1/100mm
+// aMtfSize100.Width() /= 360, aMtfSize100.Height() /= 360;
+// if ( pVisArea ) // seem that we currently are skipping the visarea position
+// *pVisArea = Rectangle( Point(), aMtfSize100 );
+// // skip rest of header
+// nSkip = 6;
+// bMtfBLIP = bZCodecCompression = TRUE;
+ }
+
+ break;
+
+ case 0x46A : break;// One byte tag then JPEG (= JFIF) data
+
+ case 0x6E0 : break;// One byte tag then PNG data
+
+ case 0x7A8 : m_pImpl->bIsBitmap = true;
+// nSkip += 1; // One byte tag then DIB data
+ break;
+
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_dffversion:// ignored
+ break;
+
+ //sprm 0xf008
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shptype: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpid: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpfGroup: break;// This shape is a group shape
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpfChild: break;// Not a top-level shape
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpfPatriarch: break;// This is the topmost group shape. Exactly one of these per drawing.
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpfDeleted: break;// The shape has been deleted
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpfOleShape: break;// The shape is an OLE object
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpfHaveMaster: break;// Shape has a hspMaster property
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpfFlipH: // Shape is flipped horizontally
+ m_pImpl->bHoriFlip = nIntValue ? true : false;
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpfFlipV: // Shape is flipped vertically
+ m_pImpl->bVertFlip = nIntValue ? true : false;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpfConnector: break;// Connector type of shape
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpfHaveAnchor: break;// Shape has an anchor of some kind
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpfBackground: break;// Background shape
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpfHaveSpt: break;// Shape has a shape type property
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shptypename: break;// shape type name
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_shppid: m_pImpl->nShapeOptionType = nIntValue; break; //type of shape option
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpfBid: break; //ignored
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpfComplex:break;
+ /* WRITERFILTERSTATUS: done: 50, planned: 10, spent: 5 */
+ case NS_rtf::LN_shpop:
+ {
+ if(NS_dff::LN_shpwzDescription != sal::static_int_cast<Id>(m_pImpl->nShapeOptionType) )
+ ProcessShapeOptions( val );
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpname: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpvalue:
+ {
+ if( NS_dff::LN_shpwzDescription == sal::static_int_cast<Id>(m_pImpl->nShapeOptionType) )
+ ProcessShapeOptions( val );
+ }
+ break;
+
+ //BLIP store entry
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpbtWin32: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpbtMacOS: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shprgbUid: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shptag: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpsize: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpcRef: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpfoDelay: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpusage: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpcbName: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpunused2: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpunused3: break;
+
+ //border properties
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shpblipbname : break;
+
+ /* WRITERFILTERSTATUS: done: 100, planned: 1, spent: 1 */
+ case NS_rtf::LN_DPTLINEWIDTH: // 0x1759
+ m_pImpl->aBorders[m_pImpl->nCurrentBorderLine].nLineWidth = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCTYPE: // 0x175a
+ //graphic borders don't support different line types
+ //m_pImpl->aBorders[m_pImpl->nCurrentBorderLine].nLineType = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 1, spent: 1 */
+ case NS_rtf::LN_ICO: // 0x175b
+ m_pImpl->aBorders[m_pImpl->nCurrentBorderLine].nLineColor = ConversionHelper::ConvertColor( nIntValue );
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 1, spent: 1 */
+ case NS_rtf::LN_DPTSPACE: // 0x175c
+ m_pImpl->aBorders[m_pImpl->nCurrentBorderLine].nLineDistance = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 1, spent: 0 */
+ case NS_rtf::LN_FSHADOW: // 0x175d
+ m_pImpl->aBorders[m_pImpl->nCurrentBorderLine].bHasShadow = nIntValue ? true : false;
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_FFRAME: // ignored
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_UNUSED2_15: break;// ignored
+
+// const QName_t LN_shpoptextraoffset = 20028;
+// const QName_t LN_shptypename = 20029;
+// const QName_t LN_shpblipbname = 20031;
+// const QName_t LN_binary = 20032;
+
+
+
+// case NS_rtf::LN_shpblipbname = 20031;
+// case NS_rtf::LN_binary = 20032;
+// case NS_rtf::LN_shpdgg = 10492;
+// case NS_rtf::LN_shpfbse = 10493;
+
+
+// case NS_rtf::LN_CPROPS: //unused
+
+
+
+// case NS_rtf::LN_LINECOLOR = 10372;
+// case NS_rtf::LN_LINEWIDTH = 10373;
+// case NS_rtf::LN_LINETYPE = 10374;
+
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_SPID: break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_XALEFT: m_pImpl->nLeftPosition = ConversionHelper::convertTwipToMM100(nIntValue); break; //left position
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_YATOP: m_pImpl->nTopPosition = ConversionHelper::convertTwipToMM100(nIntValue); break; //top position
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_XARIGHT: m_pImpl->nRightPosition = ConversionHelper::convertTwipToMM100(nIntValue); break; //right position
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_YABOTTOM: m_pImpl->nBottomPosition = ConversionHelper::convertTwipToMM100(nIntValue); break;//bottom position
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FHDR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_XAlign:
+/*
+ static const SwHoriOrient aHoriOriTab[ nCntXAlign ] =
+ {
+ HORI_NONE, // From left position
+ HORI_LEFT, // left
+ HORI_CENTER, // centered
+ HORI_RIGHT, // right
+ // --> OD 2004-12-06 #i36649#
+ // - inside -> HORI_LEFT and outside -> HORI_RIGHT
+ HORI_LEFT, // inside
+ HORI_RIGHT // outside
+*/
+ if( nIntValue < 6 && nIntValue > 0 )
+ {
+ static const sal_Int16 aHoriOrientTab[ 6 ] =
+ {
+ text::HoriOrientation::NONE,
+ text::HoriOrientation::LEFT,
+ text::HoriOrientation::CENTER,
+ text::HoriOrientation::RIGHT,
+ text::HoriOrientation::INSIDE,
+ text::HoriOrientation::OUTSIDE
+ };
+ m_pImpl->nHoriOrient = aHoriOrientTab[nIntValue];
+ m_pImpl->bPageToggle = nIntValue > 3;
+ }
+ break;
+ case NS_rtf::LN_YAlign:
+/*
+ static const SwVertOrient aVertOriTab[ nCntYAlign ] =
+ {
+ VERT_NONE, // From Top position
+ VERT_TOP, // top
+ VERT_CENTER, // centered
+ VERT_BOTTOM, // bottom
+ VERT_LINE_TOP, // inside (obscure)
+ VERT_LINE_BOTTOM // outside (obscure)
+ };
+ // CMC,OD 24.11.2003 #i22673# - to-line vertical alignment
+ static const SwVertOrient aToLineVertOriTab[ nCntYAlign ] =
+ {
+ VERT_NONE, // below
+ VERT_LINE_BOTTOM, // top
+ VERT_LINE_CENTER, // centered
+ VERT_LINE_TOP, // bottom
+ VERT_LINE_BOTTOM, // inside (obscure)
+ VERT_LINE_TOP // outside (obscure)
+ };
+ if ( eVertRel == REL_VERT_LINE ) //m_pImpl->nVertRelation == text::RelOrientation::TEXT_LINE
+ {
+ eVertOri = aToLineVertOriTab[ nYAlign ];
+ }
+ else
+ {
+ eVertOri = aVertOriTab[ nYAlign ];
+ }
+
+*/
+ if( nIntValue < 6 && nIntValue > 0)
+ {
+ static const sal_Int16 aVertOrientTab[ 6 ] =
+ {
+ text::VertOrientation::NONE, // From Top position
+ text::VertOrientation::TOP, // top
+ text::VertOrientation::CENTER, // centered
+ text::VertOrientation::BOTTOM, // bottom
+ text::VertOrientation::LINE_TOP, // inside (obscure)
+ text::VertOrientation::LINE_BOTTOM // outside (obscure)
+ };
+ static const sal_Int16 aToLineVertOrientTab[ 6 ] =
+ {
+ text::VertOrientation::NONE, // below
+ text::VertOrientation::LINE_BOTTOM, // top
+ text::VertOrientation::LINE_CENTER, // centered
+ text::VertOrientation::LINE_TOP, // bottom
+ text::VertOrientation::LINE_BOTTOM, // inside (obscure)
+ text::VertOrientation::LINE_TOP // outside (obscure)
+ };
+ m_pImpl->nVertOrient = m_pImpl->nVertRelation == text::RelOrientation::TEXT_LINE ?
+ aToLineVertOrientTab[nIntValue] : aVertOrientTab[nIntValue];
+ }
+ break;
+ case NS_rtf::LN_LayoutInTableCell: break; //currently unknown
+ case NS_rtf::LN_XRelTo:
+ case NS_rtf::LN_BX: //hori orient relation
+ switch( nIntValue )
+ {
+ case 0: m_pImpl->nHoriRelation = text::RelOrientation::PAGE_PRINT_AREA; break;
+ case 1: m_pImpl->nHoriRelation = text::RelOrientation::PAGE_FRAME; break;
+ case 2: m_pImpl->nHoriRelation = text::RelOrientation::FRAME; break;
+ //case :
+ default:m_pImpl->nHoriRelation = text::RelOrientation::CHAR;
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_YRelTo:
+ case NS_rtf::LN_BY: //vert orient relation
+ switch( nIntValue )
+ {
+ case 0: m_pImpl->nVertRelation = text::RelOrientation::PAGE_PRINT_AREA; break;
+ case 1: m_pImpl->nVertRelation = text::RelOrientation::PAGE_FRAME; break;
+ case 2: m_pImpl->nVertRelation = text::RelOrientation::FRAME; break;
+ //case :
+ default:m_pImpl->nVertRelation = text::RelOrientation::TEXT_LINE;
+ }
+
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_WR: //wrapping
+ switch( nIntValue )
+ {
+ case 0: //0 like 2, but doesn't require absolute object
+ m_pImpl->bIgnoreWRK = false;
+ case 2: //2 wrap around absolute object
+ m_pImpl->nWrap = text::WrapTextMode_PARALLEL;
+ break;
+ case 1: //1 no text next to shape
+ m_pImpl->nWrap = text::WrapTextMode_NONE;
+ break;
+ case 3: //3 wrap as if no object present
+ m_pImpl->nWrap = text::WrapTextMode_THROUGHT;
+ break;
+ case 4: //4 wrap tightly around object
+ m_pImpl->bIgnoreWRK = false;
+ case 5: //5 wrap tightly, but allow holes
+ m_pImpl->nWrap = text::WrapTextMode_PARALLEL;
+ m_pImpl->bContour = true;
+ break;
+ default:;
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_WRK:
+ if( !m_pImpl->bIgnoreWRK )
+ switch( nIntValue )
+ {
+ case 0: //0 like 2, but doesn't require absolute object
+ case 2: //2 wrap around absolute object
+ m_pImpl->nWrap = text::WrapTextMode_PARALLEL;
+ break;
+ case 1: //1 no text next to shape
+ m_pImpl->nWrap = text::WrapTextMode_NONE;
+ break;
+ case 3: //3 wrap as if no object present
+ m_pImpl->nWrap = text::WrapTextMode_THROUGHT;
+ break;
+ case 4: //4 wrap tightly around object
+ case 5: //5 wrap tightly, but allow holes
+ m_pImpl->nWrap = text::WrapTextMode_PARALLEL;
+ m_pImpl->bContour = true;
+ break;
+ default:;
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FRCASIMPLE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FBELOWTEXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FANCHORLOCK:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_CTXBX:
+// {
+// sal_Int32 nValue1 = val.getInt();
+// nValue1++;
+// }
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_shptxt:
+ //todo: text content
+ break;
+ /* case NS_rtf::LN_CH = 10421;
+ case NS_rtf::LN_UNUSED0_5 = 10422;
+ case NS_rtf::LN_FLT = 10423;
+ case NS_rtf::LN_shpLeft = 10424;
+ case NS_rtf::LN_shpTop = 10425;
+ break;*/
+ case NS_rtf::LN_dffheader: break;
+ case NS_ooxml::LN_CT_PositiveSize2D_cx:// 90407;
+ case NS_ooxml::LN_CT_PositiveSize2D_cy:// 90408;
+ {
+ sal_Int32 nDim = ConversionHelper::convertEMUToMM100( nIntValue );
+ 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:// 90907;
+ case NS_ooxml::LN_CT_EffectExtent_t:// 90908;
+ case NS_ooxml::LN_CT_EffectExtent_r:// 90909;
+ case NS_ooxml::LN_CT_EffectExtent_b:// 90910;
+ //todo: extends the wrapping size of the object, e.g. if shadow is added
+ 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 = val.getString();
+ break;
+ case NS_ooxml::LN_CT_NonVisualDrawingProps_descr:// 90652;
+ //alternative text
+ m_pImpl->sAlternativeText = val.getString();
+ 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;
+ {
+ //redirect to shape option processing
+ switch( nName )
+ {
+ case NS_ooxml::LN_CT_Anchor_distT: // 90983;
+ m_pImpl->nShapeOptionType = NS_dff::LN_shpdyWrapDistTop;
+ break;
+ case NS_ooxml::LN_CT_Anchor_distB: // 90984;
+ m_pImpl->nShapeOptionType = NS_dff::LN_shpdyWrapDistBottom;
+ break;
+ case NS_ooxml::LN_CT_Anchor_distL: // 90985;
+ m_pImpl->nShapeOptionType = NS_dff::LN_shpdxWrapDistLeft;
+ break;
+ case NS_ooxml::LN_CT_Anchor_distR: // 90986;
+ m_pImpl->nShapeOptionType = NS_dff::LN_shpdxWrapDistRight;
+ break;
+ //m_pImpl->nShapeOptionType = NS_dff::LN_shpcropFromTop
+ default: ;
+ }
+ ProcessShapeOptions(val);
+ }
+ break;
+ case NS_ooxml::LN_CT_Anchor_simplePos_attr: // 90987;
+ m_pImpl->bUseSimplePos = nIntValue > 0;
+ break;
+ case NS_ooxml::LN_CT_Anchor_relativeHeight: // 90988;
+ //z-order
+ break;
+ case NS_ooxml::LN_CT_Anchor_behindDoc: // 90989; - in background
+ if( nIntValue > 0 )
+ m_pImpl->bOpaque = false;
+ break;
+ case NS_ooxml::LN_CT_Anchor_locked: // 90990; - ignored
+ case NS_ooxml::LN_CT_Anchor_layoutInCell: // 90991; - ignored
+ //true: inside cell, cell resizes, false: table is resized or relocated, object might be outside of the table
+ case NS_ooxml::LN_CT_Anchor_hidden: // 90992; - ignored
+ break;
+ case NS_ooxml::LN_CT_Anchor_allowOverlap: // 90993;
+ //enable overlapping - ignored
+ break;
+ case NS_ooxml::LN_CT_Point2D_x: // 90405;
+ case NS_ooxml::LN_CT_Point2D_y: // 90406;
+ if( m_pImpl->bUseSimplePos )
+ {
+ //todo: absolute positioning
+ NS_ooxml::LN_CT_Point2D_x == nName ? m_pImpl->nLeftPosition = ConversionHelper::convertTwipToMM100(nIntValue) :
+ m_pImpl->nTopPosition = ConversionHelper::convertTwipToMM100(nIntValue);
+
+ }
+ break;
+ case NS_ooxml::LN_CT_WrapTight_wrapText: // 90934;
+ m_pImpl->bContour = true;
+ //no break;
+ case NS_ooxml::LN_CT_WrapSquare_wrapText: //90928;
+ switch ( val.getInt() )
+ {
+ 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:;
+ }
+ break;
+ case NS_ooxml::LN_shape:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ {
+ uno::Reference< drawing::XShape> xShape;
+ val.getAny( ) >>= xShape;
+
+ if ( xShape.is( ) )
+ {
+ // Is it a graphic image
+ bool bUseShape = true;
+ try
+ {
+ uno::Reference< beans::XPropertySet > xShapeProps
+ ( xShape, uno::UNO_QUERY_THROW );
+
+ rtl::OUString sUrl;
+ xShapeProps->getPropertyValue( rtl::OUString::createFromAscii( "GraphicURL" ) ) >>= sUrl;
+
+ ::com::sun::star::beans::PropertyValues aMediaProperties( 1 );
+ aMediaProperties[0].Name = rtl::OUString::createFromAscii( "URL" );
+ aMediaProperties[0].Value <<= sUrl;
+
+ m_xGraphicObject = createGraphicObject( aMediaProperties );
+
+ 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( rtl::OUString::createFromAscii( "Height" ),
+ uno::makeAny( aSize.Height ) );
+ xGraphProps->setPropertyValue( rtl::OUString::createFromAscii( "Width" ),
+ uno::makeAny( aSize.Width ) );
+ }
+ }
+ catch( const beans::UnknownPropertyException e )
+ {
+ // 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);
+
+
+ PropertyNameSupplier& rPropNameSupplier =
+ PropertyNameSupplier::GetPropertyNameSupplier();
+ xShapeProps->setPropertyValue
+ (rPropNameSupplier.GetName(PROP_ANCHOR_TYPE),
+ uno::makeAny
+ (text::TextContentAnchorType_AS_CHARACTER));
+ xShapeProps->setPropertyValue
+ (rPropNameSupplier.GetName(PROP_TEXT_RANGE),
+ uno::makeAny
+ (m_pImpl->rDomainMapper.GetCurrentTextRange()));
+
+ awt::Point aPoint(m_xShape->getPosition());
+ awt::Size aSize(m_xShape->getSize());
+
+ if (m_pImpl->isXSizeValid())
+ aSize.Width = m_pImpl->getXSize();
+ if (m_pImpl->isYSizeValis())
+ aSize.Height = m_pImpl->getYSize();
+
+ m_xShape->setSize(aSize);
+
+ m_pImpl->bIsGraphic = true;
+ }
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_Inline_distT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_Inline_distB:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_Inline_distL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_Inline_distR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ //TODO: need to be handled
+ break;
+ case NS_ooxml::LN_CT_GraphicalObjectData_uri:
+ val.getString();
+ //TODO: does it need to be handled?
+ break;
+ default:
+#if OSL_DEBUG_LEVEL > 0
+ ::rtl::OString sMessage( "GraphicImport::attribute() - Id: ");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nName ), 10 );
+ sMessage += ::rtl::OString(" / 0x");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nName ), 16 );
+ OSL_ENSURE( false, sMessage.getStr())
+#endif
+ ;
+ }
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("attribute");
+#endif
+}
+
+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;
+}
+
+/*-- 22.11.2006 09:46:48---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::ProcessShapeOptions(Value& val)
+{
+ sal_Int32 nIntValue = val.getInt();
+ sal_Int32 nTwipValue = ConversionHelper::convertTwipToMM100(nIntValue);
+ /* WRITERFILTERSTATUS: table: ShapeOptionsAttribute */
+ switch( m_pImpl->nShapeOptionType )
+ {
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shprotation /*4*/: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfLockRotation /*119*/: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfLockAspectRatio /*120*/: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfLockPosition /*121*/: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfLockAgainstSelect /*122*/: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfLockCropping /*123*/: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfLockVertices /*124*/: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfLockText /*125*/: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfLockAdjustHandles /*126*/: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfLockAgainstGrouping /*127*/: break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfLockAgainstGrouping /*127*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplTxid /*128*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpdxTextLeft /*129*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpdyTextTop /*130*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpdxTextRight /*131*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpdyTextBottom /*132*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpWrapText /*133*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpscaleText /*134*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpanchorText /*135*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shptxflTextFlow /*136*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpcdirFont /*137*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shphspNext /*138*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shptxdir /*139*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfSelectText /*187*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfAutoTextMargin /*188*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfRotateText /*189*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfFitShapeToText /*190*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfFitTextToShape /*191*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextUNICODE /*192*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextRTF /*193*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextAlign /*194*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextSize /*195*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextSpacing /*196*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextFont /*197*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextFReverseRows /*240*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfGtext /*241*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextFVertical /*242*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextFKern /*243*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextFTight /*244*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextFStretch /*245*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextFShrinkFit /*246*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextFBestFit /*247*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextFNormalize /*248*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextFDxMeasure /*249*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextFBold /*250*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextFItalic /*251*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextFUnderline /*252*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextFShadow /*253*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextFSmallcaps /*254*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgtextFStrikethrough /*255*/:
+
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_dff::LN_shpcropFromTop /*256*/ : m_pImpl->nTopCrop = nTwipValue; break;// rtf:shpcropFromTop
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_dff::LN_shpcropFromBottom /*257*/ : m_pImpl->nBottomCrop= nTwipValue; break;// rtf:shpcropFromBottom
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_dff::LN_shpcropFromLeft /*258*/ : m_pImpl->nLeftCrop = nTwipValue; break;// rtf:shpcropFromLeft
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_dff::LN_shpcropFromRight/*259*/ : m_pImpl->nRightCrop = nTwipValue;break;// rtf:shpcropFromRight
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_dff::LN_shppib/*260*/: break; // rtf:shppib
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_dff::LN_shppibName/*261*/: break; // rtf:shppibName
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_dff::LN_shppibFlags/*262*/: // rtf:shppibFlags
+ /*
+ * // MSOBLIPFLAGS ñ flags for pictures
+ typedef enum
+ {
+ msoblipflagDefault = 0,
+ msoblipflagComment = 0, // Blip name is a comment
+ msoblipflagFile, // Blip name is a file name
+ msoblipflagURL, // Blip name is a full URL
+ msoblipflagType = 3, // Mask to extract type
+ // Or the following flags with any of the above.
+ msoblipflagDontSave = 4, // A "dont" is the depression in the metal
+ // body work of an automobile caused when a
+ // cyclist violently thrusts his or her nose
+ // at it, thus a DontSave is another name for
+ // a cycle lane.
+ msoblipflagDoNotSave = 4, // For those who prefer English
+ msoblipflagLinkToFile = 8,
+ };
+ *
+ * */
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shppictureTransparent /*263*/:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_dff::LN_shppictureContrast/*264*/: // rtf:shppictureContrast docu: "1<<16"
+ /*
+ 0x10000 is msoffice 50%
+ < 0x10000 is in units of 1/50th of 0x10000 per 1%
+ > 0x10000 is in units where
+ a msoffice x% is stored as 50/(100-x) * 0x10000
+
+ plus, a (ui) microsoft % ranges from 0 to 100, OOO
+ from -100 to 100, so also normalize into that range
+ */
+ if ( nIntValue > 0x10000 )
+ {
+ double fX = nIntValue;
+ fX /= 0x10000;
+ fX /= 51; // 50 + 1 to round
+ fX = 1/fX;
+ m_pImpl->nContrast = static_cast<sal_Int32>(fX);
+ m_pImpl->nContrast -= 100;
+ m_pImpl->nContrast = -m_pImpl->nContrast;
+ m_pImpl->nContrast = (m_pImpl->nContrast-50)*2;
+ }
+ else if ( nIntValue == 0x10000 )
+ m_pImpl->nContrast = 0;
+ else
+ {
+ m_pImpl->nContrast = nIntValue * 101; //100 + 1 to round
+ m_pImpl->nContrast /= 0x10000;
+ m_pImpl->nContrast -= 100;
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_dff::LN_shppictureBrightness/*265*/: // rtf:shppictureBrightness
+ m_pImpl->nBrightness = ( (sal_Int32) nIntValue / 327 );
+ break;
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_dff::LN_shppictureGamma/*266*/: // rtf:shppictureGamma
+ //todo check gamma value with _real_ document
+ m_pImpl->fGamma = double(nIntValue/655);
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_dff::LN_shppictureId /*267*/: break; // rtf:shppictureId
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_dff::LN_shppictureDblCrMod /*268*/: break; // rtf:shppictureDblCrMod
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_dff::LN_shppictureFillCrMod /*269*/: break; // rtf:shppictureFillCrMod
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_dff::LN_shppictureLineCrMod /*270*/: break; // rtf:shppictureLineCrMod
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shppibPrint /*271*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shppibPrintName /*272*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shppibPrintFlags /*273*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfNoHitTestPicture /*316*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shppictureGray /*317*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shppictureBiLevel /*318*/:
+
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_dff::LN_shppictureActive/*319*/: // rtf:shppictureActive
+ switch( nIntValue & 0x06 )
+ {
+ case 0 : m_pImpl->eColorMode = drawing::ColorMode_STANDARD; break;
+ case 4 : m_pImpl->eColorMode = drawing::ColorMode_GREYS; break;
+ case 6 : m_pImpl->eColorMode = drawing::ColorMode_MONO; break;
+ default:;
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgeoLeft /*320*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgeoTop /*321*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgeoRight /*322*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpgeoBottom /*323*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpshapePath /*324*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shppVertices /*325*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shppSegmentInfo /*326*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpadjustValue /*327*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpadjust2Value /*328*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpadjust3Value /*329*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpadjust4Value /*330*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpadjust5Value /*331*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpadjust6Value /*332*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpadjust7Value /*333*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpadjust8Value /*334*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpadjust9Value /*335*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpadjust10Value /*336*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfShadowOK /*378*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpf3DOK /*379*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfLineOK /*380*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfGtextOK /*381*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfFillShadeShapeOK /*382*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfFillOK /*383*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillType /*384*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_dff::LN_shpfillColor /*385*/:
+ m_pImpl->nFillColor = (m_pImpl->nFillColor & 0xff000000) + ConversionHelper::ConvertColor( nIntValue );
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_dff::LN_shpfillOpacity /*386*/:
+ {
+ sal_Int32 nTrans = 0xff - ( nIntValue * 0xff ) / 0xffff;
+ m_pImpl->nFillColor = (nTrans << 0x18 ) + (m_pImpl->nFillColor & 0xffffff);
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillBackColor /*387*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillBackOpacity /*388*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillCrMod /*389*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillBlip /*390*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillBlipName /*391*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillBlipFlags /*392*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillWidth /*393*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillHeight /*394*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillAngle /*395*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillFocus /*396*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillToLeft /*397*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillToTop /*398*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillToRight /*399*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillToBottom /*400*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillRectLeft /*401*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillRectTop /*402*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillRectRight /*403*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillRectBottom /*404*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillDztype /*405*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillShadePreset /*406*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillShadeColors /*407*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillOriginX /*408*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillOriginY /*409*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillShapeOriginX /*410*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillShapeOriginY /*411*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillShadeType /*412*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfFilled /*443*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfHitTestFill /*444*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillShape /*445*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfillUseRect /*446*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_dff::LN_shpfNoFillHitTest /*447*/: break; // rtf:shpfNoFillHitTest
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_dff::LN_shplineColor /*448*/:
+ m_pImpl->aBorders[m_pImpl->nCurrentBorderLine].nLineColor = ConversionHelper::ConvertColor( nIntValue );
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineOpacity /*449*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineBackColor /*450*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineCrMod /*451*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineType /*452*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineFillBlip /*453*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineFillBlipName /*454*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineFillBlipFlags /*455*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineFillWidth /*456*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineFillHeight /*457*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineFillDztype /*458*/:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_dff::LN_shplineWidth /*459*/:
+ //1pt == 12700 units
+ m_pImpl->aBorders[m_pImpl->nCurrentBorderLine].nLineWidth = ConversionHelper::convertTwipToMM100(nIntValue / 635);
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineMiterLimit /*460*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineStyle /*461*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_dff::LN_shplineDashing /*462*/:
+ //graphic borders don't support different dashing
+ /*MSOLINEDASHING
+ msolineSolid, // Solid (continuous) pen
+ msolineDashSys, // PS_DASH system dash style
+ msolineDotSys, // PS_DOT system dash style
+ msolineDashDotSys, // PS_DASHDOT system dash style
+ msolineDashDotDotSys, // PS_DASHDOTDOT system dash style
+ msolineDotGEL, // square dot style
+ msolineDashGEL, // dash style
+ msolineLongDashGEL, // long dash style
+ msolineDashDotGEL, // dash short dash
+ msolineLongDashDotGEL, // long dash short dash
+ msolineLongDashDotDotGEL // long dash short dash short dash*/
+ //m_pImpl->aBorders[nCurrentBorderLine].nLineType = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineDashStyle /*463*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineStartArrowhead /*464*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineEndArrowhead /*465*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineStartArrowWidth /*466*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineStartArrowLength /*467*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineEndArrowWidth /*468*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineEndArrowLength /*469*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineJoinStyle /*470*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineEndCapStyle /*471*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfArrowheadsOK /*507*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfLine /*508*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfHitTestLine /*509*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplineFillShape /*510*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_dff::LN_shpfNoLineDrawDash /*511*/: break; // rtf:shpfNoLineDrawDash
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpshadowType /*512*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpshadowColor /*513*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpshadowHighlight /*514*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpshadowCrMod /*515*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpshadowOpacity /*516*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpshadowOffsetX /*517*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpshadowOffsetY /*518*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpshadowSecondOffsetX /*519*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpshadowSecondOffsetY /*520*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpshadowScaleXToX /*521*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpshadowScaleYToX /*522*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpshadowScaleXToY /*523*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpshadowScaleYToY /*524*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpshadowPerspectiveX /*525*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpshadowPerspectiveY /*526*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpshadowWeight /*527*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpshadowOriginX /*528*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpshadowOriginY /*529*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfShadow /*574*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfshadowObscured /*575*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpperspectiveType /*576*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpperspectiveOffsetX /*577*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpperspectiveOffsetY /*578*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpperspectiveScaleXToX /*579*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpperspectiveScaleYToX /*580*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpperspectiveScaleXToY /*581*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpperspectiveScaleYToY /*582*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpperspectivePerspectiveX /*583*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpperspectivePerspectiveY /*584*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpperspectiveWeight /*585*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpperspectiveOriginX /*586*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpperspectiveOriginY /*587*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfPerspective /*639*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DSpecularAmt /*640*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DDiffuseAmt /*641*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DShininess /*642*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DEdgeThickness /*643*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DExtrudeForward /*644*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DExtrudeBackward /*645*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DExtrudePlane /*646*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DExtrusionColor /*647*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DCrMod /*648*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpf3D /*700*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfc3DMetallic /*701*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfc3DUseExtrusionColor /*702*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfc3DLightFace /*703*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DYRotationAngle /*704*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DXRotationAngle /*705*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DRotationAxisX /*706*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DRotationAxisY /*707*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DRotationAxisZ /*708*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DRotationAngle /*709*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DRotationCenterX /*710*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DRotationCenterY /*711*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DRotationCenterZ /*712*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DRenderMode /*713*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DTolerance /*714*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DXViewpoint /*715*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DYViewpoint /*716*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DZViewpoint /*717*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DOriginX /*718*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DOriginY /*719*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DSkewAngle /*720*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DSkewAmount /*721*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DAmbientIntensity /*722*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DKeyX /*723*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DKeyY /*724*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DKeyZ /*725*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DKeyIntensity /*726*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DFillX /*727*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DFillY /*728*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DFillZ /*729*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpc3DFillIntensity /*730*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfc3DConstrainRotation /*763*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfc3DRotationCenterAuto /*764*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfc3DParallel /*765*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfc3DKeyHarsh /*766*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfc3DFillHarsh /*767*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shphspMaster /*769*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpcxstyle /*771*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpbWMode /*772*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpbWModePureBW /*773*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpbWModeBW /*774*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfOleIcon /*826*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfPreferRelativeResize /*827*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfLockShapeType /*828*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfDeleteAttachedObject /*830*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfBackground /*831*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpspcot /*832*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpdxyCalloutGap /*833*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpspcoa /*834*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpspcod /*835*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpdxyCalloutDropSpecified /*836*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpdxyCalloutLengthSpecified /*837*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfCallout /*889*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfCalloutAccentBar /*890*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfCalloutTextBorder /*891*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfCalloutMinusX /*892*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfCalloutMinusY /*893*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfCalloutDropAuto /*894*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfCalloutLengthSpecified /*895*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpwzName /*896*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_dff::LN_shpwzDescription /*897*/: //alternative text
+ m_pImpl->sAlternativeText = val.getString();
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shppihlShape /*898*/:
+ case NS_dff::LN_shppWrapPolygonVertices/*899*/: break; // rtf:shppWrapPolygonVertices
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_dff::LN_shpdxWrapDistLeft /*900*/: // contains a twip/635 value
+ //todo: changes have to be applied depending on the orientation, see SwWW8ImplReader::AdjustLRWrapForWordMargins()
+ m_pImpl->nLeftMargin = nIntValue / 360;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_dff::LN_shpdyWrapDistTop /*901*/: // contains a twip/635 value
+ //todo: changes have to be applied depending on the orientation, see SwWW8ImplReader::AdjustULWrapForWordMargins()
+ m_pImpl->nTopMargin = nIntValue / 360;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_dff::LN_shpdxWrapDistRight /*902*/:// contains a twip/635 value
+ //todo: changes have to be applied depending on the orientation, see SwWW8ImplReader::AdjustLRWrapForWordMargins()
+ m_pImpl->nRightMargin = nIntValue / 360;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_dff::LN_shpdyWrapDistBottom /*903*/:// contains a twip/635 value
+ //todo: changes have to be applied depending on the orientation, see SwWW8ImplReader::AdjustULWrapForWordMargins()
+ m_pImpl->nBottomMargin = nIntValue / 360;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shplidRegroup /*904*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfEditedWrap /*953*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfBehindDocument /*954*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfOnDblClickNotify /*955*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfIsButton /*956*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfOneD /*957*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// case NS_dff::LN_shpfHidden /*958*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_dff::LN_shpfPrint /*959*/: break; // rtf:shpfPrint
+
+ default:
+ OSL_ENSURE( false, "shape option unsupported?");
+ }
+}
+/*-- 01.11.2006 09:45:02---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::sprm(Sprm & rSprm)
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("sprm");
+ dmapper_logger->chars(rSprm.toString());
+#endif
+
+ sal_uInt32 nSprmId = rSprm.getId();
+ Value::Pointer_t pValue = rSprm.getValue();
+
+ /* WRITERFILTERSTATUS: table: PICFsprmdata */
+ switch(nSprmId)
+ {
+ case 0xf004: //dff record
+ case 0xf00a: //part of 0xf004 - shape properties
+ case 0xf00b: //part of 0xf004
+ case 0xf007:
+ case 0xf122: //udefprop
+ 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_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_CT_WrapTight_wrapPolygon: // 90933;
+ case NS_ooxml::LN_graphic_graphic:
+ case NS_ooxml::LN_pic_pic:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ pProperties->resolve(*this);
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_Anchor_positionH: // 90976;
+ {
+ // Use a special handler for the positionning
+ PositionHandlerPtr pHandler( new PositionHandler );
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get( ) )
+ {
+ pProperties->resolve( *pHandler );
+
+ m_pImpl->nHoriRelation = pHandler->m_nRelation;
+ m_pImpl->nHoriOrient = pHandler->m_nOrient;
+ m_pImpl->nLeftPosition = pHandler->m_nPosition;
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_Anchor_positionV: // 90977;
+ {
+ // Use a special handler for the positionning
+ PositionHandlerPtr pHandler( new PositionHandler );
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get( ) )
+ {
+ pProperties->resolve( *pHandler );
+
+ m_pImpl->nVertRelation = pHandler->m_nRelation;
+ m_pImpl->nVertOrient = pHandler->m_nOrient;
+ m_pImpl->nTopPosition = pHandler->m_nPosition;
+ }
+ }
+ break;
+ case 0x271b:
+ case 0x271c:
+ {
+ if( nSprmId != 0x271c || m_pImpl->nDffType == 0xf01f || m_pImpl->nDffType == 0xf01e )
+ {
+ writerfilter::Reference<BinaryObj>::Pointer_t pPictureData = rSprm.getBinary();
+ if( pPictureData.get())
+ pPictureData->resolve(*this);
+ }
+ }
+ break;
+ case NS_ooxml::LN_EG_WrapType_wrapNone: // 90944; - doesn't contain attributes
+ //depending on the behindDoc attribute text wraps through behind or in fron of the object
+ m_pImpl->nWrap = text::WrapTextMode_THROUGHT;
+ break;
+ case NS_ooxml::LN_EG_WrapType_wrapTopAndBottom: // 90948;
+ m_pImpl->nWrap = text::WrapTextMode_NONE;
+ break;
+ case NS_ooxml::LN_EG_WrapType_wrapThrough: // 90947;
+ m_pImpl->nWrap = text::WrapTextMode_THROUGHT;
+ break;
+ case 0xf010:
+ case 0xf011:
+ //ignore - doesn't contain useful members
+ break;
+ case NS_ooxml::LN_CT_GraphicalObject_graphicData:// 90660;
+ {
+ m_pImpl->bIsGraphic = true;
+
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ default:
+#if OSL_DEBUG_LEVEL > 0
+ ::rtl::OString sMessage( "GraphicImport::sprm() - Id: ");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nSprmId ), 10 );
+ sMessage += ::rtl::OString(" / 0x");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nSprmId ), 16 );
+ OSL_ENSURE( false, sMessage.getStr())
+#endif
+ ;
+ }
+
+
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("sprm");
+#endif
+}
+/*-- 01.11.2006 09:45:02---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t /*ref*/)
+{
+}
+/*-- 16.11.2006 16:14:32---------------------------------------------------
+ crop is stored as "fixed float" as 16.16 fraction value
+ related to width/or height
+ -----------------------------------------------------------------------*/
+void lcl_CalcCrop( sal_Int32& nCrop, sal_Int32 nRef )
+{
+ nCrop = ((nCrop >> 16 ) * nRef )
+ + (((nCrop & 0xffff) * nRef ) >> 16);
+}
+
+uno::Reference< text::XTextContent > GraphicImport::createGraphicObject( const beans::PropertyValues& aMediaProperties )
+{
+ uno::Reference< text::XTextContent > xGraphicObject;
+ try
+ {
+ uno::Reference< graphic::XGraphicProvider > xGraphicProvider(
+ m_xComponentContext->getServiceManager()->createInstanceWithContext(
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.graphic.GraphicProvider")),
+ m_xComponentContext),
+ uno::UNO_QUERY_THROW );
+
+ uno::Reference< graphic::XGraphic > xGraphic = xGraphicProvider->queryGraphic( aMediaProperties );
+
+ if(xGraphic.is())
+ {
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ uno::Reference< beans::XPropertySet > xGraphicObjectProperties(
+ m_xTextFactory->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextGraphicObject"))),
+ uno::UNO_QUERY_THROW);
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName(PROP_GRAPHIC), uno::makeAny( xGraphic ));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName(PROP_ANCHOR_TYPE),
+ uno::makeAny( m_pImpl->eGraphicImportType == IMPORT_AS_SHAPE || m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_ANCHOR ?
+ text::TextContentAnchorType_AT_CHARACTER :
+ text::TextContentAnchorType_AS_CHARACTER ));
+ xGraphicObject = uno::Reference< text::XTextContent >( xGraphicObjectProperties, uno::UNO_QUERY_THROW );
+
+ //shapes have only one border, PICF might have four
+ table::BorderLine aBorderLine;
+ for( sal_Int32 nBorder = 0; nBorder < 4; ++nBorder )
+ {
+ if( m_pImpl->eGraphicImportType == IMPORT_AS_GRAPHIC || !nBorder )
+ {
+ aBorderLine.Color = m_pImpl->aBorders[m_pImpl->eGraphicImportType == IMPORT_AS_SHAPE ? BORDER_TOP : static_cast<BorderPosition>(nBorder) ].nLineColor;
+ aBorderLine.InnerLineWidth = 0;
+ aBorderLine.OuterLineWidth = (sal_Int16)m_pImpl->aBorders[m_pImpl->eGraphicImportType == IMPORT_AS_SHAPE ? BORDER_TOP : static_cast<BorderPosition>(nBorder) ].nLineWidth;
+ aBorderLine.LineDistance = 0;
+ }
+ PropertyIds aBorderProps[4] =
+ {
+ PROP_LEFT_BORDER,
+ PROP_RIGHT_BORDER,
+ PROP_TOP_BORDER,
+ PROP_BOTTOM_BORDER
+ };
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( aBorderProps[nBorder]), uno::makeAny(aBorderLine));
+ }
+
+ // setting properties for all types
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_ALTERNATIVE_TEXT ),
+ uno::makeAny( m_pImpl->sAlternativeText ));
+ if( m_pImpl->bPositionProtected )
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_POSITION_PROTECTED ),
+ uno::makeAny(true));
+ if( m_pImpl->bSizeProtected )
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_SIZE_PROTECTED ),
+ uno::makeAny(true));
+
+ if( m_pImpl->eGraphicImportType == IMPORT_AS_SHAPE || m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_ANCHOR )
+ {
+ sal_Int32 nWidth = m_pImpl->nRightPosition - m_pImpl->nLeftPosition;
+ if( m_pImpl->eGraphicImportType == IMPORT_AS_SHAPE )
+ {
+ sal_Int32 nHeight = m_pImpl->nBottomPosition - m_pImpl->nTopPosition;
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName(PROP_SIZE),
+ uno::makeAny( awt::Size( nWidth, nHeight )));
+ }
+ //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;
+ }
+
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_HORI_ORIENT ),
+ uno::makeAny(m_pImpl->nHoriOrient));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_HORI_ORIENT_POSITION),
+ uno::makeAny(m_pImpl->nLeftPosition));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_HORI_ORIENT_RELATION ),
+ uno::makeAny(m_pImpl->nHoriRelation));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_PAGE_TOGGLE ),
+ uno::makeAny(m_pImpl->bPageToggle));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_VERT_ORIENT ),
+ uno::makeAny(m_pImpl->nVertOrient));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_VERT_ORIENT_POSITION),
+ uno::makeAny(m_pImpl->nTopPosition));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_VERT_ORIENT_RELATION ),
+ uno::makeAny(m_pImpl->nVertRelation));
+ if( !m_pImpl->bOpaque )
+ {
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_OPAQUE ),
+ uno::makeAny(m_pImpl->bOpaque));
+ }
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_SURROUND ),
+ uno::makeAny(m_pImpl->nWrap));
+
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_SURROUND_CONTOUR ),
+ uno::makeAny(m_pImpl->bContour));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_CONTOUR_OUTSIDE ),
+ uno::makeAny(true));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_LEFT_MARGIN ),
+ uno::makeAny(m_pImpl->nLeftMargin));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_RIGHT_MARGIN ),
+ uno::makeAny(m_pImpl->nRightMargin));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_TOP_MARGIN ),
+ uno::makeAny(m_pImpl->nTopMargin));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_BOTTOM_MARGIN ),
+ uno::makeAny(m_pImpl->nBottomMargin));
+
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_CONTOUR_POLY_POLYGON),
+ uno::Any());
+ if( m_pImpl->eColorMode == drawing::ColorMode_STANDARD &&
+ m_pImpl->nContrast == -70 &&
+ m_pImpl->nBrightness == 70 )
+ {
+ // strange definition of WATERMARK!
+ m_pImpl->nContrast = 0;
+ m_pImpl->nBrightness = 0;
+ m_pImpl->eColorMode = drawing::ColorMode_WATERMARK;
+ }
+
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_ADJUST_CONTRAST ),
+ uno::makeAny((sal_Int16)m_pImpl->nContrast));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_ADJUST_LUMINANCE ),
+ uno::makeAny((sal_Int16)m_pImpl->nBrightness));
+ if(m_pImpl->eColorMode != drawing::ColorMode_STANDARD)
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_GRAPHIC_COLOR_MODE ),
+ uno::makeAny(m_pImpl->eColorMode));
+ if(m_pImpl->fGamma > 0. )
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_GAMMA ),
+ uno::makeAny(m_pImpl->fGamma ));
+ if(m_pImpl->bHoriFlip)
+ {
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_HORI_MIRRORED_ON_EVEN_PAGES ),
+ uno::makeAny( m_pImpl->bHoriFlip ));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_HORI_MIRRORED_ON_ODD_PAGES ),
+ uno::makeAny( m_pImpl->bHoriFlip ));
+ }
+ if( m_pImpl->bVertFlip )
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_VERT_MIRRORED ),
+ uno::makeAny( m_pImpl->bVertFlip ));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_BACK_COLOR ),
+ uno::makeAny( m_pImpl->nFillColor ));
+ //there seems to be no way to detect the original size via _real_ API
+ uno::Reference< beans::XPropertySet > xGraphicProperties( xGraphic, uno::UNO_QUERY_THROW );
+ awt::Size aGraphicSize, aGraphicSizePixel;
+ xGraphicProperties->getPropertyValue(rPropNameSupplier.GetName( PROP_SIZE100th_M_M )) >>= aGraphicSize;
+ xGraphicProperties->getPropertyValue(rPropNameSupplier.GetName( PROP_SIZE_PIXEL )) >>= aGraphicSizePixel;
+ if( aGraphicSize.Width && aGraphicSize.Height )
+ {
+ //todo: i71651 graphic size is not provided by the GraphicDescriptor
+ lcl_CalcCrop( m_pImpl->nTopCrop, aGraphicSize.Height );
+ lcl_CalcCrop( m_pImpl->nBottomCrop, aGraphicSize.Height );
+ lcl_CalcCrop( m_pImpl->nLeftCrop, aGraphicSize.Width );
+ lcl_CalcCrop( m_pImpl->nRightCrop, aGraphicSize.Width );
+
+ xGraphicProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_GRAPHIC_CROP ),
+ uno::makeAny(text::GraphicCrop(m_pImpl->nTopCrop, m_pImpl->nBottomCrop, m_pImpl->nLeftCrop, m_pImpl->nRightCrop)));
+ }
+ }
+
+ if(m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_INLINE || m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_ANCHOR)
+ {
+ if( m_pImpl->getXSize() && m_pImpl->getYSize() )
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName(PROP_SIZE),
+ uno::makeAny( awt::Size( m_pImpl->getXSize(), m_pImpl->getYSize() )));
+ try
+ {
+ if( m_pImpl->sName.getLength() )
+ {
+ uno::Reference< container::XNamed > xNamed( xGraphicObjectProperties, uno::UNO_QUERY_THROW );
+ xNamed->setName( m_pImpl->sName );
+ }
+ }
+ catch( const uno::Exception& )
+ {
+ }
+ }
+ }
+ }
+ catch( const uno::Exception& e )
+ {
+ clog << __FILE__ << ":" << __LINE__ << " failed. Message :" ;
+ clog << rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr( ) << endl;
+ }
+ return xGraphicObject;
+}
+
+/*-- 01.11.2006 09:45:02---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::data(const sal_uInt8* buf, size_t len, writerfilter::Reference<Properties>::Pointer_t /*ref*/)
+{
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ ::com::sun::star::beans::PropertyValues aMediaProperties( 1 );
+ aMediaProperties[0].Name = rPropNameSupplier.GetName(PROP_INPUT_STREAM);
+
+ uno::Reference< io::XInputStream > xIStream = new XInputStreamHelper( buf, len, m_pImpl->bIsBitmap );
+ aMediaProperties[0].Value <<= xIStream;
+
+ m_xGraphicObject = createGraphicObject( aMediaProperties );
+}
+/*-- 01.11.2006 09:45:03---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::startSectionGroup()
+{
+}
+/*-- 01.11.2006 09:45:03---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::endSectionGroup()
+{
+}
+/*-- 01.11.2006 09:45:03---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::startParagraphGroup()
+{
+}
+/*-- 01.11.2006 09:45:03---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::endParagraphGroup()
+{
+}
+/*-- 01.11.2006 09:45:03---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::startCharacterGroup()
+{
+}
+/*-- 01.11.2006 09:45:04---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::endCharacterGroup()
+{
+}
+/*-- 01.11.2006 09:45:04---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::text(const sal_uInt8 * /*_data*/, size_t /*len*/)
+{
+}
+/*-- 01.11.2006 09:45:05---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::utext(const sal_uInt8 * /*_data*/, size_t /*len*/)
+{
+}
+/*-- 01.11.2006 09:45:05---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::props(writerfilter::Reference<Properties>::Pointer_t /*ref*/)
+{
+}
+/*-- 01.11.2006 09:45:06---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::table(Id /*name*/, writerfilter::Reference<Table>::Pointer_t /*ref*/)
+{
+}
+/*-- 01.11.2006 09:45:07---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::substream(Id /*name*/, ::writerfilter::Reference<Stream>::Pointer_t /*ref*/)
+{
+}
+/*-- 01.11.2006 09:45:07---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::info(const string & /*info*/)
+{
+}
+
+void GraphicImport::startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > /*xShape*/ )
+{
+}
+
+void GraphicImport::endShape( )
+{
+}
+
+/*-- 09.08.2007 10:17:00---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+bool GraphicImport::IsGraphic() const
+{
+ return m_pImpl->bIsGraphic;
+}
+
+}
+}
diff --git a/writerfilter/source/dmapper/GraphicImport.hxx b/writerfilter/source/dmapper/GraphicImport.hxx
new file mode 100644
index 000000000000..14f512a3d4ee
--- /dev/null
+++ b/writerfilter/source/dmapper/GraphicImport.hxx
@@ -0,0 +1,128 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_GRAPHICIMPORT_HXX
+#define INCLUDED_GRAPHICIMPORT_HXX
+
+//#ifndef INCLUDED_WRITERFILTERDLLAPI_H
+//#include <WriterFilterDllApi.hxx>
+//#endif
+#include <resourcemodel/WW8ResourceModel.hxx>
+//#include <com/sun/star/lang/XComponent.hpp>
+namespace com{ namespace sun { namespace star {
+ namespace uno{
+ class XComponentContext;
+ }
+ namespace lang
+ {
+ class XMultiServiceFactory;
+ }
+ namespace text
+ {
+ class XTextContent;
+ }
+ namespace drawing
+ {
+ class XShape;
+ }
+ namespace beans
+ {
+ class PropertyValue;
+ typedef ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > PropertyValues;
+ }
+}}}
+
+namespace writerfilter {
+namespace dmapper
+{
+class GraphicImport_Impl;
+class DomainMapper;
+
+enum GraphicImportType
+{
+ IMPORT_AS_GRAPHIC,
+ IMPORT_AS_SHAPE,
+ IMPORT_AS_DETECTED_INLINE,
+ IMPORT_AS_DETECTED_ANCHOR
+};
+
+class WRITERFILTER_DLLPRIVATE GraphicImport : public Properties, public Table
+ ,public BinaryObj, public Stream
+{
+ GraphicImport_Impl* m_pImpl;
+ ::com::sun::star::uno::Reference < ::com::sun::star::uno::XComponentContext > m_xComponentContext;
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xTextFactory;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > m_xGraphicObject;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape> m_xShape;
+ void ProcessShapeOptions(Value & val);
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > createGraphicObject(
+ const ::com::sun::star::beans::PropertyValues& aMediaProperties );
+
+public:
+ explicit GraphicImport(::com::sun::star::uno::Reference < ::com::sun::star::uno::XComponentContext > xComponentContext,
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xTextFactory,
+ DomainMapper& rDomainMapper,
+ GraphicImportType eGraphicImportType);
+ virtual ~GraphicImport();
+
+ // Properties
+ virtual void attribute(Id Name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ // Table
+ virtual void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
+ // BinaryObj
+ virtual void data(const sal_uInt8* buf, size_t len, writerfilter::Reference<Properties>::Pointer_t ref);
+
+ // Stream
+ virtual void startSectionGroup();
+ virtual void endSectionGroup();
+ virtual void startParagraphGroup();
+ virtual void endParagraphGroup();
+ virtual void startCharacterGroup();
+ virtual void endCharacterGroup();
+ virtual void text(const sal_uInt8 * data, size_t len);
+ virtual void utext(const sal_uInt8 * data, size_t len);
+ virtual void props(writerfilter::Reference<Properties>::Pointer_t ref);
+ virtual void table(Id name,
+ writerfilter::Reference<Table>::Pointer_t ref);
+ virtual void substream(Id name,
+ ::writerfilter::Reference<Stream>::Pointer_t ref);
+ virtual void info(const string & info);
+ virtual void startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
+ virtual void endShape( );
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > GetGraphicObject();
+ bool IsGraphic() const;
+};
+typedef boost::shared_ptr< GraphicImport > GraphicImportPtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/LFOTable.cxx b/writerfilter/source/dmapper/LFOTable.cxx
new file mode 100644
index 000000000000..82d2b032b761
--- /dev/null
+++ b/writerfilter/source/dmapper/LFOTable.cxx
@@ -0,0 +1,606 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <LFOTable.hxx>
+#include <doctok/resourceids.hxx>
+#include <vector>
+
+namespace writerfilter {
+namespace dmapper
+{
+using namespace std;
+using namespace writerfilter;
+
+struct LFOLevel
+{
+ sal_Int32 nIStartAt;
+ sal_Int32 nFStartAt;
+ sal_Int32 nFFormatting;
+ ::rtl::OUString sILevel;
+
+ LFOLevel() :
+ nIStartAt(-1)
+ ,nFStartAt(-1)
+ ,nFFormatting(-1)
+ {}
+};
+typedef ::boost::shared_ptr< LFOLevel > LFOLevelPtr;
+struct LFOEntry
+{
+ sal_Int32 nListId;
+ sal_Int32 nCLFOLevel;
+ vector< LFOLevelPtr > aLFOLevels; //usually empty
+
+ LFOEntry() :
+ nListId(-1)
+ ,nCLFOLevel(-1)
+ {}
+};
+typedef ::boost::shared_ptr<LFOEntry> LFOEntryPtr;
+
+struct LFOTable_Impl
+{
+ ::std::vector< LFOEntryPtr > m_aLFOEntries; //properties of each level
+ LFOEntryPtr m_pCurrentEntry;
+
+};
+/*-- 27.06.2006 15:13:03---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+LFOTable::LFOTable() :
+ m_pImpl( new LFOTable_Impl )
+{
+}
+/*-- 27.06.2006 15:13:03---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+LFOTable::~LFOTable()
+{
+}
+/*-- 27.06.2006 15:13:04---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void LFOTable::attribute(Id Name, Value & val)
+{
+ OSL_ENSURE(m_pImpl->m_pCurrentEntry, "no current entry to write to");
+ if(!m_pImpl->m_pCurrentEntry)
+ return;
+
+ int nIntValue = val.getInt();
+ /* WRITERFILTERSTATUS: table: LFOTable_attributedata */
+ switch( Name )
+ {
+// case NS_rtf::LN_ISTD: break;//index of applied style
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_rtf::LN_ISTARTAT:
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_rtf::LN_ILVL:
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_rtf::LN_FSTARTAT:
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_rtf::LN_FFORMATTING:
+ if(m_pImpl->m_pCurrentEntry->aLFOLevels.size())
+ {
+ vector< LFOLevelPtr >::reverse_iterator aEndIter = m_pImpl->m_pCurrentEntry->aLFOLevels.rbegin();
+ switch( Name )
+ {
+ case NS_rtf::LN_ISTARTAT:
+ (*aEndIter)->nIStartAt = nIntValue;
+ break;
+ case NS_rtf::LN_ILVL:
+ (*aEndIter)->sILevel = val.getString();
+ break;
+ case NS_rtf::LN_FSTARTAT:
+ (*aEndIter)->nFStartAt = nIntValue;
+ break;
+ case NS_rtf::LN_FFORMATTING:
+ (*aEndIter)->nFFormatting = nIntValue;
+ break;
+ default:;
+ }
+ }
+ break;
+// case NS_rtf::LN_NFC: break;
+// case NS_rtf::LN_JC: break;
+// case NS_rtf::LN_FLEGAL: break;
+// case NS_rtf::LN_FNORESTART: break;
+// case NS_rtf::LN_FPREV: break;
+// case NS_rtf::LN_FPREVSPACE: break;
+// case NS_rtf::LN_FWORD6: break;
+// case NS_rtf::LN_UNUSED5_7: break;
+// case NS_rtf::LN_RGBXCHNUMS: break;
+// case NS_rtf::LN_IXCHFOLLOW: break;
+// case NS_rtf::LN_DXASPACE: break;
+// case NS_rtf::LN_DXAINDENT: break;
+// case NS_rtf::LN_CBGRPPRLCHPX: break;
+// case NS_rtf::LN_CBGRPPRLPAPX: break;
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_rtf::LN_LSID:
+ m_pImpl->m_pCurrentEntry->nListId = nIntValue;
+ break;
+// case NS_rtf::LN_TPLC: break;
+// case NS_rtf::LN_RGISTD: break;
+// case NS_rtf::LN_FSIMPLELIST: break;
+// case NS_rtf::LN_FRESTARTHDN: break;
+// case NS_rtf::LN_UNSIGNED26_2: break;
+// case NS_rtf::LN_UNSIGNED4_6: break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_UNUSED4:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_UNUSED8:
+ // as the names state they are unused
+ break;
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_rtf::LN_CLFOLVL:
+ m_pImpl->m_pCurrentEntry->nCLFOLevel = nIntValue;
+ break;
+// case NS_rtf::LN_CBFFNM1: break;
+// case NS_rtf::LN_PRQ: break;
+// case NS_rtf::LN_FTRUETYPE: break;
+// case NS_rtf::LN_UNUSED1_3: break;
+// case NS_rtf::LN_FF: break;
+// case NS_rtf::LN_UNUSED1_7: break;
+// case NS_rtf::LN_WWEIGHT: break;
+// case NS_rtf::LN_CHS: break;
+// case NS_rtf::LN_IXCHSZALT: break;
+// case NS_rtf::LN_PANOSE: break;
+// case NS_rtf::LN_FS: break;
+// case NS_rtf::LN_STI: break;
+// case NS_rtf::LN_FSCRATCH: break;
+// case NS_rtf::LN_FINVALHEIGHT: break;
+// case NS_rtf::LN_FHASUPE: break;
+// case NS_rtf::LN_FMASSCOPY: break;
+// case NS_rtf::LN_SGC: break;
+// case NS_rtf::LN_ISTDBASE: break;
+// case NS_rtf::LN_CUPX: break;
+// case NS_rtf::LN_ISTDNEXT: break;
+// case NS_rtf::LN_BCHUPE: break;
+// case NS_rtf::LN_FAUTOREDEF: break;
+// case NS_rtf::LN_FHIDDEN: break;
+// case NS_rtf::LN_UNUSED8_3: break;
+// case NS_rtf::LN_CSTD: break;
+// case NS_rtf::LN_CBSTDBASEINFILE: break;
+// case NS_rtf::LN_FSTDSTYLENAMESWRITTEN: break;
+// case NS_rtf::LN_UNUSED4_2: break;
+// case NS_rtf::LN_STIMAXWHENSAVED: break;
+// case NS_rtf::LN_ISTDMAXFIXEDWHENSAVED: break;
+// case NS_rtf::LN_NVERBUILTINNAMESWHENSAVED: break;
+// case NS_rtf::LN_RGFTCSTANDARDCHPSTSH: break;
+// case NS_rtf::LN_WIDENT: break;
+// case NS_rtf::LN_NFIB: break;
+// case NS_rtf::LN_NPRODUCT: break;
+// case NS_rtf::LN_LID: break;
+// case NS_rtf::LN_PNNEXT: break;
+// case NS_rtf::LN_FDOT: break;
+// case NS_rtf::LN_FGLSY: break;
+// case NS_rtf::LN_FCOMPLEX: break;
+// case NS_rtf::LN_FHASPIC: break;
+// case NS_rtf::LN_CQUICKSAVES: break;
+// case NS_rtf::LN_FENCRYPTED: break;
+// case NS_rtf::LN_FWHICHTBLSTM: break;
+// case NS_rtf::LN_FREADONLYRECOMMENDED: break;
+// case NS_rtf::LN_FWRITERESERVATION: break;
+// case NS_rtf::LN_FEXTCHAR: break;
+// case NS_rtf::LN_FLOADOVERRIDE: break;
+// case NS_rtf::LN_FFAREAST: break;
+// case NS_rtf::LN_FCRYPTO: break;
+// case NS_rtf::LN_NFIBBACK: break;
+// case NS_rtf::LN_LKEY: break;
+// case NS_rtf::LN_ENVR: break;
+// case NS_rtf::LN_FMAC: break;
+// case NS_rtf::LN_FEMPTYSPECIAL: break;
+// case NS_rtf::LN_FLOADOVERRIDEPAGE: break;
+// case NS_rtf::LN_FFUTURESAVEDUNDO: break;
+// case NS_rtf::LN_FWORD97SAVED: break;
+// case NS_rtf::LN_FSPARE0: break;
+// case NS_rtf::LN_CHSTABLES: break;
+// case NS_rtf::LN_FCMIN: break;
+// case NS_rtf::LN_FCMAC: break;
+// case NS_rtf::LN_CSW: break;
+// case NS_rtf::LN_WMAGICCREATED: break;
+// case NS_rtf::LN_WMAGICREVISED: break;
+// case NS_rtf::LN_WMAGICCREATEDPRIVATE: break;
+// case NS_rtf::LN_WMAGICREVISEDPRIVATE: break;
+// case NS_rtf::LN_PNFBPCHPFIRST_W6: break;
+// case NS_rtf::LN_PNCHPFIRST_W6: break;
+// case NS_rtf::LN_CPNBTECHP_W6: break;
+// case NS_rtf::LN_PNFBPPAPFIRST_W6: break;
+// case NS_rtf::LN_PNPAPFIRST_W6: break;
+// case NS_rtf::LN_CPNBTEPAP_W6: break;
+// case NS_rtf::LN_PNFBPLVCFIRST_W6: break;
+// case NS_rtf::LN_PNLVCFIRST_W6: break;
+// case NS_rtf::LN_CPNBTELVC_W6: break;
+// case NS_rtf::LN_LIDFE: break;
+// case NS_rtf::LN_CLW: break;
+// case NS_rtf::LN_CBMAC: break;
+// case NS_rtf::LN_LPRODUCTCREATED: break;
+// case NS_rtf::LN_LPRODUCTREVISED: break;
+// case NS_rtf::LN_CCPTEXT: break;
+// case NS_rtf::LN_CCPFTN: break;
+// case NS_rtf::LN_CCPHDD: break;
+// case NS_rtf::LN_CCPMCR: break;
+// case NS_rtf::LN_CCPATN: break;
+// case NS_rtf::LN_CCPEDN: break;
+// case NS_rtf::LN_CCPTXBX: break;
+// case NS_rtf::LN_CCPHDRTXBX: break;
+// case NS_rtf::LN_PNFBPCHPFIRST: break;
+// case NS_rtf::LN_PNCHPFIRST: break;
+// case NS_rtf::LN_CPNBTECHP: break;
+// case NS_rtf::LN_PNFBPPAPFIRST: break;
+// case NS_rtf::LN_PNPAPFIRST: break;
+// case NS_rtf::LN_CPNBTEPAP: break;
+// case NS_rtf::LN_PNFBPLVCFIRST: break;
+// case NS_rtf::LN_PNLVCFIRST: break;
+// case NS_rtf::LN_CPNBTELVC: break;
+// case NS_rtf::LN_FCISLANDFIRST: break;
+// case NS_rtf::LN_FCISLANDLIM: break;
+// case NS_rtf::LN_CFCLCB: break;
+// case NS_rtf::LN_FCSTSHFORIG: break;
+// case NS_rtf::LN_LCBSTSHFORIG: break;
+// case NS_rtf::LN_FCSTSHF: break;
+// case NS_rtf::LN_LCBSTSHF: break;
+// case NS_rtf::LN_FCPLCFFNDREF: break;
+// case NS_rtf::LN_LCBPLCFFNDREF: break;
+// case NS_rtf::LN_FCPLCFFNDTXT: break;
+// case NS_rtf::LN_LCBPLCFFNDTXT: break;
+// case NS_rtf::LN_FCPLCFANDREF: break;
+// case NS_rtf::LN_LCBPLCFANDREF: break;
+// case NS_rtf::LN_FCPLCFANDTXT: break;
+// case NS_rtf::LN_LCBPLCFANDTXT: break;
+// case NS_rtf::LN_FCPLCFSED: break;
+// case NS_rtf::LN_LCBPLCFSED: break;
+// case NS_rtf::LN_FCPLCFPAD: break;
+// case NS_rtf::LN_LCBPLCFPAD: break;
+// case NS_rtf::LN_FCPLCFPHE: break;
+// case NS_rtf::LN_LCBPLCFPHE: break;
+// case NS_rtf::LN_FCSTTBFGLSY: break;
+// case NS_rtf::LN_LCBSTTBFGLSY: break;
+// case NS_rtf::LN_FCPLCFGLSY: break;
+// case NS_rtf::LN_LCBPLCFGLSY: break;
+// case NS_rtf::LN_FCPLCFHDD: break;
+// case NS_rtf::LN_LCBPLCFHDD: break;
+// case NS_rtf::LN_FCPLCFBTECHPX: break;
+// case NS_rtf::LN_LCBPLCFBTECHPX: break;
+// case NS_rtf::LN_FCPLCFBTEPAPX: break;
+// case NS_rtf::LN_LCBPLCFBTEPAPX: break;
+// case NS_rtf::LN_FCPLCFSEA: break;
+// case NS_rtf::LN_LCBPLCFSEA: break;
+// case NS_rtf::LN_FCSTTBFFFN: break;
+// case NS_rtf::LN_LCBSTTBFFFN: break;
+// case NS_rtf::LN_FCPLCFFLDMOM: break;
+// case NS_rtf::LN_LCBPLCFFLDMOM: break;
+// case NS_rtf::LN_FCPLCFFLDHDR: break;
+// case NS_rtf::LN_LCBPLCFFLDHDR: break;
+// case NS_rtf::LN_FCPLCFFLDFTN: break;
+// case NS_rtf::LN_LCBPLCFFLDFTN: break;
+// case NS_rtf::LN_FCPLCFFLDATN: break;
+// case NS_rtf::LN_LCBPLCFFLDATN: break;
+// case NS_rtf::LN_FCPLCFFLDMCR: break;
+// case NS_rtf::LN_LCBPLCFFLDMCR: break;
+// case NS_rtf::LN_FCSTTBFBKMK: break;
+// case NS_rtf::LN_LCBSTTBFBKMK: break;
+// case NS_rtf::LN_FCPLCFBKF: break;
+// case NS_rtf::LN_LCBPLCFBKF: break;
+// case NS_rtf::LN_FCPLCFBKL: break;
+// case NS_rtf::LN_LCBPLCFBKL: break;
+// case NS_rtf::LN_FCCMDS: break;
+// case NS_rtf::LN_LCBCMDS: break;
+// case NS_rtf::LN_FCPLCMCR: break;
+// case NS_rtf::LN_LCBPLCMCR: break;
+// case NS_rtf::LN_FCSTTBFMCR: break;
+// case NS_rtf::LN_LCBSTTBFMCR: break;
+// case NS_rtf::LN_FCPRDRVR: break;
+// case NS_rtf::LN_LCBPRDRVR: break;
+// case NS_rtf::LN_FCPRENVPORT: break;
+// case NS_rtf::LN_LCBPRENVPORT: break;
+// case NS_rtf::LN_FCPRENVLAND: break;
+// case NS_rtf::LN_LCBPRENVLAND: break;
+// case NS_rtf::LN_FCWSS: break;
+// case NS_rtf::LN_LCBWSS: break;
+// case NS_rtf::LN_FCDOP: break;
+// case NS_rtf::LN_LCBDOP: break;
+// case NS_rtf::LN_FCSTTBFASSOC: break;
+// case NS_rtf::LN_LCBSTTBFASSOC: break;
+// case NS_rtf::LN_FCCLX: break;
+// case NS_rtf::LN_LCBCLX: break;
+// case NS_rtf::LN_FCPLCFPGDFTN: break;
+// case NS_rtf::LN_LCBPLCFPGDFTN: break;
+// case NS_rtf::LN_FCAUTOSAVESOURCE: break;
+// case NS_rtf::LN_LCBAUTOSAVESOURCE: break;
+// case NS_rtf::LN_FCGRPXSTATNOWNERS: break;
+// case NS_rtf::LN_LCBGRPXSTATNOWNERS: break;
+// case NS_rtf::LN_FCSTTBFATNBKMK: break;
+// case NS_rtf::LN_LCBSTTBFATNBKMK: break;
+// case NS_rtf::LN_FCPLCDOAMOM: break;
+// case NS_rtf::LN_LCBPLCDOAMOM: break;
+// case NS_rtf::LN_FCPLCDOAHDR: break;
+// case NS_rtf::LN_LCBPLCDOAHDR: break;
+// case NS_rtf::LN_FCPLCSPAMOM: break;
+// case NS_rtf::LN_LCBPLCSPAMOM: break;
+// case NS_rtf::LN_FCPLCSPAHDR: break;
+// case NS_rtf::LN_LCBPLCSPAHDR: break;
+// case NS_rtf::LN_FCPLCFATNBKF: break;
+// case NS_rtf::LN_LCBPLCFATNBKF: break;
+// case NS_rtf::LN_FCPLCFATNBKL: break;
+// case NS_rtf::LN_LCBPLCFATNBKL: break;
+// case NS_rtf::LN_FCPMS: break;
+// case NS_rtf::LN_LCBPMS: break;
+// case NS_rtf::LN_FCFORMFLDSTTBF: break;
+// case NS_rtf::LN_LCBFORMFLDSTTBF: break;
+// case NS_rtf::LN_FCPLCFENDREF: break;
+// case NS_rtf::LN_LCBPLCFENDREF: break;
+// case NS_rtf::LN_FCPLCFENDTXT: break;
+// case NS_rtf::LN_LCBPLCFENDTXT: break;
+// case NS_rtf::LN_FCPLCFFLDEDN: break;
+// case NS_rtf::LN_LCBPLCFFLDEDN: break;
+// case NS_rtf::LN_FCPLCFPGDEDN: break;
+// case NS_rtf::LN_LCBPLCFPGDEDN: break;
+// case NS_rtf::LN_FCDGGINFO: break;
+// case NS_rtf::LN_LCBDGGINFO: break;
+// case NS_rtf::LN_FCSTTBFRMARK: break;
+// case NS_rtf::LN_LCBSTTBFRMARK: break;
+// case NS_rtf::LN_FCSTTBFCAPTION: break;
+// case NS_rtf::LN_LCBSTTBFCAPTION: break;
+// case NS_rtf::LN_FCSTTBFAUTOCAPTION: break;
+// case NS_rtf::LN_LCBSTTBFAUTOCAPTION: break;
+// case NS_rtf::LN_FCPLCFWKB: break;
+// case NS_rtf::LN_LCBPLCFWKB: break;
+// case NS_rtf::LN_FCPLCFSPL: break;
+// case NS_rtf::LN_LCBPLCFSPL: break;
+// case NS_rtf::LN_FCPLCFTXBXTXT: break;
+// case NS_rtf::LN_LCBPLCFTXBXTXT: break;
+// case NS_rtf::LN_FCPLCFFLDTXBX: break;
+// case NS_rtf::LN_LCBPLCFFLDTXBX: break;
+// case NS_rtf::LN_FCPLCFHDRTXBXTXT: break;
+// case NS_rtf::LN_LCBPLCFHDRTXBXTXT: break;
+// case NS_rtf::LN_FCPLCFFLDHDRTXBX: break;
+// case NS_rtf::LN_LCBPLCFFLDHDRTXBX: break;
+// case NS_rtf::LN_FCSTWUSER: break;
+// case NS_rtf::LN_LCBSTWUSER: break;
+// case NS_rtf::LN_FCSTTBTTMBD: break;
+// case NS_rtf::LN_LCBSTTBTTMBD: break;
+// case NS_rtf::LN_FCUNUSED: break;
+// case NS_rtf::LN_LCBUNUSED: break;
+// case NS_rtf::LN_FCPGDMOTHER: break;
+// case NS_rtf::LN_LCBPGDMOTHER: break;
+// case NS_rtf::LN_FCBKDMOTHER: break;
+// case NS_rtf::LN_LCBBKDMOTHER: break;
+// case NS_rtf::LN_FCPGDFTN: break;
+// case NS_rtf::LN_LCBPGDFTN: break;
+// case NS_rtf::LN_FCBKDFTN: break;
+// case NS_rtf::LN_LCBBKDFTN: break;
+// case NS_rtf::LN_FCPGDEDN: break;
+// case NS_rtf::LN_LCBPGDEDN: break;
+// case NS_rtf::LN_FCBKDEDN: break;
+// case NS_rtf::LN_LCBBKDEDN: break;
+// case NS_rtf::LN_FCSTTBFINTLFLD: break;
+// case NS_rtf::LN_LCBSTTBFINTLFLD: break;
+// case NS_rtf::LN_FCROUTESLIP: break;
+// case NS_rtf::LN_LCBROUTESLIP: break;
+// case NS_rtf::LN_FCSTTBSAVEDBY: break;
+// case NS_rtf::LN_LCBSTTBSAVEDBY: break;
+// case NS_rtf::LN_FCSTTBFNM: break;
+// case NS_rtf::LN_LCBSTTBFNM: break;
+// case NS_rtf::LN_FCPLCFLST: break;
+// case NS_rtf::LN_LCBPLCFLST: break;
+// case NS_rtf::LN_FCPLFLFO: break;
+// case NS_rtf::LN_LCBPLFLFO: break;
+// case NS_rtf::LN_FCPLCFTXBXBKD: break;
+// case NS_rtf::LN_LCBPLCFTXBXBKD: break;
+// case NS_rtf::LN_FCPLCFTXBXHDRBKD: break;
+// case NS_rtf::LN_LCBPLCFTXBXHDRBKD: break;
+// case NS_rtf::LN_FCDOCUNDO: break;
+// case NS_rtf::LN_LCBDOCUNDO: break;
+// case NS_rtf::LN_FCRGBUSE: break;
+// case NS_rtf::LN_LCBRGBUSE: break;
+// case NS_rtf::LN_FCUSP: break;
+// case NS_rtf::LN_LCBUSP: break;
+// case NS_rtf::LN_FCUSKF: break;
+// case NS_rtf::LN_LCBUSKF: break;
+// case NS_rtf::LN_FCPLCUPCRGBUSE: break;
+// case NS_rtf::LN_LCBPLCUPCRGBUSE: break;
+// case NS_rtf::LN_FCPLCUPCUSP: break;
+// case NS_rtf::LN_LCBPLCUPCUSP: break;
+// case NS_rtf::LN_FCSTTBGLSYSTYLE: break;
+// case NS_rtf::LN_LCBSTTBGLSYSTYLE: break;
+// case NS_rtf::LN_FCPLGOSL: break;
+// case NS_rtf::LN_LCBPLGOSL: break;
+// case NS_rtf::LN_FCPLCOCX: break;
+// case NS_rtf::LN_LCBPLCOCX: break;
+// case NS_rtf::LN_FCPLCFBTELVC: break;
+// case NS_rtf::LN_LCBPLCFBTELVC: break;
+// case NS_rtf::LN_DWLOWDATETIME: break;
+// case NS_rtf::LN_DWHIGHDATETIME: break;
+// case NS_rtf::LN_FCPLCFLVC: break;
+// case NS_rtf::LN_LCBPLCFLVC: break;
+// case NS_rtf::LN_FCPLCASUMY: break;
+// case NS_rtf::LN_LCBPLCASUMY: break;
+// case NS_rtf::LN_FCPLCFGRAM: break;
+// case NS_rtf::LN_LCBPLCFGRAM: break;
+// case NS_rtf::LN_FCSTTBLISTNAMES: break;
+// case NS_rtf::LN_LCBSTTBLISTNAMES: break;
+// case NS_rtf::LN_FCSTTBFUSSR: break;
+// case NS_rtf::LN_LCBSTTBFUSSR: break;
+// case NS_rtf::LN_FN: break;
+// case NS_rtf::LN_FCSEPX: break;
+// case NS_rtf::LN_FNMPR: break;
+// case NS_rtf::LN_FCMPR: break;
+// case NS_rtf::LN_ICOFORE: break;
+// case NS_rtf::LN_ICOBACK: break;
+// case NS_rtf::LN_IPAT: break;
+// case NS_rtf::LN_SHDFORECOLOR: break;
+// case NS_rtf::LN_SHDBACKCOLOR: break;
+// case NS_rtf::LN_SHDPATTERN: break;
+// case NS_rtf::LN_DPTLINEWIDTH: break;
+// case NS_rtf::LN_BRCTYPE: break;
+// case NS_rtf::LN_ICO: break;
+// case NS_rtf::LN_DPTSPACE: break;
+// case NS_rtf::LN_FSHADOW: break;
+// case NS_rtf::LN_FFRAME: break;
+// case NS_rtf::LN_UNUSED2_15: break;
+// case NS_rtf::LN_FFIRSTMERGED: break;
+// case NS_rtf::LN_FMERGED: break;
+// case NS_rtf::LN_FVERTICAL: break;
+// case NS_rtf::LN_FBACKWARD: break;
+// case NS_rtf::LN_FROTATEFONT: break;
+// case NS_rtf::LN_FVERTMERGE: break;
+// case NS_rtf::LN_FVERTRESTART: break;
+// case NS_rtf::LN_VERTALIGN: break;
+// case NS_rtf::LN_FUNUSED: break;
+// case NS_rtf::LN_WUNUSED: break;
+// case NS_rtf::LN_BRCTOP: break;
+// case NS_rtf::LN_BRCLEFT: break;
+// case NS_rtf::LN_BRCBOTTOM: break;
+// case NS_rtf::LN_BRCRIGHT: break;
+// case NS_rtf::LN_IBKL: break;
+// case NS_rtf::LN_ITCFIRST: break;
+// case NS_rtf::LN_FPUB: break;
+// case NS_rtf::LN_ITCLIM: break;
+// case NS_rtf::LN_FCOL: break;
+// case NS_rtf::LN_LINECOLOR: break;
+// case NS_rtf::LN_LINEWIDTH: break;
+// case NS_rtf::LN_LINETYPE: break;
+// case NS_rtf::LN_MM: break;
+// case NS_rtf::LN_XEXT: break;
+// case NS_rtf::LN_YEXT: break;
+// case NS_rtf::LN_HMF: break;
+// case NS_rtf::LN_LCB: break;
+// case NS_rtf::LN_CBHEADER: break;
+// case NS_rtf::LN_MFP: break;
+// case NS_rtf::LN_BM_RCWINMF: break;
+// case NS_rtf::LN_DXAGOAL: break;
+// case NS_rtf::LN_DYAGOAL: break;
+// case NS_rtf::LN_MX: break;
+// case NS_rtf::LN_MY: break;
+// case NS_rtf::LN_DXACROPLEFT: break;
+// case NS_rtf::LN_DYACROPTOP: break;
+// case NS_rtf::LN_DXACROPRIGHT: break;
+// case NS_rtf::LN_DYACROPBOTTOM: break;
+// case NS_rtf::LN_BRCL: break;
+// case NS_rtf::LN_FFRAMEEMPTY: break;
+// case NS_rtf::LN_FBITMAP: break;
+// case NS_rtf::LN_FDRAWHATCH: break;
+// case NS_rtf::LN_FERROR: break;
+// case NS_rtf::LN_BPP: break;
+// case NS_rtf::LN_DXAORIGIN: break;
+// case NS_rtf::LN_DYAORIGIN: break;
+// case NS_rtf::LN_CPROPS: break;
+// case NS_rtf::LN_LINEPROPSTOP: break;
+// case NS_rtf::LN_LINEPROPSLEFT: break;
+// case NS_rtf::LN_LINEPROPSBOTTOM: break;
+// case NS_rtf::LN_LINEPROPSRIGHT: break;
+// case NS_rtf::LN_LINEPROPSHORIZONTAL: break;
+// case NS_rtf::LN_LINEPROPSVERTICAL: break;
+// case NS_rtf::LN_headerr: break;
+// case NS_rtf::LN_footerr: break;
+// case NS_rtf::LN_endnote: break;
+// case NS_rtf::LN_BOOKMARKNAME: break;
+
+// case NS_rtf::LN_LISTLEVEL: break;
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_rtf::LN_LFO:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties;
+ if(m_pImpl->m_pCurrentEntry && (pProperties = val.getProperties()).get())
+ {
+ LFOLevelPtr pLevel( new LFOLevel );
+ m_pImpl->m_pCurrentEntry->aLFOLevels.push_back(pLevel);
+ }
+ }
+ break;
+// case NS_rtf::LN_F: break;
+// case NS_rtf::LN_ALTFONTNAME: break;
+// case NS_rtf::LN_XSZFFN: break;
+// case NS_rtf::LN_XSTZNAME: break;
+// case NS_rtf::LN_XSTZNAME1: break;
+// case NS_rtf::LN_UPXSTART: break;
+// case NS_rtf::LN_UPX: break;
+// case NS_rtf::LN_sed: break;
+// case NS_rtf::LN_picf: break;
+// case NS_rtf::LN_rgbrc: break;
+// case NS_rtf::LN_shd: break;
+// case NS_rtf::LN_cellShd: break;
+// case NS_rtf::LN_cellTopColor: break;
+// case NS_rtf::LN_cellLeftColor: break;
+// case NS_rtf::LN_cellBottomColor: break;
+// case NS_rtf::LN_cellRightColor: break;
+
+// case NS_rtf::LN_LISTTABLE: break;
+// case NS_rtf::LN_LFOTABLE: break;
+// case NS_rtf::LN_FONTTABLE: break;
+// case NS_rtf::LN_STYLESHEET: break;
+ default:
+ {
+ OSL_ENSURE( false, "LFOTable::attribute: default statement");
+ //---->debug
+ int nVal = val.getInt();
+ ++nVal;
+ //<----debug
+ }
+ }
+}
+/*-- 27.06.2006 15:13:04---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void LFOTable::sprm(Sprm& )
+{
+ OSL_ENSURE( false, "Which sprm should be handled here?");
+}
+/*-- 27.06.2006 15:13:04---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void LFOTable::entry(int, writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ //create a new LFO entry
+ OSL_ENSURE( !m_pImpl->m_pCurrentEntry.get(), "current entry has to be NULL here");
+ m_pImpl->m_pCurrentEntry.reset( new LFOEntry );
+ ref->resolve(*this);
+ //append it to the table
+ m_pImpl->m_aLFOEntries.push_back( m_pImpl->m_pCurrentEntry );
+ m_pImpl->m_pCurrentEntry = LFOEntryPtr();
+}
+/*-- 27.06.2006 15:13:05---------------------------------------------------
+ 1 based access to the LFO table
+ -----------------------------------------------------------------------*/
+sal_Int32 LFOTable::GetListID(sal_uInt32 nLFO)
+{
+ sal_Int32 nRet = -1;
+ if( nLFO > 0 && nLFO <= m_pImpl->m_aLFOEntries.size())
+ nRet = m_pImpl->m_aLFOEntries[nLFO - 1]->nListId;
+ return nRet;
+}
+/*-- 12.11.2007 10:31:23---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void LFOTable::AddListID( sal_Int32 nAbstractNumId )
+{
+ LFOEntryPtr pNew( new LFOEntry );
+ pNew->nListId = nAbstractNumId;
+ m_pImpl->m_aLFOEntries.push_back( pNew );
+}
+
+}//namespace dmapper
+}//namespace writerfilter
diff --git a/writerfilter/source/dmapper/LFOTable.hxx b/writerfilter/source/dmapper/LFOTable.hxx
new file mode 100644
index 000000000000..89f72c557d85
--- /dev/null
+++ b/writerfilter/source/dmapper/LFOTable.hxx
@@ -0,0 +1,65 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_LFOTABLE_HXX
+#define INCLUDED_LFOTABLE_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <com/sun/star/lang/XComponent.hpp>
+//#ifndef INCLUDED_DMAPPER_PROPERTYMAP_HXX
+//#include <PropertyMap.hxx>
+//#endif
+//#include <vector>
+
+namespace writerfilter {
+namespace dmapper
+{
+
+struct LFOTable_Impl;
+class WRITERFILTER_DLLPRIVATE LFOTable : public Properties, public Table
+{
+ LFOTable_Impl *m_pImpl;
+public:
+ LFOTable();
+ virtual ~LFOTable();
+
+ // Properties
+ virtual void attribute(Id Name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ // Table
+ virtual void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
+// sal_uInt32 size();
+ sal_Int32 GetListID(sal_uInt32 nLFO);
+ //direct access in ooxml import
+ void AddListID( sal_Int32 nAbstractNumId );
+};
+typedef boost::shared_ptr< LFOTable > LFOTablePtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/ListTable.cxx b/writerfilter/source/dmapper/ListTable.cxx
new file mode 100644
index 000000000000..bd3c9da4e567
--- /dev/null
+++ b/writerfilter/source/dmapper/ListTable.cxx
@@ -0,0 +1,1300 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <ListTable.hxx>
+#include <dmapper/DomainMapper.hxx>
+#include <PropertyIds.hxx>
+#include <doctok/resourceids.hxx>
+#include <doctok/sprmids.hxx>
+#include <ooxml/resourceids.hxx>
+#include <ConversionHelper.hxx>
+#ifndef INCLUDED_WW8_RESOURCE_MODEL_HXX
+#include <resourcemodel/WW8ResourceModel.hxx>
+#endif
+#include <com/sun/star/container/XIndexReplace.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/style/NumberingType.hpp>
+#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
+#include <com/sun/star/text/HoriOrientation.hpp>
+#include <com/sun/star/text/PositionAndSpaceMode.hpp>
+#include <vector>
+
+#define NUMBERING_MAX_LEVELS 10
+namespace writerfilter {
+namespace dmapper
+{
+using namespace com::sun::star;
+/*-- 12.11.2007 11:38:57---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+class WRITERFILTER_DLLPRIVATE Numbering_numHdl : public Properties
+{
+ ListTable& m_rListTable;
+ sal_Int32 m_nAbstractNumId;
+ ::rtl::OUString m_sNumId;
+public:
+ Numbering_numHdl( ListTable& rListTable ) :
+ m_rListTable( rListTable ),
+ m_nAbstractNumId( -1 )
+ {}
+ virtual ~Numbering_numHdl();
+
+ // Properties
+ virtual void attribute(Id Name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ sal_Int32 GetAbstractNumId() const { return m_nAbstractNumId;}
+ sal_Int32 GetNumId() const { return m_sNumId.toInt32(); }
+
+};
+typedef boost::shared_ptr< Numbering_numHdl > Numbering_numHdlPtr;
+/*-- 12.11.2007 11:42:04---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+Numbering_numHdl::~Numbering_numHdl()
+{
+}
+/*-- 12.11.2007 11:42:22---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void Numbering_numHdl::attribute(Id nName, Value & rVal)
+{
+ switch( nName )
+ {
+ case NS_ooxml::LN_CT_Num_numId:
+ m_sNumId = rVal.getString();
+ break;
+ case NS_ooxml::LN_CT_NumLvl_ilvl :
+ m_rListTable.setOverwriteLevel(m_nAbstractNumId, rVal.getInt());
+ break;
+ default:;
+ }
+}
+/*-- 12.11.2007 11:42:22---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void Numbering_numHdl::sprm(Sprm & rSprm)
+{
+ sal_uInt32 nSprmId = rSprm.getId();
+ switch( nSprmId )
+ {
+ case NS_ooxml::LN_CT_Num_abstractNumId:
+ {
+ m_nAbstractNumId = rSprm.getValue()->getInt();
+ }
+ break;
+ case NS_ooxml::LN_CT_Num_lvlOverride:
+ {
+ //contains a list override
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if(pProperties.get())
+ pProperties->resolve(*this);
+ m_rListTable.resetOverwrite();
+ }
+ case NS_ooxml::LN_CT_NumLvl_lvl:
+ m_rListTable.sprm( rSprm );
+ break;
+ default:;
+ }
+}
+/*-- 26.06.2006 13:14:29---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+class ListPropertyMap : public PropertyMap
+{
+ friend class ListTable;
+
+ sal_Int32 nIStartAt; //LN_ISTARTAT
+ sal_Int32 nNFC; //LN_NFC
+ sal_Int32 nJC; //LN_JC
+ sal_Int32 nFLegal; //LN_FLEGAL
+ sal_Int32 nFNoRestart; //LN_FNORESTART
+ sal_Int32 nFPrev; //LN_FPREV
+ sal_Int32 nFPrevSpace; //LN_FPREVSPACE
+ sal_Int32 nFWord6; //LN_FWORD6
+ ::rtl::OUString sRGBXchNums; //LN_RGBXCHNUMS
+ sal_Int32 nXChFollow; //LN_IXCHFOLLOW
+ ::rtl::OUString sBulletChar;
+ sal_Int32 nTabstop;
+public:
+ ListPropertyMap() :
+ nIStartAt(-1)
+ ,nNFC(-1)
+ ,nJC(-1)
+ ,nFLegal(-1)
+ ,nFNoRestart(-1)
+ ,nFPrev(-1)
+ ,nFPrevSpace(-1)
+ ,nFWord6(-1)
+ ,nXChFollow(-1)
+ ,nTabstop( 0 )
+ {}
+ ~ListPropertyMap(){}
+
+ uno::Sequence< beans::PropertyValue > GetPropertyValuesList( PropertyValueVector_t& rCharStyleProperties );
+};
+/*-- 26.06.2006 13:44:57---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+#define MAKE_PROPVAL(NameId, Value) \
+ beans::PropertyValue(aPropNameSupplier.GetName(NameId), 0, uno::makeAny(Value), beans::PropertyState_DIRECT_VALUE )
+
+uno::Sequence< beans::PropertyValue > ListPropertyMap::GetPropertyValuesList( PropertyValueVector_t& rCharStyleProperties )
+{
+ const sal_Int16 aWWToUnoAdjust[] =
+ {
+ text::HoriOrientation::LEFT,
+ text::HoriOrientation::CENTER,
+ text::HoriOrientation::RIGHT,
+ };
+
+ PropertyNameSupplier& aPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ PropertyValueVector_t aNumberingProperties;
+
+ if( nIStartAt >= 0)
+ aNumberingProperties.push_back( MAKE_PROPVAL(PROP_START_WITH, (sal_Int16)nIStartAt) );
+
+ sal_Int16 nNumberFormat = ConversionHelper::ConvertNumberingType(nNFC);
+ if( nNFC >= 0)
+ aNumberingProperties.push_back( MAKE_PROPVAL(PROP_NUMBERING_TYPE, nNumberFormat ));
+
+ if( nJC >= 0 && nJC <= sal::static_int_cast<sal_Int32>(sizeof(aWWToUnoAdjust) / sizeof(sal_Int16)) )
+ aNumberingProperties.push_back( MAKE_PROPVAL(PROP_ADJUST, aWWToUnoAdjust[nJC]));
+
+ // todo: this is not the bullet char
+ if( nNumberFormat == style::NumberingType::CHAR_SPECIAL && sBulletChar.getLength() )
+ aNumberingProperties.push_back( MAKE_PROPVAL(PROP_BULLET_CHAR, sBulletChar.copy(0,1)));
+
+ aNumberingProperties.push_back( MAKE_PROPVAL( PROP_LISTTAB_STOP_POSITION, nTabstop ) );
+
+ //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
+ //
+
+ if( nFWord6 > 0) //Word 6 compatibility
+ {
+ if( nFPrev == 1)
+ aNumberingProperties.push_back( MAKE_PROPVAL( PROP_PARENT_NUMBERING, (sal_Int16) NUMBERING_MAX_LEVELS ));
+ //TODO: prefixing space nFPrevSpace; - has not been used in WW8 filter
+ }
+
+// TODO: sRGBXchNums; array of inherited numbers
+
+// TODO: nXChFollow; following character 0 - tab, 1 - space, 2 - nothing
+// if(pProperties)
+// {
+
+ _PropertyMap::const_iterator aMapIter = /*pProperties->*/begin();
+ _PropertyMap::const_iterator aEndIter = /*pProperties->*/end();
+ for( ; aMapIter != aEndIter; ++aMapIter )
+ {
+ switch( aMapIter->first.eId )
+ {
+ case PROP_ADJUST:
+ case PROP_INDENT_AT:
+ case PROP_FIRST_LINE_INDENT:
+ case PROP_FIRST_LINE_OFFSET:
+ case PROP_LEFT_MARGIN:
+ aNumberingProperties.push_back(
+ beans::PropertyValue( aPropNameSupplier.GetName( aMapIter->first.eId ), 0, aMapIter->second, beans::PropertyState_DIRECT_VALUE ));
+ break;
+ case PROP_CHAR_FONT_NAME:
+ aNumberingProperties.push_back(
+ beans::PropertyValue( aPropNameSupplier.GetName( PROP_BULLET_FONT_NAME ), 0, aMapIter->second, beans::PropertyState_DIRECT_VALUE ));
+ break;
+ default:
+ {
+ rCharStyleProperties.push_back(beans::PropertyValue( aPropNameSupplier.GetName( aMapIter->first.eId ), 0, aMapIter->second, beans::PropertyState_DIRECT_VALUE ));
+ }
+
+ }
+ }
+// }
+ uno::Sequence< beans::PropertyValue > aRet(aNumberingProperties.size());
+ beans::PropertyValue* pValues = aRet.getArray();
+ PropertyValueVector_t::const_iterator aIt = aNumberingProperties.begin();
+ PropertyValueVector_t::const_iterator aEndIt = aNumberingProperties.end();
+ for(sal_uInt32 nIndex = 0; aIt != aEndIt; ++aIt,++nIndex)
+ {
+ pValues[nIndex] = *aIt;
+ }
+ return aRet;
+}
+typedef boost::shared_ptr<ListPropertyMap> ListPropertyMapPtr;
+
+struct ListEntry
+{
+ sal_Int32 nListId; //LN_LSID
+ sal_Int32 nTPLC; //LN_TPLC
+ ::rtl::OUString sRGISTD; //LN_RGISTD
+ sal_Int32 nSimpleList; //LN_FSIMPLELIST
+ sal_Int32 nRestart; //LN_FRESTARTHDN
+ sal_Int32 nUnsigned; //LN_UNSIGNED26_2
+ sal_Int32 nAbstractNumId;
+
+ ::std::vector< ListPropertyMapPtr > aLevelProperties; //properties of each level
+
+ ListPropertyMapPtr pCurrentProperties;
+ uno::Reference< container::XIndexReplace > m_xNumRules;
+
+ ListEntry();
+
+};
+typedef boost::shared_ptr<ListEntry> ListEntryPtr;
+/*-- 23.06.2006 13:58:51---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ListEntry::ListEntry() :
+ nListId(-1)
+ ,nTPLC(-1)
+ ,nSimpleList(-1)
+ ,nRestart(-1)
+ ,nUnsigned(-1)
+ ,nAbstractNumId(-1)
+{
+}
+/*-- 23.06.2006 13:58:51---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+struct ListTable_Impl
+{
+ DomainMapper& m_rDMapper;
+ uno::Reference< lang::XMultiServiceFactory > m_xFactory;
+
+ std::vector< ListEntryPtr > m_aListEntries;
+ ListEntryPtr m_pCurrentEntry;
+
+
+ ListTable_Impl(DomainMapper& rDMapper, uno::Reference< lang::XMultiServiceFactory > xFactory) :
+ m_rDMapper( rDMapper )
+ ,m_xFactory( xFactory )
+ {}
+
+ void AddLevel();
+};
+/*-- 26.06.2006 14:23:19---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void ListTable_Impl::AddLevel()
+{
+ ListPropertyMapPtr pLevel( new ListPropertyMap );
+ m_pCurrentEntry->pCurrentProperties = pLevel;
+ m_pCurrentEntry->aLevelProperties.push_back(pLevel);
+}
+/*-- 23.06.2006 12:04:32---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ListTable::ListTable(
+ DomainMapper& rDMapper,
+ const uno::Reference< lang::XMultiServiceFactory > xFactory) :
+ m_pImpl( new ListTable_Impl(rDMapper, xFactory) ),
+ m_nOverwriteListId( -1 ),
+ m_nOverwriteLevel( -1 )
+{
+}
+/*-- 23.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ListTable::~ListTable()
+{
+ delete m_pImpl;
+}
+/*-- 23.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void ListTable::attribute(Id nName, Value & rVal)
+{
+ OSL_ENSURE( m_pImpl->m_pCurrentEntry.get(), "current entry has to be set here");
+ if(!m_pImpl->m_pCurrentEntry.get())
+ return ;
+ int nIntValue = rVal.getInt();
+ /* WRITERFILTERSTATUS: table: ListTable_attributedata */
+ switch(nName)
+ {
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_rtf::LN_RGBXCHNUMS:
+ if(m_pImpl->m_pCurrentEntry->pCurrentProperties.get())
+ m_pImpl->m_pCurrentEntry->pCurrentProperties->sRGBXchNums += rVal.getString();
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ 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 toghether with seperators 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(m_pImpl->m_pCurrentEntry->pCurrentProperties.get())
+ {
+ m_pImpl->m_pCurrentEntry->pCurrentProperties->sBulletChar = rVal.getString();
+ }
+ }
+ break;
+// case NS_rtf::LN_ISTD: break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_ISTARTAT:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_NFC:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_JC:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FLEGAL:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FNORESTART:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FPREV:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FPREVSPACE:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FWORD6:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_IXCHFOLLOW:
+ ApplyLevelValues( nName, nIntValue);
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_UNUSED5_7:
+ //unused
+ break;
+// case NS_rtf::LN_DXASPACE: break;
+// case NS_rtf::LN_DXAINDENT: break;
+// case NS_rtf::LN_CBGRPPRLCHPX: break;
+// case NS_rtf::LN_CBGRPPRLPAPX: break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_LSID:
+ m_pImpl->m_pCurrentEntry->nListId = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_TPLC:
+ m_pImpl->m_pCurrentEntry->nTPLC = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_RGISTD:
+ m_pImpl->m_pCurrentEntry->sRGISTD += rVal.getString();
+ break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FSIMPLELIST:
+ m_pImpl->m_pCurrentEntry->nSimpleList = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FRESTARTHDN:
+ m_pImpl->m_pCurrentEntry->nRestart = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_UNSIGNED26_2:
+ m_pImpl->m_pCurrentEntry->nUnsigned = nIntValue;
+ break;
+// case NS_rtf::LN_ILVL: break;
+// case NS_rtf::LN_FSTARTAT: break;
+// case NS_rtf::LN_FFORMATTING: break;
+// case NS_rtf::LN_UNSIGNED4_6: break;
+// case NS_rtf::LN_UNUSED4: break;
+// case NS_rtf::LN_UNUSED8: break;
+// case NS_rtf::LN_CLFOLVL: break;
+// case NS_rtf::LN_CBFFNM1: break;
+// case NS_rtf::LN_PRQ: break;
+// case NS_rtf::LN_FTRUETYPE: break;
+// case NS_rtf::LN_UNUSED1_3: break;
+// case NS_rtf::LN_FF: break;
+// case NS_rtf::LN_UNUSED1_7: break;
+// case NS_rtf::LN_WWEIGHT: break;
+// case NS_rtf::LN_CHS: break;
+// case NS_rtf::LN_IXCHSZALT: break;
+// case NS_rtf::LN_PANOSE: break;
+// case NS_rtf::LN_FS: break;
+// case NS_rtf::LN_STI: break;
+// case NS_rtf::LN_FSCRATCH: break;
+// case NS_rtf::LN_FINVALHEIGHT: break;
+// case NS_rtf::LN_FHASUPE: break;
+// case NS_rtf::LN_FMASSCOPY: break;
+// case NS_rtf::LN_SGC: break;
+// case NS_rtf::LN_ISTDBASE: break;
+// case NS_rtf::LN_CUPX: break;
+// case NS_rtf::LN_ISTDNEXT: break;
+// case NS_rtf::LN_BCHUPE: break;
+// case NS_rtf::LN_FAUTOREDEF: break;
+// case NS_rtf::LN_FHIDDEN: break;
+// case NS_rtf::LN_UNUSED8_3: break;
+// case NS_rtf::LN_CSTD: break;
+// case NS_rtf::LN_CBSTDBASEINFILE: break;
+// case NS_rtf::LN_FSTDSTYLENAMESWRITTEN: break;
+// case NS_rtf::LN_UNUSED4_2: break;
+// case NS_rtf::LN_STIMAXWHENSAVED: break;
+// case NS_rtf::LN_ISTDMAXFIXEDWHENSAVED: break;
+// case NS_rtf::LN_NVERBUILTINNAMESWHENSAVED: break;
+// case NS_rtf::LN_RGFTCSTANDARDCHPSTSH: break;
+// case NS_rtf::LN_WIDENT: break;
+// case NS_rtf::LN_NFIB: break;
+// case NS_rtf::LN_NPRODUCT: break;
+// case NS_rtf::LN_LID: break;
+// case NS_rtf::LN_PNNEXT: break;
+// case NS_rtf::LN_FDOT: break;
+// case NS_rtf::LN_FGLSY: break;
+// case NS_rtf::LN_FCOMPLEX: break;
+// case NS_rtf::LN_FHASPIC: break;
+// case NS_rtf::LN_CQUICKSAVES: break;
+// case NS_rtf::LN_FENCRYPTED: break;
+// case NS_rtf::LN_FWHICHTBLSTM: break;
+// case NS_rtf::LN_FREADONLYRECOMMENDED: break;
+// case NS_rtf::LN_FWRITERESERVATION: break;
+// case NS_rtf::LN_FEXTCHAR: break;
+// case NS_rtf::LN_FLOADOVERRIDE: break;
+// case NS_rtf::LN_FFAREAST: break;
+// case NS_rtf::LN_FCRYPTO: break;
+// case NS_rtf::LN_NFIBBACK: break;
+// case NS_rtf::LN_LKEY: break;
+// case NS_rtf::LN_ENVR: break;
+// case NS_rtf::LN_FMAC: break;
+// case NS_rtf::LN_FEMPTYSPECIAL: break;
+// case NS_rtf::LN_FLOADOVERRIDEPAGE: break;
+// case NS_rtf::LN_FFUTURESAVEDUNDO: break;
+// case NS_rtf::LN_FWORD97SAVED: break;
+// case NS_rtf::LN_FSPARE0: break;
+// case NS_rtf::LN_CHSTABLES: break;
+// case NS_rtf::LN_FCMIN: break;
+// case NS_rtf::LN_FCMAC: break;
+// case NS_rtf::LN_CSW: break;
+// case NS_rtf::LN_WMAGICCREATED: break;
+// case NS_rtf::LN_WMAGICREVISED: break;
+// case NS_rtf::LN_WMAGICCREATEDPRIVATE: break;
+// case NS_rtf::LN_WMAGICREVISEDPRIVATE: break;
+// case NS_rtf::LN_PNFBPCHPFIRST_W6: break;
+// case NS_rtf::LN_PNCHPFIRST_W6: break;
+// case NS_rtf::LN_CPNBTECHP_W6: break;
+// case NS_rtf::LN_PNFBPPAPFIRST_W6: break;
+// case NS_rtf::LN_PNPAPFIRST_W6: break;
+// case NS_rtf::LN_CPNBTEPAP_W6: break;
+// case NS_rtf::LN_PNFBPLVCFIRST_W6: break;
+// case NS_rtf::LN_PNLVCFIRST_W6: break;
+// case NS_rtf::LN_CPNBTELVC_W6: break;
+// case NS_rtf::LN_LIDFE: break;
+// case NS_rtf::LN_CLW: break;
+// case NS_rtf::LN_CBMAC: break;
+// case NS_rtf::LN_LPRODUCTCREATED: break;
+// case NS_rtf::LN_LPRODUCTREVISED: break;
+// case NS_rtf::LN_CCPTEXT: break;
+// case NS_rtf::LN_CCPFTN: break;
+// case NS_rtf::LN_CCPHDD: break;
+// case NS_rtf::LN_CCPMCR: break;
+// case NS_rtf::LN_CCPATN: break;
+// case NS_rtf::LN_CCPEDN: break;
+// case NS_rtf::LN_CCPTXBX: break;
+// case NS_rtf::LN_CCPHDRTXBX: break;
+// case NS_rtf::LN_PNFBPCHPFIRST: break;
+// case NS_rtf::LN_PNCHPFIRST: break;
+// case NS_rtf::LN_CPNBTECHP: break;
+// case NS_rtf::LN_PNFBPPAPFIRST: break;
+// case NS_rtf::LN_PNPAPFIRST: break;
+// case NS_rtf::LN_CPNBTEPAP: break;
+// case NS_rtf::LN_PNFBPLVCFIRST: break;
+// case NS_rtf::LN_PNLVCFIRST: break;
+// case NS_rtf::LN_CPNBTELVC: break;
+// case NS_rtf::LN_FCISLANDFIRST: break;
+// case NS_rtf::LN_FCISLANDLIM: break;
+// case NS_rtf::LN_CFCLCB: break;
+// case NS_rtf::LN_FCSTSHFORIG: break;
+// case NS_rtf::LN_LCBSTSHFORIG: break;
+// case NS_rtf::LN_FCSTSHF: break;
+// case NS_rtf::LN_LCBSTSHF: break;
+// case NS_rtf::LN_FCPLCFFNDREF: break;
+// case NS_rtf::LN_LCBPLCFFNDREF: break;
+// case NS_rtf::LN_FCPLCFFNDTXT: break;
+// case NS_rtf::LN_LCBPLCFFNDTXT: break;
+// case NS_rtf::LN_FCPLCFANDREF: break;
+// case NS_rtf::LN_LCBPLCFANDREF: break;
+// case NS_rtf::LN_FCPLCFANDTXT: break;
+// case NS_rtf::LN_LCBPLCFANDTXT: break;
+// case NS_rtf::LN_FCPLCFSED: break;
+// case NS_rtf::LN_LCBPLCFSED: break;
+// case NS_rtf::LN_FCPLCFPAD: break;
+// case NS_rtf::LN_LCBPLCFPAD: break;
+// case NS_rtf::LN_FCPLCFPHE: break;
+// case NS_rtf::LN_LCBPLCFPHE: break;
+// case NS_rtf::LN_FCSTTBFGLSY: break;
+// case NS_rtf::LN_LCBSTTBFGLSY: break;
+// case NS_rtf::LN_FCPLCFGLSY: break;
+// case NS_rtf::LN_LCBPLCFGLSY: break;
+// case NS_rtf::LN_FCPLCFHDD: break;
+// case NS_rtf::LN_LCBPLCFHDD: break;
+// case NS_rtf::LN_FCPLCFBTECHPX: break;
+// case NS_rtf::LN_LCBPLCFBTECHPX: break;
+// case NS_rtf::LN_FCPLCFBTEPAPX: break;
+// case NS_rtf::LN_LCBPLCFBTEPAPX: break;
+// case NS_rtf::LN_FCPLCFSEA: break;
+// case NS_rtf::LN_LCBPLCFSEA: break;
+// case NS_rtf::LN_FCSTTBFFFN: break;
+// case NS_rtf::LN_LCBSTTBFFFN: break;
+// case NS_rtf::LN_FCPLCFFLDMOM: break;
+// case NS_rtf::LN_LCBPLCFFLDMOM: break;
+// case NS_rtf::LN_FCPLCFFLDHDR: break;
+// case NS_rtf::LN_LCBPLCFFLDHDR: break;
+// case NS_rtf::LN_FCPLCFFLDFTN: break;
+// case NS_rtf::LN_LCBPLCFFLDFTN: break;
+// case NS_rtf::LN_FCPLCFFLDATN: break;
+// case NS_rtf::LN_LCBPLCFFLDATN: break;
+// case NS_rtf::LN_FCPLCFFLDMCR: break;
+// case NS_rtf::LN_LCBPLCFFLDMCR: break;
+// case NS_rtf::LN_FCSTTBFBKMK: break;
+// case NS_rtf::LN_LCBSTTBFBKMK: break;
+// case NS_rtf::LN_FCPLCFBKF: break;
+// case NS_rtf::LN_LCBPLCFBKF: break;
+// case NS_rtf::LN_FCPLCFBKL: break;
+// case NS_rtf::LN_LCBPLCFBKL: break;
+// case NS_rtf::LN_FCCMDS: break;
+// case NS_rtf::LN_LCBCMDS: break;
+// case NS_rtf::LN_FCPLCMCR: break;
+// case NS_rtf::LN_LCBPLCMCR: break;
+// case NS_rtf::LN_FCSTTBFMCR: break;
+// case NS_rtf::LN_LCBSTTBFMCR: break;
+// case NS_rtf::LN_FCPRDRVR: break;
+// case NS_rtf::LN_LCBPRDRVR: break;
+// case NS_rtf::LN_FCPRENVPORT: break;
+// case NS_rtf::LN_LCBPRENVPORT: break;
+// case NS_rtf::LN_FCPRENVLAND: break;
+// case NS_rtf::LN_LCBPRENVLAND: break;
+// case NS_rtf::LN_FCWSS: break;
+// case NS_rtf::LN_LCBWSS: break;
+// case NS_rtf::LN_FCDOP: break;
+// case NS_rtf::LN_LCBDOP: break;
+// case NS_rtf::LN_FCSTTBFASSOC: break;
+// case NS_rtf::LN_LCBSTTBFASSOC: break;
+// case NS_rtf::LN_FCCLX: break;
+// case NS_rtf::LN_LCBCLX: break;
+// case NS_rtf::LN_FCPLCFPGDFTN: break;
+// case NS_rtf::LN_LCBPLCFPGDFTN: break;
+// case NS_rtf::LN_FCAUTOSAVESOURCE: break;
+// case NS_rtf::LN_LCBAUTOSAVESOURCE: break;
+// case NS_rtf::LN_FCGRPXSTATNOWNERS: break;
+// case NS_rtf::LN_LCBGRPXSTATNOWNERS: break;
+// case NS_rtf::LN_FCSTTBFATNBKMK: break;
+// case NS_rtf::LN_LCBSTTBFATNBKMK: break;
+// case NS_rtf::LN_FCPLCDOAMOM: break;
+// case NS_rtf::LN_LCBPLCDOAMOM: break;
+// case NS_rtf::LN_FCPLCDOAHDR: break;
+// case NS_rtf::LN_LCBPLCDOAHDR: break;
+// case NS_rtf::LN_FCPLCSPAMOM: break;
+// case NS_rtf::LN_LCBPLCSPAMOM: break;
+// case NS_rtf::LN_FCPLCSPAHDR: break;
+// case NS_rtf::LN_LCBPLCSPAHDR: break;
+// case NS_rtf::LN_FCPLCFATNBKF: break;
+// case NS_rtf::LN_LCBPLCFATNBKF: break;
+// case NS_rtf::LN_FCPLCFATNBKL: break;
+// case NS_rtf::LN_LCBPLCFATNBKL: break;
+// case NS_rtf::LN_FCPMS: break;
+// case NS_rtf::LN_LCBPMS: break;
+// case NS_rtf::LN_FCFORMFLDSTTBF: break;
+// case NS_rtf::LN_LCBFORMFLDSTTBF: break;
+// case NS_rtf::LN_FCPLCFENDREF: break;
+// case NS_rtf::LN_LCBPLCFENDREF: break;
+// case NS_rtf::LN_FCPLCFENDTXT: break;
+// case NS_rtf::LN_LCBPLCFENDTXT: break;
+// case NS_rtf::LN_FCPLCFFLDEDN: break;
+// case NS_rtf::LN_LCBPLCFFLDEDN: break;
+// case NS_rtf::LN_FCPLCFPGDEDN: break;
+// case NS_rtf::LN_LCBPLCFPGDEDN: break;
+// case NS_rtf::LN_FCDGGINFO: break;
+// case NS_rtf::LN_LCBDGGINFO: break;
+// case NS_rtf::LN_FCSTTBFRMARK: break;
+// case NS_rtf::LN_LCBSTTBFRMARK: break;
+// case NS_rtf::LN_FCSTTBFCAPTION: break;
+// case NS_rtf::LN_LCBSTTBFCAPTION: break;
+// case NS_rtf::LN_FCSTTBFAUTOCAPTION: break;
+// case NS_rtf::LN_LCBSTTBFAUTOCAPTION: break;
+// case NS_rtf::LN_FCPLCFWKB: break;
+// case NS_rtf::LN_LCBPLCFWKB: break;
+// case NS_rtf::LN_FCPLCFSPL: break;
+// case NS_rtf::LN_LCBPLCFSPL: break;
+// case NS_rtf::LN_FCPLCFTXBXTXT: break;
+// case NS_rtf::LN_LCBPLCFTXBXTXT: break;
+// case NS_rtf::LN_FCPLCFFLDTXBX: break;
+// case NS_rtf::LN_LCBPLCFFLDTXBX: break;
+// case NS_rtf::LN_FCPLCFHDRTXBXTXT: break;
+// case NS_rtf::LN_LCBPLCFHDRTXBXTXT: break;
+// case NS_rtf::LN_FCPLCFFLDHDRTXBX: break;
+// case NS_rtf::LN_LCBPLCFFLDHDRTXBX: break;
+// case NS_rtf::LN_FCSTWUSER: break;
+// case NS_rtf::LN_LCBSTWUSER: break;
+// case NS_rtf::LN_FCSTTBTTMBD: break;
+// case NS_rtf::LN_LCBSTTBTTMBD: break;
+// case NS_rtf::LN_FCUNUSED: break;
+// case NS_rtf::LN_LCBUNUSED: break;
+// case NS_rtf::LN_FCPGDMOTHER: break;
+// case NS_rtf::LN_LCBPGDMOTHER: break;
+// case NS_rtf::LN_FCBKDMOTHER: break;
+// case NS_rtf::LN_LCBBKDMOTHER: break;
+// case NS_rtf::LN_FCPGDFTN: break;
+// case NS_rtf::LN_LCBPGDFTN: break;
+// case NS_rtf::LN_FCBKDFTN: break;
+// case NS_rtf::LN_LCBBKDFTN: break;
+// case NS_rtf::LN_FCPGDEDN: break;
+// case NS_rtf::LN_LCBPGDEDN: break;
+// case NS_rtf::LN_FCBKDEDN: break;
+// case NS_rtf::LN_LCBBKDEDN: break;
+// case NS_rtf::LN_FCSTTBFINTLFLD: break;
+// case NS_rtf::LN_LCBSTTBFINTLFLD: break;
+// case NS_rtf::LN_FCROUTESLIP: break;
+// case NS_rtf::LN_LCBROUTESLIP: break;
+// case NS_rtf::LN_FCSTTBSAVEDBY: break;
+// case NS_rtf::LN_LCBSTTBSAVEDBY: break;
+// case NS_rtf::LN_FCSTTBFNM: break;
+// case NS_rtf::LN_LCBSTTBFNM: break;
+// case NS_rtf::LN_FCPLCFLST: break;
+// case NS_rtf::LN_LCBPLCFLST: break;
+// case NS_rtf::LN_FCPLFLFO: break;
+// case NS_rtf::LN_LCBPLFLFO: break;
+// case NS_rtf::LN_FCPLCFTXBXBKD: break;
+// case NS_rtf::LN_LCBPLCFTXBXBKD: break;
+// case NS_rtf::LN_FCPLCFTXBXHDRBKD: break;
+// case NS_rtf::LN_LCBPLCFTXBXHDRBKD: break;
+// case NS_rtf::LN_FCDOCUNDO: break;
+// case NS_rtf::LN_LCBDOCUNDO: break;
+// case NS_rtf::LN_FCRGBUSE: break;
+// case NS_rtf::LN_LCBRGBUSE: break;
+// case NS_rtf::LN_FCUSP: break;
+// case NS_rtf::LN_LCBUSP: break;
+// case NS_rtf::LN_FCUSKF: break;
+// case NS_rtf::LN_LCBUSKF: break;
+// case NS_rtf::LN_FCPLCUPCRGBUSE: break;
+// case NS_rtf::LN_LCBPLCUPCRGBUSE: break;
+// case NS_rtf::LN_FCPLCUPCUSP: break;
+// case NS_rtf::LN_LCBPLCUPCUSP: break;
+// case NS_rtf::LN_FCSTTBGLSYSTYLE: break;
+// case NS_rtf::LN_LCBSTTBGLSYSTYLE: break;
+// case NS_rtf::LN_FCPLGOSL: break;
+// case NS_rtf::LN_LCBPLGOSL: break;
+// case NS_rtf::LN_FCPLCOCX: break;
+// case NS_rtf::LN_LCBPLCOCX: break;
+// case NS_rtf::LN_FCPLCFBTELVC: break;
+// case NS_rtf::LN_LCBPLCFBTELVC: break;
+// case NS_rtf::LN_DWLOWDATETIME: break;
+// case NS_rtf::LN_DWHIGHDATETIME: break;
+// case NS_rtf::LN_FCPLCFLVC: break;
+// case NS_rtf::LN_LCBPLCFLVC: break;
+// case NS_rtf::LN_FCPLCASUMY: break;
+// case NS_rtf::LN_LCBPLCASUMY: break;
+// case NS_rtf::LN_FCPLCFGRAM: break;
+// case NS_rtf::LN_LCBPLCFGRAM: break;
+// case NS_rtf::LN_FCSTTBLISTNAMES: break;
+// case NS_rtf::LN_LCBSTTBLISTNAMES: break;
+// case NS_rtf::LN_FCSTTBFUSSR: break;
+// case NS_rtf::LN_LCBSTTBFUSSR: break;
+// case NS_rtf::LN_FN: break;
+// case NS_rtf::LN_FCSEPX: break;
+// case NS_rtf::LN_FNMPR: break;
+// case NS_rtf::LN_FCMPR: break;
+// case NS_rtf::LN_ICOFORE: break;
+// case NS_rtf::LN_ICOBACK: break;
+// case NS_rtf::LN_IPAT: break;
+// case NS_rtf::LN_SHDFORECOLOR: break;
+// case NS_rtf::LN_SHDBACKCOLOR: break;
+// case NS_rtf::LN_SHDPATTERN: break;
+// case NS_rtf::LN_DPTLINEWIDTH: break;
+// case NS_rtf::LN_BRCTYPE: break;
+// case NS_rtf::LN_ICO: break;
+// case NS_rtf::LN_DPTSPACE: break;
+// case NS_rtf::LN_FSHADOW: break;
+// case NS_rtf::LN_FFRAME: break;
+// case NS_rtf::LN_UNUSED2_15: break;
+// case NS_rtf::LN_FFIRSTMERGED: break;
+// case NS_rtf::LN_FMERGED: break;
+// case NS_rtf::LN_FVERTICAL: break;
+// case NS_rtf::LN_FBACKWARD: break;
+// case NS_rtf::LN_FROTATEFONT: break;
+// case NS_rtf::LN_FVERTMERGE: break;
+// case NS_rtf::LN_FVERTRESTART: break;
+// case NS_rtf::LN_VERTALIGN: break;
+// case NS_rtf::LN_FUNUSED: break;
+// case NS_rtf::LN_WUNUSED: break;
+// case NS_rtf::LN_BRCTOP: break;
+// case NS_rtf::LN_BRCLEFT: break;
+// case NS_rtf::LN_BRCBOTTOM: break;
+// case NS_rtf::LN_BRCRIGHT: break;
+// case NS_rtf::LN_IBKL: break;
+// case NS_rtf::LN_ITCFIRST: break;
+// case NS_rtf::LN_FPUB: break;
+// case NS_rtf::LN_ITCLIM: break;
+// case NS_rtf::LN_FCOL: break;
+// case NS_rtf::LN_LINECOLOR: break;
+// case NS_rtf::LN_LINEWIDTH: break;
+// case NS_rtf::LN_LINETYPE: break;
+// case NS_rtf::LN_MM: break;
+// case NS_rtf::LN_XEXT: break;
+// case NS_rtf::LN_YEXT: break;
+// case NS_rtf::LN_HMF: break;
+// case NS_rtf::LN_LCB: break;
+// case NS_rtf::LN_CBHEADER: break;
+// case NS_rtf::LN_MFP: break;
+// case NS_rtf::LN_BM_RCWINMF: break;
+// case NS_rtf::LN_DXAGOAL: break;
+// case NS_rtf::LN_DYAGOAL: break;
+// case NS_rtf::LN_MX: break;
+// case NS_rtf::LN_MY: break;
+// case NS_rtf::LN_DXACROPLEFT: break;
+// case NS_rtf::LN_DYACROPTOP: break;
+// case NS_rtf::LN_DXACROPRIGHT: break;
+// case NS_rtf::LN_DYACROPBOTTOM: break;
+// case NS_rtf::LN_BRCL: break;
+// case NS_rtf::LN_FFRAMEEMPTY: break;
+// case NS_rtf::LN_FBITMAP: break;
+// case NS_rtf::LN_FDRAWHATCH: break;
+// case NS_rtf::LN_FERROR: break;
+// case NS_rtf::LN_BPP: break;
+// case NS_rtf::LN_DXAORIGIN: break;
+// case NS_rtf::LN_DYAORIGIN: break;
+// case NS_rtf::LN_CPROPS: break;
+// case NS_rtf::LN_LINEPROPSTOP: break;
+// case NS_rtf::LN_LINEPROPSLEFT: break;
+// case NS_rtf::LN_LINEPROPSBOTTOM: break;
+// case NS_rtf::LN_LINEPROPSRIGHT: break;
+// case NS_rtf::LN_LINEPROPSHORIZONTAL: break;
+// case NS_rtf::LN_LINEPROPSVERTICAL: break;
+// case NS_rtf::LN_headerr: break;
+// case NS_rtf::LN_footerr: break;
+// case NS_rtf::LN_endnote: break;
+// case NS_rtf::LN_BOOKMARKNAME: break;
+
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_LISTLEVEL:
+ {
+ //add a new level to the level vector and make it the current one
+ m_pImpl->AddLevel();
+
+ writerfilter::Reference<Properties>::Pointer_t pProperties;
+ if((pProperties = rVal.getProperties()).get())
+ pProperties->resolve(*this);
+ }
+ break;
+// case NS_rtf::LN_LFO: break;
+// case NS_rtf::LN_F: break;
+// case NS_rtf::LN_ALTFONTNAME: break;
+// case NS_rtf::LN_XSZFFN: break;
+// case NS_rtf::LN_XSTZNAME: break;
+// case NS_rtf::LN_XSTZNAME1: break;
+// case NS_rtf::LN_UPXSTART: break;
+// case NS_rtf::LN_UPX: break;
+// case NS_rtf::LN_sed: break;
+// case NS_rtf::LN_picf: break;
+// case NS_rtf::LN_rgbrc: break;
+// case NS_rtf::LN_shd: break;
+// case NS_rtf::LN_cellShd: break;
+// case NS_rtf::LN_cellTopColor: break;
+// case NS_rtf::LN_cellLeftColor: break;
+// case NS_rtf::LN_cellBottomColor: break;
+// case NS_rtf::LN_cellRightColor: break;
+
+// case NS_rtf::LN_LISTTABLE: break;
+// case NS_rtf::LN_LFOTABLE: break;
+// case NS_rtf::LN_FONTTABLE: break;
+// case NS_rtf::LN_STYLESHEET: break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_AbstractNum_abstractNumId:
+ {
+ sal_Int32 nVal = rVal.getString().toInt32();
+ m_pImpl->m_pCurrentEntry->nAbstractNumId = nVal;
+ m_pImpl->m_pCurrentEntry->nListId = nVal;
+ }
+ break;
+ case NS_ooxml::LN_CT_Ind_left:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->m_pCurrentEntry->pCurrentProperties->Insert(
+ PROP_INDENT_AT, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
+ break;
+ case NS_ooxml::LN_CT_Ind_hanging:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->m_pCurrentEntry->pCurrentProperties->Insert(
+ PROP_FIRST_LINE_INDENT, true, uno::makeAny( - ConversionHelper::convertTwipToMM100( nIntValue ) ));
+ break;
+ case NS_ooxml::LN_CT_Ind_firstLine:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->m_pCurrentEntry->pCurrentProperties->Insert(
+ PROP_FIRST_LINE_INDENT, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
+ break;
+ case NS_ooxml::LN_CT_Lvl_ilvl: //overrides previous level - unsupported
+ 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
+ m_pImpl->m_pCurrentEntry->pCurrentProperties->nTabstop = ConversionHelper::convertTwipToMM100( nIntValue );
+ }
+ break;
+ default:
+ {
+#if OSL_DEBUG_LEVEL > 0
+ ::rtl::OString sMessage( "ListTable::attribute() - Id: ");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nName ), 10 );
+ sMessage += ::rtl::OString(" / 0x");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nName ), 16 );
+ sMessage += ::rtl::OString(" value: ");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nIntValue ), 10 );
+ sMessage += ::rtl::OString(" / 0x");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nIntValue ), 16 );
+ OSL_ENSURE( false, sMessage.getStr()); //
+#endif
+ }
+ }
+}
+/*-- 23.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void ListTable::sprm(Sprm & rSprm)
+{
+ //fill the attributes of the style sheet
+ sal_uInt32 nSprmId = rSprm.getId();
+ if( m_pImpl->m_pCurrentEntry.get() ||
+ nSprmId == NS_ooxml::LN_CT_Numbering_abstractNum ||
+ nSprmId == NS_ooxml::LN_CT_Numbering_num )
+ {
+ sal_Int32 nIntValue = rSprm.getValue()->getInt();
+ /* WRITERFILTERSTATUS: table: ListTable_sprm */
+ switch( nSprmId )
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Numbering_abstractNum:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if(pProperties.get())
+ {
+ //create a new list entry
+ OSL_ENSURE( !m_pImpl->m_pCurrentEntry.get(), "current entry has to be NULL here");
+ m_pImpl->m_pCurrentEntry.reset( new ListEntry );
+ pProperties->resolve( *this );
+ //append it to the table
+ m_pImpl->m_aListEntries.push_back( m_pImpl->m_pCurrentEntry );
+ m_pImpl->m_pCurrentEntry = ListEntryPtr();
+ }
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Numbering_num:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if(pProperties.get())
+ {
+ Numbering_numHdlPtr pNumHdl( new Numbering_numHdl( *this ) );
+ pProperties->resolve(*pNumHdl);
+ //todo: is the order of numberings guaranteed?
+ //sal_Int32 pNumhdl->GetNumId();
+ m_pImpl->m_rDMapper.AddListIDToLFOTable( pNumHdl->GetAbstractNumId() );
+ }
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_AbstractNum_multiLevelType:
+ break;
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_rtf::LN_TPLC:
+ m_pImpl->m_pCurrentEntry->nTPLC = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_AbstractNum_lvl:
+ {
+ m_pImpl->AddLevel();
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if(pProperties.get())
+ pProperties->resolve(*this);
+ }
+ break;
+// not a useful number in ooxml
+// case NS_rtf::LN_LSID:
+// m_pImpl->m_pCurrentEntry->nListId = nIntValue;
+// break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_RGBXCHNUMS: break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_ISTARTAT:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_NFC:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_JC:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FLEGAL:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FNORESTART:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FPREV:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FPREVSPACE:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FWORD6:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_IXCHFOLLOW:
+ ApplyLevelValues( nSprmId, nIntValue );
+ 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.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ case NS_ooxml::LN_CT_NumLvl_lvl:
+ {
+ // overwrite level
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if(pProperties.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ case NS_ooxml::LN_CT_Lvl_lvlJc:
+ {
+ static sal_Int16 aWWAlignments[ ] =
+ {
+ text::HoriOrientation::LEFT,
+ text::HoriOrientation::CENTER,
+ text::HoriOrientation::RIGHT
+ };
+ m_pImpl->m_pCurrentEntry->pCurrentProperties->Insert(
+ PROP_ADJUST, true, uno::makeAny( aWWAlignments[ nIntValue ] ) );
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ }
+ 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.get())
+ 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.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ case NS_ooxml::LN_CT_Lvl_suff:
+ //todo: currently unsupported suffix
+ //can be: "none", "space", "tab"
+ 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_sprm::LN_CHps: // sprmCHps
+ case NS_ooxml::LN_EG_RPrBase_lang:
+ case NS_ooxml::LN_EG_RPrBase_eastAsianLayout:
+ //no break!
+ default:
+ if(m_pImpl->m_pCurrentEntry->pCurrentProperties.get())
+ {
+ m_pImpl->m_rDMapper.PushListProperties( m_pImpl->m_pCurrentEntry->pCurrentProperties );
+ m_pImpl->m_rDMapper.sprm( rSprm );
+ m_pImpl->m_rDMapper.PopListProperties();
+ }
+ }
+ }
+}
+/*-- 12.11.2007 09:36:09---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void ListTable::ApplyLevelValues( sal_Int32 nId, sal_Int32 nIntValue)
+{
+ if(m_pImpl->m_pCurrentEntry->pCurrentProperties.get())
+ switch(nId)
+ {
+ case NS_rtf::LN_ISTARTAT:
+ m_pImpl->m_pCurrentEntry->pCurrentProperties->nIStartAt = nIntValue;
+ break;
+ case NS_rtf::LN_NFC:
+ m_pImpl->m_pCurrentEntry->pCurrentProperties->nNFC = nIntValue;
+ break;
+ case NS_rtf::LN_JC:
+ m_pImpl->m_pCurrentEntry->pCurrentProperties->nJC = nIntValue;
+ break;
+ case NS_rtf::LN_FLEGAL:
+ m_pImpl->m_pCurrentEntry->pCurrentProperties->nFLegal = nIntValue;
+ break;
+ case NS_rtf::LN_FNORESTART:
+ m_pImpl->m_pCurrentEntry->pCurrentProperties->nFNoRestart = nIntValue;
+ break;
+ case NS_rtf::LN_FPREV:
+ m_pImpl->m_pCurrentEntry->pCurrentProperties->nFPrev = nIntValue;
+ break;
+ case NS_rtf::LN_FPREVSPACE:
+ m_pImpl->m_pCurrentEntry->pCurrentProperties->nFPrevSpace = nIntValue;
+ break;
+ case NS_rtf::LN_FWORD6:
+ m_pImpl->m_pCurrentEntry->pCurrentProperties->nFWord6 = nIntValue;
+ break;
+ case NS_rtf::LN_IXCHFOLLOW:
+ m_pImpl->m_pCurrentEntry->pCurrentProperties->nXChFollow = nIntValue;
+ break;
+ default:
+ OSL_ENSURE( false, "this line should never be reached");
+ }
+}
+/*-- 23.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void ListTable::entry(int, writerfilter::Reference<Properties>::Pointer_t ref)
+{
+
+ if( m_pImpl->m_rDMapper.IsOOXMLImport() )
+ {
+ ref->resolve(*this);
+ }
+ else
+ {
+ //create a new list entry
+ OSL_ENSURE( !m_pImpl->m_pCurrentEntry.get(), "current entry has to be NULL here");
+ m_pImpl->m_pCurrentEntry.reset( new ListEntry );
+ ref->resolve(*this);
+ //append it to the table
+ m_pImpl->m_aListEntries.push_back( m_pImpl->m_pCurrentEntry );
+ m_pImpl->m_pCurrentEntry = ListEntryPtr();
+ }
+}
+/*-- 26.06.2006 10:27:55---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_uInt32 ListTable::size() const
+{
+ return m_pImpl->m_aListEntries.size();
+}
+
+rtl::OUString ListTable::GetStyleName( sal_Int32 nListId )
+{
+ rtl::OUString sStyleName( rtl::OUString::createFromAscii( "WWNum" ) );
+ sStyleName += rtl::OUString::valueOf( nListId + 1 );
+
+ return sStyleName;
+}
+
+void ListTable::CreateNumberingRules( )
+{
+ uno::Reference< container::XIndexReplace > xRet;
+ std::vector< ListEntryPtr >::const_iterator aIt = m_pImpl->m_aListEntries.begin();
+ std::vector< ListEntryPtr >::const_iterator aEndIt = m_pImpl->m_aListEntries.end();
+
+ uno::Reference< container::XNameContainer > xStyles;
+
+ try
+ {
+ uno::Reference< style::XStyleFamiliesSupplier > xFamilies( m_pImpl->m_xFactory, uno::UNO_QUERY_THROW );
+ uno::Any oFamily = xFamilies->getStyleFamilies( )->getByName( rtl::OUString::createFromAscii( "NumberingStyles" ) );
+
+ oFamily >>= xStyles;
+ }
+ catch ( const uno::Exception )
+ {
+ }
+
+ for(; aIt != aEndIt; ++aIt)
+ {
+ if( !(*aIt)->m_xNumRules.is() && m_pImpl->m_xFactory.is() && xStyles.is( ) )
+ {
+ try
+ {
+ // Create the numbering style
+ uno::Reference< beans::XPropertySet > xStyle (
+ m_pImpl->m_xFactory->createInstance(
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.style.NumberingStyle"))),
+ uno::UNO_QUERY_THROW );
+
+ rtl::OUString sStyleName = GetStyleName( ( *aIt )->nListId );
+#if DEBUG
+ clog << "Creating numbering style: ";
+ clog << rtl::OUStringToOString( sStyleName, RTL_TEXTENCODING_UTF8 ).getStr( );
+ clog << endl;
+#endif
+
+ xStyles->insertByName( sStyleName, makeAny( xStyle ) );
+
+ uno::Any oStyle = xStyles->getByName( sStyleName );
+ xStyle.set( oStyle, uno::UNO_QUERY_THROW );
+
+ PropertyNameSupplier& aPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ uno::Any aRules = xStyle->getPropertyValue( aPropNameSupplier.GetName( PROP_NUMBERING_RULES ) );
+ aRules >>= ( *aIt )->m_xNumRules;
+
+ //now fill the numbering levels appropriately
+ ::std::vector< ListPropertyMapPtr >::const_iterator aIter = (*aIt)->aLevelProperties.begin();
+ ::std::vector< ListPropertyMapPtr >::const_iterator aEnd = (*aIt)->aLevelProperties.end();
+ sal_Int32 nLevel = 0;
+ while(aIter != aEnd)
+ {
+ PropertyValueVector_t aCharStyleProperties;
+ uno::Sequence< beans::PropertyValue> aValues = (*aIter)->GetPropertyValuesList(aCharStyleProperties);
+ if( aCharStyleProperties.size() )
+ {
+ //create (or find) a character style containing the character attributes of the symbol
+ //and apply it to the numbering level
+ ::rtl::OUString sStyle = m_pImpl->m_rDMapper.getOrCreateCharStyle( aCharStyleProperties );
+ aValues.realloc( aValues.getLength() + 1);
+ aValues[aValues.getLength() - 1].Name = aPropNameSupplier.GetName( PROP_CHAR_STYLE_NAME );
+ aValues[aValues.getLength() - 1].Value <<= sStyle;
+ }
+ //now parse the text to find %n from %1 to %nLevel+1
+ //everything before the first % and the last %x is prefix and suffix
+ ::rtl::OUString sLevelText( (*aIter)->sBulletChar );
+ sal_Int32 nCurrentIndex = 0;
+ sal_Int32 nFound = sLevelText.indexOf( '%', nCurrentIndex );
+ if( nFound > 0 )
+ {
+ ::rtl::OUString sPrefix = sLevelText.copy( 0, nFound );
+ aValues.realloc( aValues.getLength() + 1 );
+ aValues[ aValues.getLength() - 1 ] = MAKE_PROPVAL(PROP_PREFIX, sPrefix);
+ sLevelText = sLevelText.copy( nFound );
+ }
+ sal_Int32 nMinLevel = nLevel;
+ //now the text should either be empty or start with %
+ nFound = 0;
+ while( nFound >= 0 )
+ {
+ if( sLevelText.getLength() > 1 )
+ {
+ sal_Unicode cLevel = sLevelText.getStr()[1];
+ if( cLevel >= '1' && cLevel <= '9' )
+ {
+ if( cLevel - '1' < nMinLevel )
+ nMinLevel = cLevel - '1';
+ //remove first char - next char is removed later
+ sLevelText = sLevelText.copy( 1 );
+ }
+ }
+ //remove old '%' or number
+ sLevelText = sLevelText.copy( 1 );
+ nCurrentIndex = 0;
+ nFound = sLevelText.indexOf( '%', nCurrentIndex );
+ //remove the text before the next %
+ if(nFound > 0)
+ sLevelText = sLevelText.copy( nFound -1 );
+ }
+ if( nMinLevel < nLevel )
+ {
+ aValues.realloc( aValues.getLength() + 1);
+ aValues[ aValues.getLength() - 1 ] =
+ MAKE_PROPVAL(PROP_PARENT_NUMBERING, sal_Int16( nLevel - nMinLevel + 1));
+ }
+ aValues.realloc( aValues.getLength() + 1);
+ aValues[ aValues.getLength() - 1 ] = MAKE_PROPVAL(PROP_SUFFIX, sLevelText);
+
+ aValues.realloc( aValues.getLength() + 1);
+ aValues[ aValues.getLength() - 1 ] = MAKE_PROPVAL( PROP_POSITION_AND_SPACE_MODE,
+ sal_Int16( text::PositionAndSpaceMode::LABEL_ALIGNMENT ) );
+
+#if DEBUG
+ clog << endl << "Numbering rule properties - " << nLevel << endl;
+ for ( sal_Int32 i = 0, len = aValues.getLength( ); i < len; i++ )
+ {
+ beans::PropertyValue aVal = aValues[i];
+ clog << " " << rtl::OUStringToOString( aVal.Name, RTL_TEXTENCODING_UTF8 ).getStr( );
+ clog << ": ";
+ rtl::OUString sVal;
+ sal_Int32 nVal;
+ if ( aVal.Value >>= sVal )
+ {
+ clog << rtl::OUStringToOString( sVal, RTL_TEXTENCODING_UTF8 ).getStr( );
+ }
+ else if ( aVal.Value >>= nVal )
+ {
+ clog << nVal;
+ }
+ clog << endl;
+ }
+#endif
+
+ (*aIt)->m_xNumRules->replaceByIndex(nLevel, uno::makeAny(aValues));
+ ++aIter;
+ ++nLevel;
+ }
+
+ // Create the numbering style for these rules
+ rtl::OUString sNumRulesName = aPropNameSupplier.GetName( PROP_NUMBERING_RULES );
+ xStyle->setPropertyValue(
+ sNumRulesName,
+ uno::makeAny( ( *aIt )->m_xNumRules ) );
+ }
+ catch( const uno::Exception& rEx)
+ {
+ (void)rEx;
+ OSL_ENSURE( false, "ListTable::CreateNumberingRules");
+ }
+ }
+ }
+}
+
+/*-- 26.06.2006 10:33:56---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< container::XIndexReplace > ListTable::GetNumberingRules(sal_Int32 nListId)
+{
+ uno::Reference< container::XIndexReplace > xRet;
+ std::vector< ListEntryPtr >::const_iterator aIt = m_pImpl->m_aListEntries.begin();
+ std::vector< ListEntryPtr >::const_iterator aEndIt = m_pImpl->m_aListEntries.end();
+ for(; aIt != aEndIt; ++aIt)
+ {
+ if((*aIt)->nListId == nListId)
+ {
+ xRet = (*aIt)->m_xNumRules;
+ break;
+ }
+ }
+ return xRet;
+}
+/*-- 19.11.2007 13:25:32---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void ListTable::setOverwriteLevel(sal_Int32 nAbstractNumId, sal_Int32 nLevel)
+{
+ m_nOverwriteListId = nAbstractNumId;
+ m_nOverwriteLevel = nLevel;
+ OSL_ENSURE(!m_pImpl->m_pCurrentEntry.get(), "where to put the overwrite level");
+ std::vector< ListEntryPtr >::const_iterator aIt = m_pImpl->m_aListEntries.begin();
+ std::vector< ListEntryPtr >::const_iterator aEndIt = m_pImpl->m_aListEntries.end();
+ for(; aIt != aEndIt; ++aIt)
+ {
+ if( (*aIt)->nListId == nAbstractNumId )
+ {
+ m_pImpl->m_pCurrentEntry = *aIt;
+ break;
+ }
+ }
+ OSL_ENSURE( m_pImpl->m_pCurrentEntry.get(), "list not found");
+}
+/*-- 19.11.2007 13:25:32---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void ListTable::resetOverwrite()
+{
+ m_nOverwriteListId = -1;
+ m_nOverwriteLevel = -1;
+ m_pImpl->m_pCurrentEntry.reset();
+}
+
+}//namespace dmapper
+}//namespace writerfilter
+
diff --git a/writerfilter/source/dmapper/ListTable.hxx b/writerfilter/source/dmapper/ListTable.hxx
new file mode 100644
index 000000000000..b7db225fb9f4
--- /dev/null
+++ b/writerfilter/source/dmapper/ListTable.hxx
@@ -0,0 +1,89 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_LISTTABLE_HXX
+#define INCLUDED_LISTTABLE_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <PropertyMap.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+
+namespace com{ namespace sun { namespace star {
+ namespace text{
+ class XTextDocument;
+ }
+ namespace container{
+ class XIndexReplace;
+ }
+ namespace lang{
+ class XMultiServiceFactory;
+ }
+}}}
+
+namespace writerfilter {
+namespace dmapper
+{
+class DomainMapper;
+struct ListTable_Impl;
+class WRITERFILTER_DLLPRIVATE ListTable :
+ public Properties,
+ public Table
+{
+ ListTable_Impl *m_pImpl;
+ sal_Int32 m_nOverwriteListId;
+ sal_Int32 m_nOverwriteLevel;
+
+ void ApplyLevelValues( sal_Int32 nId, sal_Int32 nIntValue);
+public:
+ ListTable(
+ DomainMapper& rDMapper,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xFactory);
+ virtual ~ListTable();
+
+ // Properties
+ virtual void attribute(Id Name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ // Table
+ virtual void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
+ // BinaryObj
+// virtual void data(const sal_Int8* buf, size_t len,
+// writerfilter::Reference<Properties>::Pointer_t ref);
+
+ sal_uInt32 size() const;
+ rtl::OUString GetStyleName( sal_Int32 nListId );
+ void CreateNumberingRules( );
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexReplace >
+ GetNumberingRules(sal_Int32 nListId);
+
+ void setOverwriteLevel(sal_Int32 nAbstractNumId, sal_Int32 nLevel);
+ void resetOverwrite();
+};
+typedef boost::shared_ptr< ListTable > ListTablePtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/MeasureHandler.cxx b/writerfilter/source/dmapper/MeasureHandler.cxx
new file mode 100644
index 000000000000..58f3980063ee
--- /dev/null
+++ b/writerfilter/source/dmapper/MeasureHandler.cxx
@@ -0,0 +1,132 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <MeasureHandler.hxx>
+#include <PropertyMap.hxx>
+#include <doctok/resourceids.hxx>
+#include <ConversionHelper.hxx>
+#include <ooxml/resourceids.hxx>
+#include <com/sun/star/text/SizeType.hpp>
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+MeasureHandler::MeasureHandler() :
+ m_nMeasureValue( 0 ),
+ m_nUnit( -1 ),
+ m_nRowHeightSizeType( text::SizeType::MIN )
+{
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+MeasureHandler::~MeasureHandler()
+{
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void MeasureHandler::attribute(Id rName, Value & rVal)
+{
+ sal_Int32 nIntValue = rVal.getInt();
+ (void)rName;
+ /* WRITERFILTERSTATUS: table: MeasureHandler_attributedata */
+ switch( rName )
+ {
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_unit:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblWidth_type:// = 90668;
+ //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;
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Height_hRule: // 90666;
+ {
+ ::rtl::OUString sHeightType = rVal.getString();
+ if( sHeightType.equalsAscii( "exact" ) )
+ m_nRowHeightSizeType = text::SizeType::FIX;
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_trleft:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_preferredWidth:
+ case NS_ooxml::LN_CT_TblWidth_w:// = 90667;
+ m_nMeasureValue = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Height_val: // 90665 -- a string value
+ {
+ m_nUnit = NS_ooxml::LN_Value_ST_TblWidth_dxa;
+ ::rtl::OUString sHeight = rVal.getString();
+ m_nMeasureValue = sHeight.toInt32();
+ }
+ break;
+ default:
+ OSL_ENSURE( false, "unknown attribute");
+ }
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void MeasureHandler::sprm(Sprm & rSprm)
+{
+ (void)rSprm;
+}
+/*-- 24.04.2007 09:09:01---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+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;
+}
+/*-- 18.06.2007 10:24:26---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+bool MeasureHandler::isAutoWidth() const
+{
+ return sal::static_int_cast<Id>(m_nUnit) == NS_ooxml::LN_Value_ST_TblWidth_auto;
+}
+
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/MeasureHandler.hxx b/writerfilter/source/dmapper/MeasureHandler.hxx
new file mode 100644
index 000000000000..574685f8ed27
--- /dev/null
+++ b/writerfilter/source/dmapper/MeasureHandler.hxx
@@ -0,0 +1,66 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_MEASUREHANDLER_HXX
+#define INCLUDED_MEASUREHANDLER_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <boost/shared_ptr.hpp>
+
+namespace writerfilter {
+namespace dmapper
+{
+class PropertyMap;
+/** Handler for sprms that contain a measure and a unit
+ - Left indent of tables
+ - Preferred width of tables
+ */
+class WRITERFILTER_DLLPRIVATE MeasureHandler : public Properties
+{
+ sal_Int32 m_nMeasureValue;
+ sal_Int32 m_nUnit;
+ sal_Int16 m_nRowHeightSizeType; //table row height type
+
+public:
+ MeasureHandler();
+ virtual ~MeasureHandler();
+
+ // Properties
+ virtual void attribute(Id Name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ sal_Int32 getMeasureValue() const;
+ //at least tables can have automatic width
+ bool isAutoWidth() const;
+
+ sal_Int16 GetRowHeightSizeType() const { return m_nRowHeightSizeType;}
+};
+typedef boost::shared_ptr
+ < MeasureHandler > MeasureHandlerPtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/ModelEventListener.cxx b/writerfilter/source/dmapper/ModelEventListener.cxx
new file mode 100644
index 000000000000..853b835d7d98
--- /dev/null
+++ b/writerfilter/source/dmapper/ModelEventListener.cxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <ModelEventListener.hxx>
+#include <com/sun/star/document/XEventBroadcaster.hpp>
+#include <com/sun/star/text/XDocumentIndex.hpp>
+#include <com/sun/star/text/XDocumentIndexesSupplier.hpp>
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+
+
+/*-- 22.11.2007 08:40:22---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ModelEventListener::ModelEventListener()
+{
+}
+/*-- 22.11.2007 08:40:22---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ModelEventListener::~ModelEventListener()
+{
+}
+/*-- 22.11.2007 08:40:22---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void ModelEventListener::notifyEvent( const document::EventObject& rEvent ) throw (uno::RuntimeException)
+{
+ if( rEvent.EventName.equalsAscii("OnFocus"))
+ {
+ try
+ {
+ uno::Reference< text::XDocumentIndexesSupplier> xIndexesSupplier( rEvent.Source, uno::UNO_QUERY );
+ //remove listener
+ uno::Reference<document::XEventBroadcaster>(rEvent.Source, uno::UNO_QUERY )->removeEventListener(
+ uno::Reference<document::XEventListener>(this));
+
+ uno::Reference< container::XIndexAccess > xIndexes = xIndexesSupplier->getDocumentIndexes();
+
+ sal_Int32 nIndexes = xIndexes->getCount();
+ for( sal_Int32 nIndex = 0; nIndex < nIndexes; ++nIndex)
+ {
+ uno::Reference< text::XDocumentIndex> xIndex( xIndexes->getByIndex( nIndex ), uno::UNO_QUERY );
+ xIndex->update();
+ }
+ }
+ catch( const uno::Exception& rEx )
+ {
+ (void)rEx;
+ OSL_ENSURE( false, "exception while updating indexes" );
+ }
+ }
+}
+/*-- 22.11.2007 08:40:22---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void ModelEventListener::disposing( const lang::EventObject& rEvent ) throw (uno::RuntimeException)
+{
+ try
+ {
+ uno::Reference<document::XEventBroadcaster>(rEvent.Source, uno::UNO_QUERY )->removeEventListener(
+ uno::Reference<document::XEventListener>(this));
+ }
+ catch( const uno::Exception& )
+ {
+ }
+}
+
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/ModelEventListener.hxx b/writerfilter/source/dmapper/ModelEventListener.hxx
new file mode 100644
index 000000000000..3486dc70947d
--- /dev/null
+++ b/writerfilter/source/dmapper/ModelEventListener.hxx
@@ -0,0 +1,51 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_MODELEVENTLISTENER_HXX
+#define INCLUDED_MODELEVENTLISTENER_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <com/sun/star/document/XEventListener.hpp>
+#include <cppuhelper/implbase1.hxx>
+
+namespace writerfilter {
+namespace dmapper{
+
+
+class WRITERFILTER_DLLPRIVATE ModelEventListener :
+ public cppu::WeakImplHelper1< ::com::sun::star::document::XEventListener >
+{
+public:
+ ModelEventListener();
+ ~ModelEventListener();
+
+ virtual void SAL_CALL notifyEvent( const ::com::sun::star::document::EventObject& Event ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException);
+
+};
+}//namespace writerfilter
+}//namespace dmapper
+#endif //
diff --git a/writerfilter/source/dmapper/OLEHandler.cxx b/writerfilter/source/dmapper/OLEHandler.cxx
new file mode 100644
index 000000000000..65f76f11cbfc
--- /dev/null
+++ b/writerfilter/source/dmapper/OLEHandler.cxx
@@ -0,0 +1,246 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <OLEHandler.hxx>
+#include <PropertyMap.hxx>
+#include "GraphicHelpers.hxx"
+
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/container/XNameAccess.hpp>
+#include <com/sun/star/document/XEmbeddedObjectResolver.hpp>
+#include <com/sun/star/document/XStorageBasedDocument.hpp>
+#include <com/sun/star/drawing/XShape.hpp>
+#include <com/sun/star/embed/XEmbeddedObject.hpp>
+#include <com/sun/star/embed/XEmbedObjectCreator.hpp>
+#include <com/sun/star/graphic/XGraphic.hpp>
+#include <com/sun/star/io/XStream.hpp>
+#include <com/sun/star/lang/XComponent.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/text/XTextDocument.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+/*-- 23.04.2008 10:46:14---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+OLEHandler::OLEHandler() :
+ m_nDxaOrig(0),
+ m_nDyaOrig(0),
+ m_nWrapMode(0)
+{
+}
+/*-- 23.04.2008 10:46:14---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+OLEHandler::~OLEHandler()
+{
+}
+/*-- 23.04.2008 10:46:14---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void OLEHandler::attribute(Id rName, Value & rVal)
+{
+ rtl::OUString sStringValue = rVal.getString();
+ (void)rName;
+ /* WRITERFILTERSTATUS: table: OLEHandler_attributedata */
+ switch( rName )
+ {
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_OLEObject_Type:
+ m_sObjectType = sStringValue;
+ break;
+ case NS_ooxml::LN_CT_OLEObject_ProgID:
+ m_sProgId = sStringValue;
+ break;
+ case NS_ooxml::LN_CT_OLEObject_ShapeID:
+ m_sShapeId = sStringValue;
+ break;
+ case NS_ooxml::LN_CT_OLEObject_DrawAspect:
+ m_sDrawAspect = sStringValue;
+ break;
+ case NS_ooxml::LN_CT_OLEObject_ObjectID:
+ m_sObjectId = sStringValue;
+ break;
+ case NS_ooxml::LN_CT_OLEObject_r_id:
+ m_sr_id = sStringValue;
+ break;
+ case NS_ooxml::LN_inputstream:
+ rVal.getAny() >>= m_xInputStream;
+ break;
+ case NS_ooxml::LN_CT_Object_dxaOrig:
+ m_nDxaOrig = rVal.getInt();
+ break;
+ case NS_ooxml::LN_CT_Object_dyaOrig:
+ m_nDyaOrig = rVal.getInt();
+ break;
+ case NS_ooxml::LN_shape:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ {
+ uno::Reference< drawing::XShape > xTempShape;
+ rVal.getAny() >>= xTempShape;
+ if( xTempShape.is() )
+ {
+ m_xShape.set( xTempShape );
+
+ try
+ {
+ m_aShapeSize = xTempShape->getSize();
+ m_aShapePosition = xTempShape->getPosition();
+
+ uno::Reference< beans::XPropertySet > xShapeProps( xTempShape, uno::UNO_QUERY_THROW );
+ PropertyNameSupplier& rNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ xShapeProps->getPropertyValue( rNameSupplier.GetName( PROP_BITMAP ) ) >>= m_xReplacement;
+
+ xShapeProps->setPropertyValue(
+ rNameSupplier.GetName( PROP_SURROUND ),
+ uno::makeAny( m_nWrapMode ) );
+ }
+ catch( const uno::Exception& e )
+ {
+#if DEBUG
+ clog << "Exception in OLE Handler: ";
+ clog << rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr( ) << endl;
+#endif
+ }
+ }
+ }
+ break;
+ default:
+ OSL_ENSURE( false, "unknown attribute");
+ }
+}
+/*-- 23.04.2008 10:46:14---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void OLEHandler::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.get())
+ {
+ pProperties->resolve(*this);
+ }
+ }
+ break;
+ case NS_ooxml::LN_wrap_wrap:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if ( pProperties.get( ) )
+ {
+ WrapHandlerPtr pHandler( new WrapHandler );
+ pProperties->resolve( *pHandler );
+
+ m_nWrapMode = pHandler->getWrapMode( );
+
+ try
+ {
+ uno::Reference< beans::XPropertySet > xShapeProps( m_xShape, uno::UNO_QUERY_THROW );
+ PropertyNameSupplier& rNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ xShapeProps->setPropertyValue(
+ rNameSupplier.GetName( PROP_SURROUND ),
+ uno::makeAny( m_nWrapMode ) );
+ }
+ catch( const uno::Exception& e )
+ {
+#if DEBUG
+ clog << "Exception in OLE Handler: ";
+ clog << rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr( ) << endl;
+#endif
+ }
+ }
+ }
+ break;
+ default:
+ {
+ OSL_ENSURE( false, "unknown attribute");
+ }
+ }
+}
+/*-- 23.04.2008 11:15:19---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::rtl::OUString OLEHandler::copyOLEOStream( uno::Reference< text::XTextDocument > xTextDocument )
+{
+ ::rtl::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(
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("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 );
+ ::rtl::OUString aURL(RTL_CONSTASCII_USTRINGPARAM("Obj" ));
+ aURL += ::rtl::OUString::valueOf( 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;
+ }
+ }
+
+ static const ::rtl::OUString sProtocol = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.EmbeddedObject:" ));
+ ::rtl::OUString aPersistName( xEmbeddedResolver->resolveEmbeddedObjectURL( aURL ) );
+ sRet = aPersistName.copy( sProtocol.getLength() );
+
+ }
+ uno::Reference< lang::XComponent > xComp( xEmbeddedResolver, uno::UNO_QUERY_THROW );
+ xComp->dispose();
+ }
+ catch( const uno::Exception& rEx)
+ {
+ (void)rEx;
+ OSL_ENSURE(false, "exception in OLEHandler::createOLEObject");
+ }
+ return sRet;
+}
+
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/OLEHandler.hxx b/writerfilter/source/dmapper/OLEHandler.hxx
new file mode 100644
index 000000000000..f9059fb6a35a
--- /dev/null
+++ b/writerfilter/source/dmapper/OLEHandler.hxx
@@ -0,0 +1,107 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_OLEHANDLER_HXX
+#define INCLUDED_OLEHANDLER_HXX
+
+#ifndef INCLUDED_WRITERFILTERDLLAPI_H
+#include <WriterFilterDllApi.hxx>
+#endif
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <boost/shared_ptr.hpp>
+#include <com/sun/star/awt/Size.hpp>
+#include <com/sun/star/awt/Point.hpp>
+
+#include <com/sun/star/drawing/XShape.hpp>
+
+namespace com{ namespace sun{ namespace star{
+ namespace embed{
+ class XEmbeddedObject;
+ }
+ namespace graphic{
+ class XGraphic;
+ }
+ namespace io{
+ class XInputStream;
+ }
+ namespace text{
+ class XTextDocument;
+ }
+ namespace uno{
+ class XComponentContext;
+ }
+}}}
+namespace writerfilter {
+namespace dmapper
+{
+//class PropertyMap;
+/** Handler for OLE objects
+ */
+class WRITERFILTER_DLLPRIVATE OLEHandler : public Properties
+{
+ ::rtl::OUString m_sObjectType;
+ ::rtl::OUString m_sProgId;
+ ::rtl::OUString m_sShapeId;
+ ::rtl::OUString m_sDrawAspect;
+ ::rtl::OUString m_sObjectId;
+ ::rtl::OUString m_sr_id;
+
+ sal_Int32 m_nDxaOrig;
+ sal_Int32 m_nDyaOrig;
+ sal_Int32 m_nWrapMode;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > m_xShape;
+
+ ::com::sun::star::awt::Size m_aShapeSize;
+ ::com::sun::star::awt::Point m_aShapePosition;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic > m_xReplacement;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > m_xInputStream;
+public:
+ OLEHandler();
+ virtual ~OLEHandler();
+
+ // Properties
+ virtual void attribute(Id Name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ inline ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > getShape( ) { return m_xShape; };
+
+ inline bool isOLEObject( ) { return m_xInputStream.is( ); };
+
+ ::rtl::OUString copyOLEOStream( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextDocument > xTextDocument );
+
+ ::com::sun::star::awt::Size getSize() const { return m_aShapeSize;}
+ ::com::sun::star::awt::Point getPosition() const { return m_aShapePosition;}
+ ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic >
+ getReplacement() const { return m_xReplacement; }
+
+};
+typedef boost::shared_ptr< OLEHandler > OLEHandlerPtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/PageBordersHandler.cxx b/writerfilter/source/dmapper/PageBordersHandler.cxx
new file mode 100644
index 000000000000..725502843982
--- /dev/null
+++ b/writerfilter/source/dmapper/PageBordersHandler.cxx
@@ -0,0 +1,121 @@
+#include "PageBordersHandler.hxx"
+
+#include <ooxml/resourceids.hxx>
+
+namespace writerfilter {
+namespace dmapper {
+
+_PgBorder::_PgBorder( ) :
+ m_nDistance( 0 ),
+ m_ePos( BORDER_RIGHT )
+{
+}
+
+_PgBorder::~_PgBorder( )
+{
+}
+
+PageBordersHandler::PageBordersHandler( ) :
+ m_nDisplay( 0 ),
+ m_nOffset( 0 )
+{
+}
+
+PageBordersHandler::~PageBordersHandler( )
+{
+}
+
+void PageBordersHandler::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_wordprocessingml_ST_PageBorderDisplay_allPages:
+ m_nDisplay = 0;
+ break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_PageBorderDisplay_firstPage:
+ m_nDisplay = 1;
+ break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_PageBorderDisplay_notFirstPage:
+ m_nDisplay = 2;
+ break;
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_PageBorders_offsetFrom:
+ {
+ switch ( nIntValue )
+ {
+ default:
+ case NS_ooxml::LN_Value_wordprocessingml_ST_PageBorderOffset_page:
+ m_nOffset = 1;
+ break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_PageBorderOffset_text:
+ m_nOffset = 0;
+ break;
+ }
+ }
+ break;
+ default:;
+ }
+}
+
+void PageBordersHandler::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.get())
+ {
+ BorderHandlerPtr pBorderHandler( new 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;
+ m_aBorders.push_back( aPgBorder );
+ }
+ }
+ break;
+ default:;
+ }
+}
+
+void PageBordersHandler::SetBorders( SectionPropertyMap* pSectContext )
+{
+ for ( int i = 0, length = m_aBorders.size( ); i < length; i++ )
+ {
+ _PgBorder aBorder = m_aBorders[i];
+ pSectContext->SetBorder( aBorder.m_ePos, aBorder.m_nDistance, aBorder.m_rLine );
+ }
+}
+
+} }
diff --git a/writerfilter/source/dmapper/PageBordersHandler.hxx b/writerfilter/source/dmapper/PageBordersHandler.hxx
new file mode 100644
index 000000000000..327ccfc4f8d6
--- /dev/null
+++ b/writerfilter/source/dmapper/PageBordersHandler.hxx
@@ -0,0 +1,57 @@
+#ifndef INCLUDED_PAGEBORDERSHANDLER_HXX
+#define INCLUDED_PAGEBORDERSHANDLER_HXX
+
+#include "BorderHandler.hxx"
+#include "PropertyMap.hxx"
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <boost/shared_ptr.hpp>
+
+#include <com/sun/star/table/BorderLine.hpp>
+
+#include <vector>
+
+
+namespace writerfilter {
+namespace dmapper {
+
+class _PgBorder
+{
+public:
+ com::sun::star::table::BorderLine m_rLine;
+ sal_Int32 m_nDistance;
+ BorderPosition m_ePos;
+
+ _PgBorder( );
+ ~_PgBorder( );
+};
+
+class WRITERFILTER_DLLPRIVATE PageBordersHandler : public Properties
+{
+private:
+
+ // See implementation of SectionPropertyMap::ApplyBorderToPageStyles
+ sal_Int32 m_nDisplay;
+ sal_Int32 m_nOffset;
+ vector<_PgBorder> m_aBorders;
+
+public:
+ PageBordersHandler( );
+ ~PageBordersHandler( );
+
+ // Properties
+ virtual void attribute( Id eName, Value& rVal );
+ virtual void sprm( Sprm& rSprm );
+
+ inline sal_Int32 GetDisplayOffset( )
+ {
+ return ( m_nOffset << 5 ) + m_nDisplay;
+ };
+ void SetBorders( SectionPropertyMap* pSectContext );
+};
+typedef boost::shared_ptr< PageBordersHandler > PageBordersHandlerPtr;
+
+} }
+
+#endif
diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx
new file mode 100644
index 000000000000..896bc1a06e94
--- /dev/null
+++ b/writerfilter/source/dmapper/PropertyIds.cxx
@@ -0,0 +1,345 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <PropertyIds.hxx>
+#include <rtl/ustring.hxx>
+#include <map>
+
+namespace writerfilter {
+namespace dmapper{
+
+typedef ::std::map< PropertyIds, ::rtl::OUString> PropertyNameMap_t;
+
+struct PropertyNameSupplier_Impl
+{
+ PropertyNameMap_t aNameMap;
+};
+
+/*-- 14.06.2006 11:01:31---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+PropertyNameSupplier::PropertyNameSupplier() :
+ m_pImpl(new PropertyNameSupplier_Impl)
+{
+}
+/*-- 14.06.2006 11:01:32---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+PropertyNameSupplier::~PropertyNameSupplier()
+{
+ delete m_pImpl;
+}
+/*-- 14.06.2006 11:01:32---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+const rtl::OUString& PropertyNameSupplier::GetName( PropertyIds eId ) const
+{
+ PropertyNameMap_t::iterator aIt = m_pImpl->aNameMap.find(eId);
+ if(aIt == m_pImpl->aNameMap.end())
+ {
+ ::rtl::OUString sName;
+ switch(eId)
+ {
+ case PROP_CHAR_WEIGHT: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharWeight")); break;
+ case PROP_CHAR_POSTURE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharPosture")); break;
+ case PROP_CHAR_STRIKEOUT: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharStrikeout")); break;
+ case PROP_CHAR_CONTOURED: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharContoured")); break;
+ case PROP_CHAR_SHADOWED: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharShadowed")); break;
+ case PROP_CHAR_CASE_MAP: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharCaseMap")); break;
+ case PROP_CHAR_COLOR: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharColor")); break;
+ case PROP_CHAR_RELIEF: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharRelief")); break;
+ case PROP_CHAR_UNDERLINE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharUnderline")); break;
+ case PROP_CHAR_UNDERLINE_COLOR: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharUnderlineColor")); break;
+ case PROP_CHAR_UNDERLINE_HAS_COLOR: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharUnderlineHasColor")); break;
+ case PROP_CHAR_WORD_MODE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharWordMode")); break;
+ case PROP_CHAR_ESCAPEMENT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharEscapement")); break;
+ case PROP_CHAR_ESCAPEMENT_HEIGHT: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharEscapementHeight")); break;
+ case PROP_CHAR_HEIGHT: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharHeight")); break;
+ case PROP_CHAR_HEIGHT_COMPLEX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharHeightComplex")); break;
+ case PROP_CHAR_LOCALE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharLocale")); break;
+ case PROP_CHAR_LOCALE_ASIAN: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharLocaleAsian")); break;
+ case PROP_CHAR_LOCALE_COMPLEX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharLocaleComplex")); break;
+ case PROP_CHAR_WEIGHT_COMPLEX : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharWeightComplex")); break;
+ case PROP_CHAR_POSTURE_COMPLEX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharPostureComplex")); break;
+ case PROP_CHAR_CHAR_KERNING: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharKerning")); break;
+ case PROP_CHAR_AUTO_KERNING: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharAutoKerning")); break;
+ case PROP_CHAR_SCALE_WIDTH: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharScaleWidth")); break;
+ case PROP_CHAR_STYLE_NAME: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharStyleName")); break;
+ case PROP_CHAR_FONT_NAME: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontName")); break;
+ case PROP_CHAR_FONT_STYLE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontStyle")); break;
+ case PROP_CHAR_FONT_FAMILY: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontFamily")); break;
+ case PROP_CHAR_FONT_CHAR_SET: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontCharSet")); break;
+ case PROP_CHAR_FONT_PITCH: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontPitch")); break;
+ case PROP_CHAR_FONT_NAME_ASIAN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontNameAsian")); break;
+ case PROP_CHAR_HEIGHT_ASIAN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharHeightAsian")); break;
+ case PROP_CHAR_FONT_STYLE_ASIAN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontStyleAsian")); break;
+ case PROP_CHAR_FONT_FAMILY_ASIAN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontFamilyAsian")); break;
+ case PROP_CHAR_FONT_CHAR_SET_ASIAN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontCharSetAsian")); break;
+ case PROP_CHAR_FONT_PITCH_ASIAN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontPitchAsian")); break;
+ case PROP_CHAR_FONT_NAME_COMPLEX : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontNameComplex")); break;
+ case PROP_CHAR_FONT_STYLE_COMPLEX : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontStyleComplex")); break;
+ case PROP_CHAR_FONT_FAMILY_COMPLEX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontFamilyComplex")); break;
+ case PROP_CHAR_FONT_CHAR_SET_COMPLEX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontCharSetComplex")); break;
+ case PROP_CHAR_FONT_PITCH_COMPLEX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontPitchComplex")); break;
+ case PROP_CHAR_HIDDEN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharHidden")); break;
+ case PROP_CHAR_WEIGHT_ASIAN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharWeightAsian")); break;
+ case PROP_CHAR_POSTURE_ASIAN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharPostureAsian")); break;
+ case PROP_CHAR_BACK_COLOR: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharBackColor")); break;
+ case PROP_CHAR_EMPHASIS: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharEmphasis")); break;
+ case PROP_CHAR_COMBINE_IS_ON: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharCombineIsOn")); break;
+ case PROP_CHAR_COMBINE_PREFIX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharCombinePrefix")); break;
+ case PROP_CHAR_COMBINE_SUFFIX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharCombineSuffix")); break;
+ case PROP_CHAR_ROTATION: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharRotation")); break;
+ case PROP_CHAR_ROTATION_IS_FIT_TO_LINE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharRotationIsFitToLine")); break;
+ case PROP_CHAR_FLASH: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFlash")); break;
+// case PROP_CHAR_: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Char")); break;
+// case PROP_CHAR_: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Char")); break;
+// case PROP_CHAR_: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Char")); break;
+
+ case PROP_PARA_STYLE_NAME: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaStyleName")); break;
+ case PROP_PARA_ADJUST: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaAdjust")); break;
+ case PROP_PARA_LAST_LINE_ADJUST: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaLastLineAdjust")); break;
+ case PROP_PARA_RIGHT_MARGIN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaRightMargin")); break;
+ case PROP_PARA_LEFT_MARGIN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaLeftMargin")); break;
+ case PROP_PARA_FIRST_LINE_INDENT: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaFirstLineIndent")); break;
+ case PROP_PARA_KEEP_TOGETHER: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaKeepTogether")); break;
+ case PROP_PARA_TOP_MARGIN: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaTopMargin")); break;
+ case PROP_PARA_BOTTOM_MARGIN: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaBottomMargin")); break;
+ case PROP_PARA_IS_HYPHENATION: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaIsHyphenation")); break;
+ case PROP_PARA_LINE_NUMBER_COUNT: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaLineNumberCount")); break;
+ case PROP_PARA_IS_HANGING_PUNCTUATION: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaIsHangingPunctuation")); break;
+ case PROP_PARA_LINE_SPACING: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaLineSpacing")); break;
+ case PROP_PARA_TAB_STOPS: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaTabStops")); break;
+ case PROP_PARA_WIDOWS: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaWidows")); break;
+ case PROP_PARA_ORPHANS: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaOrphans")); break;
+ case PROP_PARA_LINE_NUMBER_START_VALUE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaLineNumberStartValue")); break;
+// case PROP_PARA_: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Para")); break;
+// case PROP_PARA_: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Para")); break;
+// case PROP_PARA_: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Para")); break;
+// case PROP_PARA_: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Para")); break;
+ case PROP_NUMBERING_LEVEL: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NumberingLevel")); break;
+ case PROP_NUMBERING_RULES: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NumberingRules")); break;
+ case PROP_NUMBERING_TYPE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NumberingType")); break;
+ case PROP_START_WITH: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("StartWith")); break;
+ case PROP_ADJUST: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Adjust")); break;
+ case PROP_PARENT_NUMBERING: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParentNumbering")); break;
+ case PROP_RIGHT_MARGIN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RightMargin")); break;
+ case PROP_LEFT_MARGIN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LeftMargin")); break;
+ case PROP_TOP_MARGIN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TopMargin")); break;
+ case PROP_BOTTOM_MARGIN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BottomMargin")); break;
+ case PROP_FIRST_LINE_OFFSET: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FirstLineOffset")); break;
+ case PROP_LEFT_BORDER : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LeftBorder"));break;
+ case PROP_RIGHT_BORDER : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RightBorder"));break;
+ case PROP_TOP_BORDER : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TopBorder"));break;
+ case PROP_BOTTOM_BORDER : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BottomBorder"));break;
+ case PROP_TABLE_BORDER : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TableBorder"));break;
+ case PROP_LEFT_BORDER_DISTANCE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LeftBorderDistance")); break;
+ case PROP_RIGHT_BORDER_DISTANCE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RightBorderDistance")); break;
+ case PROP_TOP_BORDER_DISTANCE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TopBorderDistance"));break;
+ case PROP_BOTTOM_BORDER_DISTANCE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BottomBorderDistance")); break;
+ case PROP_CURRENT_PRESENTATION : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CurrentPresentation")); break;
+ case PROP_IS_FIXED : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsFixed")); break;
+ case PROP_SUB_TYPE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SubType")); break;
+ case PROP_FILE_FORMAT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FileFormat")); break;
+ case PROP_HYPER_LINK_U_R_L : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HyperLinkURL")); break;
+ case PROP_NUMBER_FORMAT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NumberFormat")); break;
+ case PROP_NAME : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Name")); break;
+ case PROP_IS_INPUT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsInput")); break;
+ case PROP_HINT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Hint")); break;
+ case PROP_FULL_NAME : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FullName")); break;
+ case PROP_KEYWORDS : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Keywords")); break;
+ case PROP_DESCRIPTION : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Description")); break;
+ case PROP_MACRO_NAME : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MacroName")); break;
+ case PROP_SUBJECT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Subject")); break;
+ case PROP_USER_DATA_TYPE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("UserDataType")); break;
+ case PROP_TITLE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Title")); break;
+ case PROP_CONTENT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Content")); break;
+ case PROP_DATA_COLUMN_NAME : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DataColumnName")); break;
+ case PROP_INPUT_STREAM : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("InputStream")); break;
+ case PROP_GRAPHIC : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Graphic")); break;
+ case PROP_ANCHOR_TYPE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AnchorType")); break;
+ case PROP_SIZE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Size")); break;
+ case PROP_HORI_ORIENT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HoriOrient")); break;
+ case PROP_HORI_ORIENT_POSITION : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HoriOrientPosition")); break;
+ case PROP_HORI_ORIENT_RELATION : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HoriOrientRelation")); break;
+ case PROP_VERT_ORIENT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VertOrient")); break;
+ case PROP_VERT_ORIENT_POSITION : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VertOrientPosition")); break;
+ case PROP_VERT_ORIENT_RELATION : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VertOrientRelation")); break;
+ case PROP_GRAPHIC_CROP : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GraphicCrop")); break;
+ case PROP_SIZE100th_M_M : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Size100thMM")); break;
+ case PROP_SIZE_PIXEL : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SizePixel")); break;
+ case PROP_SURROUND : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Surround")); break;
+ case PROP_SURROUND_CONTOUR : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SurroundContour")); break;
+ case PROP_ADJUST_CONTRAST : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AdjustContrast")); break;
+ case PROP_ADJUST_LUMINANCE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AdjustLuminance")); break;
+ case PROP_GRAPHIC_COLOR_MODE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GraphicColorMode")); break;
+ case PROP_GAMMA : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Gamma")); break;
+ case PROP_HORI_MIRRORED_ON_EVEN_PAGES: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HoriMirroredOnEvenPages")); break;
+ case PROP_HORI_MIRRORED_ON_ODD_PAGES : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HoriMirroredOnOddPages")); break;
+ case PROP_VERT_MIRRORED : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VertMirrored")); break;
+ case PROP_CONTOUR_OUTSIDE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ContourOutside")); break;
+ case PROP_CONTOUR_POLY_POLYGON : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ContourPolyPolygon")); break;
+ case PROP_PAGE_TOGGLE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PageToggle")); break;
+ case PROP_BACK_COLOR : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BackColor")); break;
+ case PROP_ALTERNATIVE_TEXT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AlternativeText")); break;
+ case PROP_HEADER_TEXT_LEFT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderTextLeft")); break;
+ case PROP_HEADER_TEXT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderText")); break;
+ case PROP_HEADER_IS_SHARED : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderIsShared")); break;
+ case PROP_HEADER_IS_ON : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderIsOn")); break;
+ case PROP_FOOTER_TEXT_LEFT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterTextLeft")); break;
+ case PROP_FOOTER_TEXT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterText")); break;
+ case PROP_FOOTER_IS_SHARED : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterIsShared")); break;
+ case PROP_FOOTER_IS_ON : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterIsOn")); break;
+ case PROP_WIDTH : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Width")); break;
+ case PROP_HEIGHT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Height")); break;
+ case PROP_SEPARATOR_LINE_IS_ON : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SeparatorLineIsOn")); break;
+ case PROP_TEXT_COLUMNS : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TextColumns")); break;
+ case PROP_AUTOMATIC_DISTANCE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AutomaticDistance")); break;
+ case PROP_IS_LANDSCAPE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsLandscape")); break;
+ case PROP_PRINTER_PAPER_TRAY_INDEX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PrinterPaperTrayIndex")); break;
+ case PROP_FIRST_PAGE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("First Page")); break;
+ case PROP_DEFAULT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Default")); break;
+ case PROP_PAGE_DESC_NAME : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PageDescName")); break;
+ case PROP_PAGE_NUMBER_OFFSET: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PageNumberOffset")); break;
+ case PROP_BREAK_TYPE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BreakType")); break;
+ case PROP_FOOTER_IS_DYNAMIC_HEIGHT: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterIsDynamicHeight")); break;
+ case PROP_FOOTER_DYNAMIC_SPACING: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterDynamicSpacing")); break;
+ case PROP_FOOTER_HEIGHT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterHeight")); break;
+ case PROP_FOOTER_BODY_DISTANCE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterBodyDistance")); break;
+ case PROP_HEADER_IS_DYNAMIC_HEIGHT: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderIsDynamicHeight")); break;
+ case PROP_HEADER_DYNAMIC_SPACING: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderDynamicSpacing")); break;
+ case PROP_HEADER_HEIGHT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderHeight")); break;
+ case PROP_HEADER_BODY_DISTANCE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderBodyDistance")); break;
+ case PROP_WRITING_MODE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("WritingMode")); break;
+ case PROP_GRID_MODE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GridMode")); break;
+ case PROP_GRID_DISPLAY : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GridDisplay")); break;
+ case PROP_GRID_PRINT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GridPrint")); break;
+ case PROP_ADD_EXTERNAL_LEADING : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AddExternalLeading")); break;
+ case PROP_GRID_LINES : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GridLines")); break;
+ case PROP_GRID_BASE_HEIGHT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GridBaseHeight")); break;
+ case PROP_GRID_RUBY_HEIGHT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GridRubyHeight")); break;
+ case PROP_IS_ON : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsOn")); break;
+ case PROP_RESTART_AT_EACH_PAGE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RestartAtEachPage")); break;
+ case PROP_COUNT_EMPTY_LINES : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CountEmptyLines")); break;
+ case PROP_COUNT_LINES_IN_FRAMES : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CountLinesInFrames")); break;
+ case PROP_INTERVAL : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Interval")); break;
+ case PROP_DISTANCE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Distance")); break;
+ case PROP_NUMBER_POSITION : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NumberPosition")); break;
+ case PROP_LEVEL : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Level")); break;
+ case PROP_LEVEL_PARAGRAPH_STYLES : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LevelParagraphStyles")); break;
+ case PROP_LEVEL_FORMAT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LevelFormat")); break;
+ case PROP_TOKEN_TYPE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TokenType")); break;
+ case PROP_TOKEN_HYPERLINK_START : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TokenHyperlinkStart")); break;
+ case PROP_TOKEN_HYPERLINK_END : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TokenHyperlinkEnd")); break;
+ case PROP_TOKEN_CHAPTER_INFO : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TokenChapterInfo")); break;
+ case PROP_CHAPTER_FORMAT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ChapterFormat")); break;
+ case PROP_TOKEN_TEXT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TokenText")); break;
+ case PROP_TEXT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Text")); break;
+ case PROP_CREATE_FROM_OUTLINE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CreateFromOutline")); break;
+ case PROP_CREATE_FROM_MARKS : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CreateFromMarks")); break;
+ case PROP_STANDARD : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Standard")); break;
+ case PROP_IS_SPLIT_ALLOWED : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsSplitAllowed")); break;
+ case META_PROP_VERTICAL_BORDER : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VerticalBorder")); break;
+ case META_PROP_HORIZONTAL_BORDER : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HorizontalBorder")); break;
+ case PROP_HEADER_ROW_COUNT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderRowCount")); break;
+ case PROP_IS_AUTO_HEIGHT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsAutoHeight")); break;
+ case PROP_SIZE_TYPE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SizeType")); break;
+ case PROP_TABLE_COLUMN_SEPARATORS: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TableColumnSeparators")); break;
+ case META_PROP_TABLE_STYLE_NAME : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TableStyleName")); break;
+ case PROP_REDLINE_AUTHOR : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RedlineAuthor")); break;
+ case PROP_REDLINE_DATE_TIME : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RedlineDateTime")); break;
+ case PROP_REDLINE_COMMENT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RedlineComment")); break;
+ case PROP_REDLINE_TYPE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RedlineType")); break;
+ case PROP_REDLINE_SUCCESSOR_DATA: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RedlineSuccessorData")); break;
+ case PROP_REDLINE_IDENTIFIER : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RedlineIdentifier")); break;
+ case PROP_SIZE_PROTECTED : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SizeProtected")); break;
+ case PROP_POSITION_PROTECTED : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PositionProtected")); break;
+ case PROP_OPAQUE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Opaque")); break;
+ case PROP_VERTICAL_MERGE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VerticalMerge")); break;
+ case PROP_BULLET_CHAR : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BulletChar")); break;
+ case PROP_BULLET_FONT_NAME : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BulletFontName")); break;
+ case PROP_PARA_BACK_COLOR : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaBackColor")); break;
+ case PROP_TABS_RELATIVE_TO_INDENT: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TabsRelativeToIndent")); break;
+ case PROP_PREFIX : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Prefix")); break;
+ case PROP_SUFFIX : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Suffix")); break;
+ case PROP_CREATE_FROM_LEVEL_PARAGRAPH_STYLES: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CreateFromLevelParagraphStyles")); break;
+ case PROP_DROP_CAP_FORMAT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DropCapFormat")); break;
+ case PROP_REFERENCE_FIELD_PART : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ReferenceFieldPart")); break;
+ case PROP_SOURCE_NAME: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SourceName")); break;
+ case PROP_REFERENCE_FIELD_SOURCE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ReferenceFieldSource")); break;
+ case PROP_WIDTH_TYPE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("WidthType")); break;
+ case PROP_TEXT_RANGE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TextRange")); break;
+ case PROP_SERVICE_CHAR_STYLE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.style.CharacterStyle")); break;
+ case PROP_SERVICE_PARA_STYLE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.style.ParagraphStyle")); break;
+ case PROP_CHARACTER_STYLES : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharacterStyles")); break;
+ case PROP_PARAGRAPH_STYLES : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParagraphStyles")); break;
+ case PROP_TABLE_BORDER_DISTANCES: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TableBorderDistances")); break;
+ case META_PROP_CELL_MAR_TOP : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MetaPropCellMarTop")); break;
+ case META_PROP_CELL_MAR_BOTTOM : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MetaPropCellMarBottom")); break;
+ case META_PROP_CELL_MAR_LEFT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MetaPropCellMarLeft")); break;
+ case META_PROP_CELL_MAR_RIGHT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MetaPropCellMarRight")); break;
+ case PROP_START_AT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("StartAt")); break;
+ case PROP_ADD_PARA_TABLE_SPACING : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AddParaTableSpacing")); break;
+ case PROP_CHAR_PROP_HEIGHT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharPropHeight")); break;
+ case PROP_CHAR_PROP_HEIGHT_ASIAN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharPropHeightAsian")); break;
+ case PROP_CHAR_PROP_HEIGHT_COMPLEX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharPropHeightComplex")); break;
+ case PROP_FORMAT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Format")); break;
+ case PROP_INSERT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Insert")); break;
+ case PROP_DELETE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Delete")); break;
+ case PROP_STREAM_NAME: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("StreamName")); break;
+ case PROP_BITMAP : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Bitmap")); break;
+ case PROP_IS_DATE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsDate")); break;
+ case PROP_CNF_STYLE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CnfStyle")); break;
+ case PROP_INDENT_AT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IndentAt")); break;
+ case PROP_FIRST_LINE_INDENT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FirstLineIndent")); break;
+ case PROP_NUMBERING_STYLE_NAME : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NumberingStyleName")); break;
+ case PROP_LISTTAB_STOP_POSITION : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ListtabStopPosition")); break;
+ case PROP_POSITION_AND_SPACE_MODE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PositionAndSpaceMode")); break;
+// case : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
+// case : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
+// case : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
+// case : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
+// case : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
+// case : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
+// case : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
+// case : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
+// case : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
+ }
+ ::std::pair<PropertyNameMap_t::iterator,bool> aInsertIt =
+ m_pImpl->aNameMap.insert( PropertyNameMap_t::value_type( eId, sName ));
+ if(aInsertIt.second)
+ aIt = aInsertIt.first;
+ }
+ return aIt->second;
+}
+PropertyNameSupplier& PropertyNameSupplier::GetPropertyNameSupplier()
+{
+ static PropertyNameSupplier aNameSupplier;
+ return aNameSupplier;
+}
+
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx
new file mode 100644
index 000000000000..461373c23a45
--- /dev/null
+++ b/writerfilter/source/dmapper/PropertyIds.hxx
@@ -0,0 +1,298 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_DMAPPER_PROPERTYIDS_HXX
+#define INCLUDED_DMAPPER_PROPERTYIDS_HXX
+
+namespace rtl{ class OUString;}
+
+namespace writerfilter {
+namespace dmapper{
+enum PropertyIds
+{
+ PROP_ID_START = 1
+ /* 1*/ ,PROP_CHAR_WEIGHT = PROP_ID_START
+ /* 2*/ ,PROP_CHAR_POSTURE
+ /* 3*/ ,PROP_CHAR_STRIKEOUT
+ /* 4*/ ,PROP_CHAR_CONTOURED
+ /* 5*/ ,PROP_CHAR_SHADOWED
+ /* 6*/ ,PROP_CHAR_CASE_MAP
+ /* 7*/ ,PROP_CHAR_COLOR
+ /* 8*/ ,PROP_CHAR_RELIEF
+ /* 9*/ ,PROP_CHAR_UNDERLINE
+ /*10*/ ,PROP_CHAR_WORD_MODE
+ /*11*/ ,PROP_CHAR_ESCAPEMENT
+ /*12*/ ,PROP_CHAR_ESCAPEMENT_HEIGHT
+ /*13*/ ,PROP_CHAR_HEIGHT
+ /*14*/ ,PROP_CHAR_HEIGHT_COMPLEX
+ /*15*/ ,PROP_CHAR_LOCALE
+ /*16*/ ,PROP_CHAR_LOCALE_ASIAN
+ /*17*/ ,PROP_CHAR_WEIGHT_COMPLEX
+ /*18*/ ,PROP_CHAR_POSTURE_COMPLEX
+ /*19*/ ,PROP_CHAR_AUTO_KERNING
+ /*20*/ ,PROP_CHAR_CHAR_KERNING
+ /*21*/ ,PROP_CHAR_SCALE_WIDTH
+ /*22*/ ,PROP_CHAR_LOCALE_COMPLEX
+ /*23*/ ,PROP_CHAR_UNDERLINE_COLOR
+/*24*/ , PROP_CHAR_UNDERLINE_HAS_COLOR
+/*25*/ , PROP_CHAR_FONT_NAME
+/*26*/ , PROP_CHAR_FONT_STYLE
+/*27*/ , PROP_CHAR_FONT_FAMILY
+/*28*/ , PROP_CHAR_FONT_CHAR_SET
+/*29*/ , PROP_CHAR_FONT_PITCH
+/*30*/ , PROP_CHAR_FONT_NAME_ASIAN
+/*31*/ , PROP_CHAR_HEIGHT_ASIAN
+/*32*/ , PROP_CHAR_FONT_STYLE_ASIAN
+/*33*/ , PROP_CHAR_FONT_FAMILY_ASIAN
+/*34*/ , PROP_CHAR_FONT_CHAR_SET_ASIAN
+/*35*/ , PROP_CHAR_FONT_PITCH_ASIAN
+/*36*/ , PROP_CHAR_FONT_NAME_COMPLEX
+/*37*/ , PROP_CHAR_FONT_STYLE_COMPLEX
+/*38*/ , PROP_CHAR_FONT_FAMILY_COMPLEX
+/*39*/ , PROP_CHAR_FONT_CHAR_SET_COMPLEX
+/*40*/ , PROP_CHAR_FONT_PITCH_COMPLEX
+/*41*/ , PROP_CHAR_HIDDEN
+/*42*/ , PROP_CHAR_WEIGHT_ASIAN
+/*43*/ , PROP_CHAR_POSTURE_ASIAN
+/*44*/ , PROP_PARA_STYLE_NAME
+/*45*/ , PROP_CHAR_STYLE_NAME
+/*46*/ , PROP_PARA_ADJUST
+/*47*/ , PROP_PARA_LAST_LINE_ADJUST
+/*48*/ , PROP_PARA_RIGHT_MARGIN
+/*49*/ , PROP_PARA_LEFT_MARGIN
+/*50*/ , PROP_PARA_FIRST_LINE_INDENT
+/*51*/ , PROP_PARA_KEEP_TOGETHER
+/*52*/ , PROP_PARA_TOP_MARGIN
+/*53*/ , PROP_PARA_BOTTOM_MARGIN
+/*54*/ , PROP_PARA_IS_HYPHENATION
+/*55*/ , PROP_PARA_LINE_NUMBER_COUNT
+/*56*/ , PROP_PARA_IS_HANGING_PUNCTUATION
+/*57*/ , PROP_PARA_LINE_SPACING
+/*58*/ , PROP_PARA_TAB_STOPS
+/*59*/ , PROP_PARA_WIDOWS
+/*60*/ , PROP_PARA_ORPHANS
+/*61*/ , PROP_PARA_LINE_NUMBER_START_VALUE
+/*62*/ , PROP_NUMBERING_LEVEL
+/*63*/ , PROP_NUMBERING_RULES
+/*64*/ , PROP_NUMBERING_TYPE
+/*65*/ , PROP_START_WITH
+/*66*/ , PROP_ADJUST
+/*67*/ , PROP_PARENT_NUMBERING
+/*68*/ , PROP_LEFT_MARGIN
+/*69*/ , PROP_RIGHT_MARGIN
+/*70*/ , PROP_TOP_MARGIN
+/*71*/ , PROP_BOTTOM_MARGIN
+/*72*/ , PROP_FIRST_LINE_OFFSET
+/*73*/ , PROP_LEFT_BORDER
+/*74*/ , PROP_RIGHT_BORDER
+/*75*/ , PROP_TOP_BORDER
+/*76*/ , PROP_BOTTOM_BORDER
+/*77*/ , PROP_TABLE_BORDER
+/*78*/ , PROP_LEFT_BORDER_DISTANCE
+/*79*/ , PROP_RIGHT_BORDER_DISTANCE
+/*80*/ , PROP_TOP_BORDER_DISTANCE
+/*81*/ , PROP_BOTTOM_BORDER_DISTANCE
+/*82*/ , PROP_CURRENT_PRESENTATION
+/*83*/ , PROP_IS_FIXED
+/*84*/ , PROP_SUB_TYPE
+/*85*/ , PROP_FILE_FORMAT
+/*86*/ , PROP_HYPER_LINK_U_R_L
+/*87*/ , PROP_NUMBER_FORMAT
+/*88*/ , PROP_NAME
+/*89*/ , PROP_IS_INPUT
+/*90*/ , PROP_HINT
+/*91*/ , PROP_FULL_NAME
+/*92*/ , PROP_KEYWORDS
+/*93*/ , PROP_DESCRIPTION
+/*94*/ , PROP_MACRO_NAME
+/*95*/ , PROP_SUBJECT
+/*96*/ , PROP_USER_DATA_TYPE
+/*97*/ , PROP_TITLE
+/*98*/ , PROP_CONTENT
+/*99*/ , PROP_DATA_COLUMN_NAME
+/*100*/, PROP_INPUT_STREAM
+/*101*/, PROP_GRAPHIC
+/*102*/, PROP_ANCHOR_TYPE
+/*103*/ ,PROP_SIZE
+/*104*/ ,PROP_HORI_ORIENT
+/*105*/ ,PROP_HORI_ORIENT_POSITION
+/*106*/ ,PROP_HORI_ORIENT_RELATION
+/*107*/ ,PROP_VERT_ORIENT
+/*108*/ ,PROP_VERT_ORIENT_POSITION
+/*109*/ ,PROP_VERT_ORIENT_RELATION
+/*110*/ ,PROP_GRAPHIC_CROP
+/*111*/ ,PROP_SIZE100th_M_M
+/*112*/ ,PROP_SIZE_PIXEL
+/*113*/ ,PROP_SURROUND
+/*114*/ ,PROP_SURROUND_CONTOUR
+/*115*/ ,PROP_ADJUST_CONTRAST
+/*116*/ ,PROP_ADJUST_LUMINANCE
+/*117*/ ,PROP_GRAPHIC_COLOR_MODE
+/*118*/ ,PROP_GAMMA
+/*119*/ ,PROP_HORI_MIRRORED_ON_EVEN_PAGES
+/*120*/ ,PROP_HORI_MIRRORED_ON_ODD_PAGES
+/*121*/ ,PROP_VERT_MIRRORED
+/*122*/ ,PROP_CONTOUR_OUTSIDE
+/*123*/ ,PROP_CONTOUR_POLY_POLYGON
+/*124*/ ,PROP_PAGE_TOGGLE
+/*125*/ ,PROP_BACK_COLOR
+/*126*/ ,PROP_ALTERNATIVE_TEXT
+/*127*/ ,PROP_HEADER_TEXT_LEFT
+/*128*/ ,PROP_HEADER_TEXT
+/*129*/ ,PROP_HEADER_IS_SHARED
+/*130*/ ,PROP_HEADER_IS_ON
+/*131*/ ,PROP_FOOTER_TEXT_LEFT
+/*132*/ ,PROP_FOOTER_TEXT
+/*133*/ ,PROP_FOOTER_IS_SHARED
+/*134*/ ,PROP_FOOTER_IS_ON
+/*135*/ ,PROP_WIDTH
+/*136*/ ,PROP_HEIGHT
+/*137*/ ,PROP_SEPARATOR_LINE_IS_ON
+/*138*/ ,PROP_TEXT_COLUMNS
+/*139*/ ,PROP_AUTOMATIC_DISTANCE
+/*140*/ ,PROP_IS_LANDSCAPE
+/*141*/ ,PROP_PRINTER_PAPER_TRAY_INDEX
+/*142*/ ,PROP_FIRST_PAGE
+/*143*/ ,PROP_DEFAULT
+/*144*/ ,PROP_PAGE_DESC_NAME
+/*145*/ ,PROP_PAGE_NUMBER_OFFSET
+/*146*/ ,PROP_BREAK_TYPE
+/*147*/ ,PROP_FOOTER_IS_DYNAMIC_HEIGHT
+/*148*/ ,PROP_FOOTER_DYNAMIC_SPACING
+/*149*/ ,PROP_FOOTER_HEIGHT
+/*150*/ ,PROP_FOOTER_BODY_DISTANCE
+/*151*/ ,PROP_HEADER_IS_DYNAMIC_HEIGHT
+/*152*/ ,PROP_HEADER_DYNAMIC_SPACING
+/*153*/ ,PROP_HEADER_HEIGHT
+/*154*/ ,PROP_HEADER_BODY_DISTANCE
+/*155*/ ,PROP_WRITING_MODE
+/*156*/ ,PROP_GRID_MODE
+/*157*/ ,PROP_GRID_DISPLAY
+/*158*/ ,PROP_GRID_PRINT
+/*159*/ ,PROP_ADD_EXTERNAL_LEADING
+/*160*/ ,PROP_GRID_LINES
+/*161*/ ,PROP_GRID_BASE_HEIGHT
+/*162*/ ,PROP_GRID_RUBY_HEIGHT
+/*163*/ ,PROP_IS_ON
+/*164*/ ,PROP_RESTART_AT_EACH_PAGE
+/*165*/ ,PROP_COUNT_EMPTY_LINES
+/*166*/ ,PROP_COUNT_LINES_IN_FRAMES
+/*167*/ ,PROP_INTERVAL
+/*168*/ ,PROP_DISTANCE
+/*169*/ ,PROP_NUMBER_POSITION
+/*170*/ ,PROP_LEVEL
+/*171*/ ,PROP_LEVEL_PARAGRAPH_STYLES
+/*172*/ ,PROP_LEVEL_FORMAT
+/*173*/ ,PROP_TOKEN_TYPE
+/*174*/ ,PROP_TOKEN_HYPERLINK_START
+/*175*/ ,PROP_TOKEN_HYPERLINK_END
+/*176*/ ,PROP_TOKEN_CHAPTER_INFO
+/*177*/ ,PROP_CHAPTER_FORMAT
+/*178*/ ,PROP_TOKEN_TEXT
+/*179*/ ,PROP_TEXT
+/*180*/ ,PROP_CREATE_FROM_OUTLINE
+/*181*/ ,PROP_CREATE_FROM_MARKS
+/*182*/ ,PROP_STANDARD
+/*183*/ ,PROP_CHAR_BACK_COLOR
+/*184*/ ,PROP_CHAR_EMPHASIS
+/*185*/ ,PROP_CHAR_COMBINE_IS_ON
+/*186*/ ,PROP_CHAR_COMBINE_PREFIX
+/*187*/ ,PROP_CHAR_COMBINE_SUFFIX
+/*188*/ ,PROP_CHAR_ROTATION
+/*189*/ ,PROP_CHAR_ROTATION_IS_FIT_TO_LINE
+/*190*/ ,PROP_CHAR_FLASH
+/*191*/ ,PROP_IS_SPLIT_ALLOWED
+/*192*/ ,META_PROP_VERTICAL_BORDER
+/*193*/ ,META_PROP_HORIZONTAL_BORDER
+/*194*/ ,PROP_HEADER_ROW_COUNT
+/*195*/ ,PROP_IS_AUTO_HEIGHT
+/*196*/ ,PROP_SIZE_TYPE
+/*197*/ ,PROP_TABLE_COLUMN_SEPARATORS
+/*198*/ ,META_PROP_TABLE_STYLE_NAME
+/*199*/ ,PROP_REDLINE_AUTHOR
+/*200*/ ,PROP_REDLINE_DATE_TIME
+/*201*/ ,PROP_REDLINE_COMMENT
+/*202*/ ,PROP_REDLINE_TYPE
+/*203*/ ,PROP_REDLINE_SUCCESSOR_DATA
+/*204*/ ,PROP_REDLINE_IDENTIFIER
+/*205*/ ,PROP_SIZE_PROTECTED
+/*206*/ ,PROP_POSITION_PROTECTED
+/*207*/ ,PROP_OPAQUE
+/*208*/ ,PROP_VERTICAL_MERGE
+/*209*/ ,PROP_BULLET_CHAR
+/*210*/ ,PROP_BULLET_FONT_NAME
+/*211*/ ,PROP_PARA_BACK_COLOR
+/*212*/ ,PROP_TABS_RELATIVE_TO_INDENT
+/*213*/ ,PROP_PREFIX
+/*214*/ ,PROP_SUFFIX
+/*215*/ ,PROP_CREATE_FROM_LEVEL_PARAGRAPH_STYLES
+/*216*/ ,PROP_DROP_CAP_FORMAT
+/*217*/ , PROP_REFERENCE_FIELD_PART
+/*218*/ ,PROP_SOURCE_NAME
+/*219*/ ,PROP_REFERENCE_FIELD_SOURCE
+/*220*/ ,PROP_WIDTH_TYPE
+/*221*/ ,PROP_TEXT_RANGE
+/*222*/ ,PROP_SERVICE_CHAR_STYLE
+/*223*/ ,PROP_SERVICE_PARA_STYLE
+/*224*/ ,PROP_CHARACTER_STYLES
+/*225*/ ,PROP_PARAGRAPH_STYLES
+/*226*/ ,PROP_TABLE_BORDER_DISTANCES
+/*227*/ ,META_PROP_CELL_MAR_TOP
+/*228*/ ,META_PROP_CELL_MAR_BOTTOM
+/*229*/ ,META_PROP_CELL_MAR_LEFT
+/*230*/ ,META_PROP_CELL_MAR_RIGHT
+/*231*/ ,PROP_START_AT
+/*232*/ ,PROP_ADD_PARA_TABLE_SPACING
+/*233*/ ,PROP_CHAR_PROP_HEIGHT
+/*234*/ ,PROP_CHAR_PROP_HEIGHT_ASIAN
+/*235*/ ,PROP_CHAR_PROP_HEIGHT_COMPLEX
+/*236*/ ,PROP_FORMAT
+/*237*/ ,PROP_INSERT
+/*238*/ ,PROP_DELETE
+/*239*/ ,PROP_STREAM_NAME
+/*240*/ ,PROP_BITMAP
+/*241*/ ,PROP_IS_DATE
+/*242*/ ,PROP_CNF_STYLE
+/*243*/ ,PROP_INDENT_AT
+/*244*/ ,PROP_FIRST_LINE_INDENT
+/*245*/ ,PROP_NUMBERING_STYLE_NAME
+/*246*/ ,PROP_LISTTAB_STOP_POSITION
+/*247*/ ,PROP_POSITION_AND_SPACE_MODE
+};
+struct PropertyNameSupplier_Impl;
+class PropertyNameSupplier
+{
+ PropertyNameSupplier_Impl* m_pImpl;
+public:
+ PropertyNameSupplier();
+ ~PropertyNameSupplier();
+ const rtl::OUString& GetName( PropertyIds eId ) const;
+
+ static PropertyNameSupplier& GetPropertyNameSupplier();
+};
+} //namespace dmapper
+} // namespace writerfilter
+#endif
diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx
new file mode 100644
index 000000000000..d0928f1bac8f
--- /dev/null
+++ b/writerfilter/source/dmapper/PropertyMap.cxx
@@ -0,0 +1,1063 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <PropertyMap.hxx>
+#include <ooxml/resourceids.hxx>
+#include <DomainMapper_Impl.hxx>
+#include <ConversionHelper.hxx>
+#include <i18npool/paper.hxx>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/table/BorderLine.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/style/BreakType.hpp>
+#include <com/sun/star/text/RelOrientation.hpp>
+#include <com/sun/star/text/WritingMode.hpp>
+#include <com/sun/star/text/XTextColumns.hpp>
+#include <com/sun/star/text/XText.hpp>
+
+using namespace ::com::sun::star;
+
+namespace writerfilter {
+namespace dmapper{
+
+/*-- 21.06.2006 09:30:56---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+PropertyMap::PropertyMap() :
+ m_cFootnoteSymbol( 0 ),
+ m_nFootnoteFontId( -1 )
+{
+}
+/*-- 21.06.2006 09:30:56---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+PropertyMap::~PropertyMap()
+{
+}
+/*-- 20.06.2006 10:23:55---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Sequence< beans::PropertyValue > PropertyMap::GetPropertyValues()
+{
+ if(!m_aValues.getLength() && size())
+ {
+ m_aValues.realloc( size() );
+ ::com::sun::star::beans::PropertyValue* pValues = m_aValues.getArray();
+ //style names have to be the first elements within the property sequence
+ //otherwise they will overwrite 'hard' attributes
+ sal_Int32 nValue = 0;
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ PropertyMap::iterator aParaStyleIter = find(PropertyDefinition( PROP_PARA_STYLE_NAME, false ) );
+ if( aParaStyleIter != end())
+ {
+ pValues[nValue].Name = rPropNameSupplier.GetName( aParaStyleIter->first.eId );
+ pValues[nValue].Value = aParaStyleIter->second;
+ ++nValue;
+ }
+
+ PropertyMap::iterator aCharStyleIter = find(PropertyDefinition( PROP_CHAR_STYLE_NAME, false ));
+ if( aCharStyleIter != end())
+ {
+ pValues[nValue].Name = rPropNameSupplier.GetName( aCharStyleIter->first.eId );
+ pValues[nValue].Value = aCharStyleIter->second;
+ ++nValue;
+ }
+ PropertyMap::iterator aNumRuleIter = find(PropertyDefinition( PROP_NUMBERING_RULES, false ) );
+ if( aNumRuleIter != end())
+ {
+ pValues[nValue].Name = rPropNameSupplier.GetName( aNumRuleIter->first.eId );
+ pValues[nValue].Value = aNumRuleIter->second;
+ ++nValue;
+ }
+ PropertyMap::iterator aMapIter = begin();
+ for( ; nValue < m_aValues.getLength(); ++aMapIter )
+ {
+ if( aMapIter != aParaStyleIter && aMapIter != aCharStyleIter && aMapIter != aNumRuleIter )
+ {
+ pValues[nValue].Name = rPropNameSupplier.GetName( aMapIter->first.eId );
+ pValues[nValue].Value = aMapIter->second;
+ ++nValue;
+ }
+ }
+ }
+ return m_aValues;
+}
+/*-------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void PropertyMap::Insert( PropertyIds eId, bool bIsTextProperty, const uno::Any& rAny, bool bOverwrite )
+{
+// const ::rtl::OUString& rInsert = PropertyNameSupplier::
+// GetPropertyNameSupplier().GetName(eId);
+ PropertyMap::iterator aElement = find(PropertyDefinition( eId, bIsTextProperty ) );
+ if( aElement != end())
+ {
+ if(!bOverwrite)
+ return;
+ erase( aElement );
+ }
+ _PropertyMap::insert( PropertyMap::value_type
+ (PropertyDefinition( eId, bIsTextProperty),
+ rAny ));
+ Invalidate();
+}
+/*-- 13.12.2006 10:46:42---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+template<class T>
+ struct removeExistingElements : public ::std::unary_function<T, void>
+{
+ PropertyMap& rMap;
+
+ removeExistingElements(PropertyMap& _rMap ) : rMap(_rMap) {}
+ void operator() (T x)
+ {
+ PropertyMap::iterator aElement = rMap.find(x.first);
+ if( aElement != rMap.end())
+ rMap.erase( aElement );
+ }
+};
+/*-- 13.12.2006 10:46:42---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void PropertyMap::insert( const PropertyMapPtr pMap, bool bOverwrite )
+{
+ if( pMap.get() )
+ {
+ if( bOverwrite )
+ ::std::for_each( pMap->begin(), pMap->end(), removeExistingElements<PropertyMap::value_type>(*this) );
+ _PropertyMap::insert(pMap->begin(), pMap->end());
+ insertTableProperties(pMap.get());
+ }
+}
+/*-- 06.06.2007 15:49:09---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+const uno::Reference< text::XFootnote>& PropertyMap::GetFootnote() const
+{
+ return m_xFootnote;
+}
+/*-- 18.02.2008 11:23:28---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void PropertyMap::insertTableProperties( const PropertyMap* )
+{
+}
+/*-- 24.07.2006 08:29:01---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SectionPropertyMap::SectionPropertyMap(bool bIsFirstSection) :
+ m_bIsFirstSection( bIsFirstSection )
+ ,m_nBorderParams( 0 )
+ ,m_bTitlePage( false )
+ ,m_nColumnCount( 0 )
+ ,m_nColumnDistance( 1249 )
+ ,m_bSeparatorLineIsOn( false )
+ ,m_bEvenlySpaced( false )
+ ,m_bIsLandscape( false )
+ ,m_bPageNoRestart( false )
+ ,m_nPageNumber( -1 )
+ ,m_nBreakType( -1 )
+ ,m_nPaperBin( -1 )
+ ,m_nFirstPaperBin( -1 )
+ ,m_nLeftMargin( 3175 ) //page left margin, default 0x708 (1800) twip -> 3175 1/100 mm
+ ,m_nRightMargin( 3175 )//page right margin, default 0x708 (1800) twip -> 3175 1/100 mm
+ ,m_nTopMargin( 2540 )
+ ,m_nBottomMargin( 2540 )
+ ,m_nHeaderTop( 1270 ) //720 twip
+ ,m_nHeaderBottom( 1270 )//720 twip
+ ,m_nDzaGutter( 0 )
+ ,m_bGutterRTL( false )
+ ,m_bSFBiDi( false )
+ ,m_nGridLinePitch( 1 )
+ ,m_nDxtCharSpace( 0 )
+ ,m_nLnnMod( 0 )
+ ,m_nLnc( 0 )
+ ,m_ndxaLnn( 0 )
+ ,m_nLnnMin( 0 )
+{
+ static sal_Int32 nNumber = 0;
+ nSectionNumber = nNumber++;
+ memset(&m_pBorderLines, 0x00, sizeof(m_pBorderLines));
+ for( sal_Int32 nBorder = 0; nBorder < 4; ++nBorder )
+ m_nBorderDistances[ nBorder ] = -1;
+ //todo: set defaults in ApplyPropertiesToPageStyles
+ //initialize defaults
+ PaperInfo aLetter(PAPER_LETTER);
+ //page height, 1/100mm
+ Insert( PROP_HEIGHT, false, uno::makeAny( (sal_Int32) aLetter.getHeight() ) );
+ //page width, 1/100mm
+ Insert( PROP_WIDTH, false, uno::makeAny( (sal_Int32) aLetter.getWidth() ) );
+ //page left margin, default 0x708 (1800) twip -> 3175 1/100 mm
+ Insert( PROP_LEFT_MARGIN, false, uno::makeAny( (sal_Int32) 3175 ) );
+ //page right margin, default 0x708 (1800) twip -> 3175 1/100 mm
+ Insert( PROP_RIGHT_MARGIN, false, uno::makeAny( (sal_Int32) 3175 ) );
+ //page top margin, default 0x5a0 (1440) twip -> 2540 1/100 mm
+ Insert( PROP_TOP_MARGIN, false, uno::makeAny( (sal_Int32)2540 ) );
+ //page bottom margin, default 0x5a0 (1440) twip -> 2540 1/100 mm
+ Insert( PROP_BOTTOM_MARGIN, false, uno::makeAny( (sal_Int32) 2540 ) );
+ uno::Any aFalse( ::uno::makeAny( false ) );
+ Insert( PROP_GRID_DISPLAY, false, aFalse);
+ Insert( PROP_GRID_PRINT, false, aFalse);
+
+
+
+ if( m_bIsFirstSection )
+ {
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ m_sFirstPageStyleName = rPropNameSupplier.GetName( PROP_FIRST_PAGE );
+ m_sFollowPageStyleName = rPropNameSupplier.GetName( PROP_STANDARD );
+ }
+}
+/*-- 24.07.2006 08:29:02---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SectionPropertyMap::~SectionPropertyMap()
+{
+ for( sal_Int16 ePos = BORDER_LEFT; ePos <= BORDER_BOTTOM; ++ePos)
+ delete m_pBorderLines[ePos];
+}
+/*-- 24.07.2006 08:31:07---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+const ::rtl::OUString& SectionPropertyMap::GetPageStyleName( bool bFirst )
+{
+ return bFirst ? m_sFirstPageStyleName : m_sFollowPageStyleName;
+}
+/*-- 24.07.2006 08:31:07---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SectionPropertyMap::SetPageStyleName( bool bFirst, const ::rtl::OUString& rName)
+{
+ if( bFirst )
+ m_sFirstPageStyleName = rName;
+ else
+ m_sFollowPageStyleName = rName;
+}
+/*-- 24.07.2006 09:41:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::rtl::OUString lcl_FindUnusedPageStyleName(const uno::Sequence< ::rtl::OUString >& rPageStyleNames)
+{
+ static const sal_Char cDefaultStyle[] = "Converted";
+ //find the hightest number x in each style with the name "cDefaultStyle+x" and
+ //return an incremented name
+ sal_Int32 nMaxIndex = 0;
+ const sal_Int32 nDefaultLength = sizeof(cDefaultStyle)/sizeof(sal_Char) - 1;
+ const ::rtl::OUString sDefaultStyle( cDefaultStyle, nDefaultLength, RTL_TEXTENCODING_ASCII_US );
+
+ const ::rtl::OUString* pStyleNames = rPageStyleNames.getConstArray();
+ for( sal_Int32 nStyle = 0; nStyle < rPageStyleNames.getLength(); ++nStyle)
+ {
+ if( pStyleNames[nStyle].getLength() > nDefaultLength &&
+ !rtl_ustr_compare_WithLength( sDefaultStyle, nDefaultLength, pStyleNames[nStyle], nDefaultLength))
+ {
+ sal_Int32 nIndex = pStyleNames[nStyle].copy( nDefaultLength ).toInt32();
+ if( nIndex > nMaxIndex)
+ nMaxIndex = nIndex;
+ }
+ }
+ ::rtl::OUString sRet( sDefaultStyle );
+ sRet += rtl::OUString::valueOf( nMaxIndex + 1);
+ return sRet;
+}
+
+/*-- 28.07.2006 13:00:43---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< beans::XPropertySet > SectionPropertyMap::GetPageStyle(
+ const uno::Reference< container::XNameContainer >& xPageStyles,
+ const uno::Reference < lang::XMultiServiceFactory >& xTextFactory,
+ bool bFirst )
+{
+ uno::Reference< beans::XPropertySet > xRet;
+ try
+ {
+ if( bFirst )
+ {
+ if( !m_sFirstPageStyleName.getLength() )
+ {
+ uno::Sequence< ::rtl::OUString > aPageStyleNames = xPageStyles->getElementNames();
+ m_sFirstPageStyleName = lcl_FindUnusedPageStyleName(aPageStyleNames);
+ m_aFirstPageStyle = uno::Reference< beans::XPropertySet > (
+ xTextFactory->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.style.PageStyle") )),
+ uno::UNO_QUERY);
+ xPageStyles->insertByName( m_sFirstPageStyleName, uno::makeAny(m_aFirstPageStyle) );
+ }
+ else if( !m_aFirstPageStyle.is() )
+ {
+ xPageStyles->getByName(m_sFirstPageStyleName) >>= m_aFirstPageStyle;
+ }
+ xRet = m_aFirstPageStyle;
+ }
+ else
+ {
+ if( !m_sFollowPageStyleName.getLength() )
+ {
+ uno::Sequence< ::rtl::OUString > aPageStyleNames = xPageStyles->getElementNames();
+ m_sFollowPageStyleName = lcl_FindUnusedPageStyleName(aPageStyleNames);
+ m_aFollowPageStyle = uno::Reference< beans::XPropertySet > (
+ xTextFactory->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.style.PageStyle") )),
+ uno::UNO_QUERY);
+ xPageStyles->insertByName( m_sFollowPageStyleName, uno::makeAny(m_aFollowPageStyle) );
+ }
+ else if(!m_aFollowPageStyle.is() )
+ {
+ xPageStyles->getByName(m_sFollowPageStyleName) >>= m_aFollowPageStyle;
+ }
+ xRet = m_aFollowPageStyle;
+ }
+
+ }
+ catch( const uno::Exception& )
+ {
+ }
+
+ return xRet;
+}
+/*-- 28.07.2006 10:56:26---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SectionPropertyMap::SetBorder( BorderPosition ePos, sal_Int32 nLineDistance, const table::BorderLine& rBorderLine )
+{
+ delete m_pBorderLines[ePos];
+ m_pBorderLines[ePos] = new table::BorderLine( rBorderLine );
+ m_nBorderDistances[ePos] = nLineDistance;
+}
+/*-- 28.07.2006 10:56:27---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SectionPropertyMap::ApplyBorderToPageStyles(
+ const uno::Reference< container::XNameContainer >& xPageStyles,
+ const uno::Reference < lang::XMultiServiceFactory >& xTextFactory,
+ sal_Int32 nValue )
+{
+ /*
+ 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;
+ sal_Int32 nOffsetFrom = (nValue & 0x00E0) >> 5;
+ //sal_Int32 bPageDepth = (nValue & 0x0018) >> 3; //unused infromation: 0 - in front 1 - in back
+ //todo: negative spacing (from ww8par6.cxx)
+ switch( nValue & 0x07)
+ {
+ case 0: /*all styles*/
+ xFirst = GetPageStyle( xPageStyles, xTextFactory, false );
+ xSecond = GetPageStyle( xPageStyles, xTextFactory, true );
+ break;
+ case 1: /*first page*/
+ xFirst = GetPageStyle( xPageStyles, xTextFactory, true );
+ break;
+ case 2: /*left and right*/
+ xFirst = GetPageStyle( xPageStyles, xTextFactory, false );
+ break;
+ case 3: //whole document?
+ //todo: how to apply a border to the whole document - find all sections or access all page styles?
+ default:
+ return;
+ }
+ //has to be sorted like enum BorderPosition: l-r-t-b
+ static const PropertyIds aBorderIds[4] =
+ {
+ PROP_LEFT_BORDER,
+ PROP_RIGHT_BORDER,
+ PROP_TOP_BORDER,
+ PROP_BOTTOM_BORDER
+ };
+ static const PropertyIds aBorderDistanceIds[4] =
+ {
+ PROP_LEFT_BORDER_DISTANCE,
+ PROP_RIGHT_BORDER_DISTANCE,
+ PROP_TOP_BORDER_DISTANCE,
+ PROP_BOTTOM_BORDER_DISTANCE
+ };
+ static const PropertyIds aMarginIds[4] =
+ {
+ PROP_LEFT_MARGIN,
+ PROP_RIGHT_MARGIN,
+ PROP_TOP_MARGIN,
+ PROP_BOTTOM_MARGIN
+ };
+
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ for( sal_Int32 nBorder = 0; nBorder < 4; ++nBorder)
+ {
+ if( m_pBorderLines[nBorder] )
+ {
+ const ::rtl::OUString sBorderName = rPropNameSupplier.GetName( aBorderIds[nBorder] );
+ xFirst->setPropertyValue( sBorderName, uno::makeAny( *m_pBorderLines[nBorder] ));
+ if(xSecond.is())
+ xSecond->setPropertyValue( sBorderName, uno::makeAny( *m_pBorderLines[nBorder] ));
+ }
+ if( m_nBorderDistances[nBorder] >= 0 )
+ {
+ SetBorderDistance( xFirst, aMarginIds[nBorder], aBorderDistanceIds[nBorder],
+ m_nBorderDistances[nBorder], nOffsetFrom );
+ if(xSecond.is())
+ SetBorderDistance( xSecond, aMarginIds[nBorder], aBorderDistanceIds[nBorder],
+ m_nBorderDistances[nBorder], nOffsetFrom );
+ }
+ }
+}
+
+void SectionPropertyMap::SetBorderDistance( uno::Reference< beans::XPropertySet > xStyle,
+ PropertyIds eMarginId, PropertyIds eDistId, sal_Int32 nDistance, sal_Int32 nOffsetFrom )
+{
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ sal_Int32 nDist = nDistance;
+ if( nOffsetFrom == 1 )
+ {
+ const ::rtl::OUString sMarginName = rPropNameSupplier.GetName( eMarginId );
+ uno::Any aMargin = xStyle->getPropertyValue( sMarginName );
+ sal_Int32 nMargin = 0;
+ aMargin >>= nMargin;
+
+ // Change the margins with the border distance
+ xStyle->setPropertyValue( sMarginName, uno::makeAny( nDistance ) );
+
+ // Set the distance to ( Margin - distance )
+ nDist = nMargin - nDistance;
+ }
+ const ::rtl::OUString sBorderDistanceName = rPropNameSupplier.GetName( eDistId );
+ xStyle->setPropertyValue( sBorderDistanceName, uno::makeAny( nDist ));
+}
+
+/*-- 14.12.2006 12:50:06---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< text::XTextColumns > SectionPropertyMap::ApplyColumnProperties(
+ uno::Reference< beans::XPropertySet > xColumnContainer )
+{
+ uno::Reference< text::XTextColumns > xColumns;
+ try
+ {
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ const ::rtl::OUString sTextColumns = rPropNameSupplier.GetName( PROP_TEXT_COLUMNS );
+ xColumnContainer->getPropertyValue(sTextColumns) >>= xColumns;
+ uno::Reference< beans::XPropertySet > xColumnPropSet( xColumns, uno::UNO_QUERY_THROW );
+ if( !m_bEvenlySpaced &&
+ (sal_Int32(m_aColWidth.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 = double( nRefValue ) / double( nColSum );
+ uno::Sequence< text::TextColumn > aColumns( m_nColumnCount + 1 );
+ text::TextColumn* pColumn = aColumns.getArray();
+
+ nColSum = 0;
+ for( sal_Int32 nCol = 0; nCol <= m_nColumnCount; ++nCol)
+ {
+ //nColSum : nRefValue == (nAbsColWidth + colDist /2) : nRelColWidth;
+ pColumn[nCol].LeftMargin = nCol ? m_aColDistance[nCol - 1 ] / 2 : 0;
+ pColumn[nCol].RightMargin = nCol == m_nColumnCount ? 0 : m_aColDistance[nCol] / 2;
+ pColumn[nCol].Width = sal_Int32((double( m_aColWidth[nCol] + pColumn[nCol].RightMargin + pColumn[nCol].LeftMargin ) + 0.5 ) * fRel );
+ nColSum += pColumn[nCol].Width;
+ }
+ if( nColSum != nRefValue )
+ pColumn[m_nColumnCount].Width -= ( nColSum - nRefValue );
+ xColumns->setColumns( aColumns );
+ }
+ else
+ {
+ xColumns->setColumnCount( m_nColumnCount + 1 );
+ xColumnPropSet->setPropertyValue( rPropNameSupplier.GetName( PROP_AUTOMATIC_DISTANCE ), uno::makeAny( m_nColumnDistance ));
+ }
+
+ if(m_bSeparatorLineIsOn)
+ xColumnPropSet->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_SEPARATOR_LINE_IS_ON ),
+ uno::makeAny( m_bSeparatorLineIsOn ));
+ xColumnContainer->setPropertyValue( sTextColumns, uno::makeAny( xColumns ) );
+ }
+ catch( const uno::Exception& )
+ {
+ OSL_ENSURE( false, "Exception in SectionPropertyMap::ApplyColumnProperties");
+ }
+ return xColumns;
+}
+
+/*-- 20.12.2006 09:44:16---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+bool SectionPropertyMap::HasHeader(bool bFirstPage) const
+{
+ bool bRet = false;
+ if( (bFirstPage && m_aFirstPageStyle.is()) ||( !bFirstPage && m_aFollowPageStyle.is()) )
+ {
+ if( bFirstPage )
+ m_aFirstPageStyle->getPropertyValue(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName(PROP_HEADER_IS_ON) ) >>= bRet;
+ else
+ m_aFollowPageStyle->getPropertyValue(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName(PROP_HEADER_IS_ON) ) >>= bRet;
+ }
+ return bRet;
+}
+/*-- 20.12.2006 09:44:16---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+bool SectionPropertyMap::HasFooter(bool bFirstPage) const
+{
+ bool bRet = false;
+ if( (bFirstPage && m_aFirstPageStyle.is()) ||( !bFirstPage && m_aFollowPageStyle.is()) )
+ {
+ if( bFirstPage )
+ m_aFirstPageStyle->getPropertyValue(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName(PROP_FOOTER_IS_ON) ) >>= bRet;
+ else
+ m_aFollowPageStyle->getPropertyValue(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName(PROP_FOOTER_IS_ON) ) >>= bRet;
+ }
+ return bRet;
+}
+/*-- 20.12.2006 09:41:56---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+#define MIN_HEAD_FOOT_HEIGHT 100 //minimum header/footer height
+
+void SectionPropertyMap::PrepareHeaderFooterProperties( bool bFirstPage )
+{
+ sal_Int32 nTopMargin = m_nTopMargin;
+ if(HasHeader(bFirstPage))
+ {
+ m_nTopMargin = m_nHeaderTop;
+ if( nTopMargin > 0 && nTopMargin > m_nHeaderTop )
+ m_nHeaderTop = nTopMargin - m_nHeaderTop;
+ else
+ m_nHeaderTop = 0;
+
+ //minimum header height 1mm
+ if( m_nHeaderTop < MIN_HEAD_FOOT_HEIGHT )
+ m_nHeaderTop = MIN_HEAD_FOOT_HEIGHT;
+ }
+
+
+ if( nTopMargin >= 0 ) //fixed height header -> see WW8Par6.hxx
+ {
+ operator[]( PropertyDefinition( PROP_HEADER_IS_DYNAMIC_HEIGHT, false )) = uno::makeAny( true );
+ operator[]( PropertyDefinition( PROP_HEADER_DYNAMIC_SPACING, false )) = uno::makeAny( true );
+ operator[]( PropertyDefinition( PROP_HEADER_BODY_DISTANCE, false )) = uno::makeAny( m_nHeaderTop - MIN_HEAD_FOOT_HEIGHT );// ULSpace.Top()
+ operator[]( PropertyDefinition( PROP_HEADER_HEIGHT, false )) = uno::makeAny( m_nHeaderTop );
+
+ }
+ else
+ {
+ //todo: old filter fakes a frame into the header/footer to support overlapping
+ //current setting is completely wrong!
+ operator[]( PropertyDefinition( PROP_HEADER_HEIGHT, false )) = uno::makeAny( m_nHeaderTop );
+ operator[]( PropertyDefinition( PROP_HEADER_BODY_DISTANCE, false )) = uno::makeAny( nTopMargin - m_nHeaderTop );
+ operator[]( PropertyDefinition( PROP_HEADER_IS_DYNAMIC_HEIGHT, false)) = uno::makeAny( false );
+ operator[]( PropertyDefinition( PROP_HEADER_DYNAMIC_SPACING, false)) = uno::makeAny( false );
+ }
+
+ sal_Int32 nBottomMargin = m_nBottomMargin;
+ if( HasFooter( bFirstPage ) )
+ {
+ m_nBottomMargin = m_nHeaderBottom;
+ if( nBottomMargin > 0 && nBottomMargin > m_nHeaderBottom )
+ m_nHeaderBottom = nBottomMargin - m_nHeaderBottom;
+ else
+ m_nHeaderBottom = 0;
+ if( m_nHeaderBottom < MIN_HEAD_FOOT_HEIGHT )
+ m_nHeaderBottom = MIN_HEAD_FOOT_HEIGHT;
+ }
+
+ if( nBottomMargin >= 0 ) //fixed height footer -> see WW8Par6.hxx
+ {
+ operator[]( PropertyDefinition( PROP_FOOTER_IS_DYNAMIC_HEIGHT, false )) = uno::makeAny( true );
+ operator[]( PropertyDefinition( PROP_FOOTER_DYNAMIC_SPACING, false )) = uno::makeAny( true );
+ operator[]( PropertyDefinition( PROP_FOOTER_BODY_DISTANCE, false )) = uno::makeAny( m_nHeaderBottom - MIN_HEAD_FOOT_HEIGHT);
+ operator[]( PropertyDefinition( PROP_FOOTER_HEIGHT, false )) = uno::makeAny( m_nHeaderBottom );
+ }
+ else
+ {
+ //todo: old filter fakes a frame into the header/footer to support overlapping
+ //current setting is completely wrong!
+ operator[]( PropertyDefinition( PROP_FOOTER_IS_DYNAMIC_HEIGHT, false)) = uno::makeAny( false );
+ operator[]( PropertyDefinition( PROP_FOOTER_DYNAMIC_SPACING, false)) = uno::makeAny( false );
+ operator[]( PropertyDefinition( PROP_FOOTER_HEIGHT, false )) = uno::makeAny( nBottomMargin - m_nHeaderBottom );
+ operator[]( PropertyDefinition( PROP_FOOTER_BODY_DISTANCE, false )) = uno::makeAny( m_nHeaderBottom );
+ }
+
+ //now set the top/bottom margin for the follow page style
+ operator[]( PropertyDefinition( PROP_TOP_MARGIN, false )) = uno::makeAny( m_nTopMargin );
+ operator[]( PropertyDefinition( PROP_BOTTOM_MARGIN, false )) = uno::makeAny( m_nBottomMargin );
+}
+/*-- 11.12.2006 08:31:46---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SectionPropertyMap::CloseSectionGroup( DomainMapper_Impl& rDM_Impl )
+{
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ if( m_nLnnMod )
+ {
+ bool bFirst = rDM_Impl.IsLineNumberingSet();
+ rDM_Impl.SetLineNumbering( m_nLnnMod, m_nLnc, m_ndxaLnn );
+ if( m_nLnnMin > 0 || (bFirst && m_nLnc == 1))
+ {
+ //set the starting value at the beginning of the section
+ try
+ {
+ uno::Reference< beans::XPropertySet > xRangeProperties;
+ if( m_xStartingRange.is() )
+ {
+ xRangeProperties = uno::Reference< beans::XPropertySet >( m_xStartingRange, uno::UNO_QUERY_THROW );
+ }
+ else
+ {
+ //set the start value at the beginning of the document
+ xRangeProperties = uno::Reference< beans::XPropertySet >( rDM_Impl.GetTextDocument()->getText()->getStart(), uno::UNO_QUERY_THROW );
+ }
+ xRangeProperties->setPropertyValue( rPropNameSupplier.GetName( PROP_PARA_LINE_NUMBER_START_VALUE ), uno::makeAny( m_nLnnMin + 1 ));
+ }
+ catch( const uno::Exception& )
+ {
+ OSL_ENSURE( false, "Exception in SectionPropertyMap::CloseSectionGroup");
+ }
+ }
+ }
+
+ //depending on the break type no page styles should be created
+ if(m_nBreakType == 0)
+ {
+ //todo: insert a section or access the already inserted section
+ //-->debug
+// ::rtl::OUString sSelection = m_xStartingRange->getString();
+// sSelection.getLength();
+ //-->debug
+ uno::Reference< beans::XPropertySet > xSection =
+ rDM_Impl.appendTextSectionAfter( m_xStartingRange );
+ if( m_nColumnCount > 0 && xSection.is())
+ ApplyColumnProperties( xSection );
+ }
+ else
+ {
+ //get the properties and create appropriate page styles
+ uno::Reference< beans::XPropertySet > xFollowPageStyle = GetPageStyle( rDM_Impl.GetPageStyles(), rDM_Impl.GetTextFactory(), false );
+
+ if( m_nDzaGutter > 0 )
+ {
+ //todo: iGutterPos from DocProperties are missing
+ // if( m_iGutterPos > 0 ) m_nTopMargin += m_nDzaGutter; else
+ if( m_bGutterRTL )
+ m_nRightMargin += m_nDzaGutter;
+ else
+ m_nLeftMargin += m_nDzaGutter;
+ }
+ operator[]( PropertyDefinition( PROP_LEFT_MARGIN, false )) = uno::makeAny( m_nLeftMargin );
+ operator[]( PropertyDefinition( PROP_RIGHT_MARGIN, false )) = uno::makeAny( m_nRightMargin );
+
+// if( iGutterPos && fRTLGutter )
+// m_nTopMargin += nGutter
+
+ /*** if headers/footers are available then the top/bottom margins of the
+ header/footer are copied to the top/bottom margin of the page
+ */
+ PrepareHeaderFooterProperties( false );
+
+ const ::rtl::OUString sTrayIndex = rPropNameSupplier.GetName( PROP_PRINTER_PAPER_TRAY_INDEX );
+ if( m_nPaperBin >= 0 )
+ xFollowPageStyle->setPropertyValue( sTrayIndex, uno::makeAny( m_nPaperBin ) );
+ uno::Reference< text::XTextColumns > xColumns;
+ if( m_nColumnCount > 0 )
+ xColumns = ApplyColumnProperties( xFollowPageStyle );
+
+ //prepare text grid properties
+ sal_Int32 nHeight = 1;
+ PropertyMap::iterator aElement = find(PropertyDefinition( PROP_HEIGHT, false ));
+ if( aElement != end())
+ aElement->second >>= nHeight;
+
+ sal_Int32 nWidth = 1;
+ aElement = find(PropertyDefinition( PROP_WIDTH, false ));
+ if( aElement != end())
+ aElement->second >>= nWidth;
+
+ text::WritingMode eWritingMode = text::WritingMode_LR_TB;
+ aElement = find(PropertyDefinition( PROP_WRITING_MODE, false ));
+ if( aElement != end())
+ aElement->second >>= eWritingMode;
+
+
+
+ sal_Int32 nTextAreaHeight = eWritingMode == text::WritingMode_LR_TB ?
+ nHeight - m_nTopMargin - m_nBottomMargin :
+ nWidth - m_nLeftMargin - m_nRightMargin;
+
+ operator[]( PropertyDefinition( PROP_GRID_LINES, false )) =
+ uno::makeAny( static_cast<sal_Int16>(nTextAreaHeight/m_nGridLinePitch));
+
+ sal_Int32 nCharWidth = 423; //240 twip/ 12 pt
+ //todo: is '0' the right index here?
+ const StyleSheetEntryPtr pEntry = rDM_Impl.GetStyleSheetTable()->FindStyleSheetByISTD(::rtl::OUString::valueOf(static_cast<sal_Int32>(0), 16));
+ if( pEntry.get( ) )
+ {
+ PropertyMap::iterator aElement_ = pEntry->pProperties->find(PropertyDefinition( PROP_CHAR_HEIGHT_ASIAN, false ));
+ if( aElement_ != pEntry->pProperties->end())
+ {
+ double fHeight = 0;
+ if( aElement_->second >>= fHeight )
+ nCharWidth = ConversionHelper::convertTwipToMM100( (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 );
+ }
+ operator[]( PropertyDefinition( PROP_GRID_BASE_HEIGHT, false )) = uno::makeAny( nCharWidth );
+ sal_Int32 nRubyHeight = m_nGridLinePitch - nCharWidth;
+ if(nRubyHeight < 0 )
+ nRubyHeight = 0;
+ operator[]( PropertyDefinition( PROP_GRID_RUBY_HEIGHT, false )) = uno::makeAny( nRubyHeight );
+
+ _ApplyProperties( xFollowPageStyle );
+
+ //todo: creating a "First Page" style depends on HasTitlePage und _fFacingPage_
+ if( m_bTitlePage )
+ {
+ PrepareHeaderFooterProperties( true );
+ uno::Reference< beans::XPropertySet > xFirstPageStyle = GetPageStyle(
+ rDM_Impl.GetPageStyles(), rDM_Impl.GetTextFactory(), true );
+ _ApplyProperties( xFirstPageStyle );
+
+ sal_Int32 nPaperBin = m_nFirstPaperBin >= 0 ? m_nFirstPaperBin : m_nPaperBin >= 0 ? m_nPaperBin : 0;
+ if( nPaperBin )
+ xFollowPageStyle->setPropertyValue( sTrayIndex, uno::makeAny( nPaperBin ) );
+ if( xColumns.is() )
+ xFollowPageStyle->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_TEXT_COLUMNS ), uno::makeAny( xColumns ));
+ }
+
+ ApplyBorderToPageStyles( rDM_Impl.GetPageStyles( ), rDM_Impl.GetTextFactory( ), m_nBorderParams );
+
+ try
+ {
+// if( m_xStartingRange.is() )
+ {
+ //now apply this break at the first paragraph of this section
+ uno::Reference< beans::XPropertySet > xRangeProperties;
+ if( m_bIsFirstSection )
+ xRangeProperties = uno::Reference< beans::XPropertySet >( rDM_Impl.GetBodyText()->getStart(), uno::UNO_QUERY_THROW );
+ else
+ xRangeProperties = uno::Reference< beans::XPropertySet >( m_xStartingRange, uno::UNO_QUERY_THROW );
+ /* break type
+ 0 - No break 1 - New Colunn 2 - New page 3 - Even page 4 - odd page */
+ if( m_nBreakType == 2 || m_nBreakType == 3)
+ {
+ xRangeProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_BREAK_TYPE),
+ uno::makeAny( m_nBreakType == 2 ? style::BreakType_COLUMN_AFTER : style::BreakType_PAGE_AFTER ) );
+ }
+ else
+ {
+ xRangeProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_PAGE_DESC_NAME ),
+ uno::makeAny( m_bTitlePage ? m_sFirstPageStyleName : m_sFollowPageStyleName ));
+ // todo: page breaks with odd/even page numbering are not available - find out current page number to check how to change the number
+ // or add even/odd page break types
+ if(m_bPageNoRestart || m_nPageNumber >= 0)
+ {
+ sal_Int16 nPageNumber = m_nPageNumber >= 0 ? static_cast< sal_Int16 >(m_nPageNumber) : 1;
+ xRangeProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_PAGE_NUMBER_OFFSET ),
+ uno::makeAny( nPageNumber ));
+ }
+ }
+ }
+ }
+ catch( const uno::Exception& rEx)
+ {
+ OSL_ENSURE( false, "Exception in SectionPropertyMap::CloseSectionGroup");
+ (void)rEx;
+ }
+ }
+}
+/*-- 11.12.2006 08:31:46---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SectionPropertyMap::_ApplyProperties( uno::Reference< beans::XPropertySet > xStyle )
+{
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ PropertyMap::iterator aMapIter = begin();
+ while( aMapIter != end())
+ {
+ try
+ {
+ xStyle->setPropertyValue( rPropNameSupplier.GetName( aMapIter->first.eId ), aMapIter->second );
+ }
+ catch( const uno::Exception& )
+ {
+ OSL_ENSURE( false, "Exception in <PageStyle>::setPropertyValue");
+ }
+ ++aMapIter;
+ }
+}
+sal_Int32 lcl_AlignPaperBin( sal_Int32 nSet )
+{
+ //default tray numbers are above 0xff
+ if( nSet > 0xff )
+ nSet = nSet >> 8;
+ //there are some special numbers which can't be handled easily
+ //1, 4, 15, manual tray, upper tray, auto select? see ww8atr.cxx
+ //todo: find out appropriate conversion
+ return nSet;
+}
+/*-- 13.12.2006 15:34:01---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SectionPropertyMap::SetPaperBin( sal_Int32 nSet )
+{
+ m_nPaperBin = lcl_AlignPaperBin( nSet );
+}
+/*-- 13.12.2006 15:34:01---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SectionPropertyMap::SetFirstPaperBin( sal_Int32 nSet )
+{
+ m_nFirstPaperBin = lcl_AlignPaperBin( nSet );
+}
+/*-- 14.06.2007 13:57:42---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+StyleSheetPropertyMap::StyleSheetPropertyMap() :
+// mnCT_Spacing_after( 0 ),
+ mnCT_Spacing_line( 0 ),
+ mnCT_Spacing_lineRule( 0 ),
+ mbCT_TrPrBase_tblHeader( false ),
+ mnCT_TrPrBase_jc( 0 ),
+ mnCT_TcPrBase_vAlign( 0 ),
+ mnCT_TblWidth_w( 0 ),
+ mnCT_TblWidth_type( 0 ),
+// mbCT_Spacing_afterSet( false ),
+ mbCT_Spacing_lineSet( false ),
+ mbCT_Spacing_lineRuleSet( false ),
+ mbCT_TrPrBase_tblHeaderSet( false ),
+ mbCT_TrPrBase_jcSet( false ),
+ mbCT_TcPrBase_vAlignSet( false ),
+ mbCT_TblWidth_wSet( false ),
+ mbCT_TblWidth_typeSet( false ),
+ mnListId( -1 ),
+ mnListLevel( -1 ),
+ mnOutlineLevel( -1 )
+{
+}
+/*-- 14.06.2007 13:57:43---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+StyleSheetPropertyMap::~StyleSheetPropertyMap()
+{
+}
+/*-- 28.12.2007 08:19:00---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ParagraphProperties::ParagraphProperties() :
+ m_bFrameMode( false ),
+ m_nDropCap(NS_ooxml::LN_Value_wordprocessingml_ST_DropCap_none),
+ m_nLines(0),
+ m_w(-1),
+ m_h(-1),
+ m_nWrap(-1),
+ m_hAnchor(-1),
+ m_vAnchor(text::RelOrientation::FRAME),
+ 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_bAnchorLock(false),
+ m_nDropCapLength(0)
+{
+}
+/*-- 28.12.2007 08:28:24---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ParagraphProperties::ParagraphProperties(const ParagraphProperties& rCopy) :
+ m_bFrameMode ( rCopy.m_bFrameMode),
+ m_nDropCap ( rCopy.m_nDropCap),
+ m_nLines ( rCopy.m_nLines),
+ m_w ( rCopy.m_w),
+ m_h ( rCopy.m_h),
+ m_nWrap ( rCopy.m_nWrap),
+ m_hAnchor ( rCopy.m_hAnchor),
+ m_vAnchor ( rCopy.m_vAnchor),
+ m_x ( rCopy.m_x),
+ m_bxValid ( rCopy.m_bxValid),
+ m_y ( rCopy.m_y),
+ m_byValid ( rCopy.m_byValid),
+ m_hSpace ( rCopy.m_hSpace),
+ m_vSpace ( rCopy.m_vSpace),
+ m_hRule ( rCopy.m_hRule),
+ m_xAlign ( rCopy.m_xAlign),
+ m_yAlign ( rCopy.m_yAlign),
+ m_bAnchorLock( rCopy.m_bAnchorLock),
+ m_nDropCapLength( rCopy.m_nDropCapLength ),
+ m_sParaStyleName( rCopy.m_sParaStyleName),
+ m_xStartingRange( rCopy.m_xStartingRange ),
+ m_xEndingRange( rCopy.m_xEndingRange)
+{
+}
+/*-- 28.12.2007 11:29:18---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ParagraphProperties::~ParagraphProperties()
+{
+}
+/*-- 28.12.2007 09:05:45---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+int 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 &&
+ m_bAnchorLock== rCompare.m_bAnchorLock;
+}
+/*-- 27.12.2007 13:32:36---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ParagraphPropertyMap::ParagraphPropertyMap()
+{
+}
+/*-- 27.12.2007 13:32:36---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ParagraphPropertyMap::~ParagraphPropertyMap()
+{
+}
+/*-- 15.02.2008 16:10:39---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+TablePropertyMap::TablePropertyMap()
+{
+}
+/*-- 15.02.2008 16:10:39---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+TablePropertyMap::~TablePropertyMap()
+{
+}
+/*-- 18.02.2008 10:06:30---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+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_ENSURE( false, "invalid TablePropertyMapTarget");
+ return false;
+ }
+}
+/*-- 18.02.2008 10:07:11---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void TablePropertyMap::setValue( TablePropertyMapTarget eWhich, sal_Int32 nSet )
+{
+ if( eWhich < TablePropertyMapTarget_MAX )
+ {
+ m_aValidValues[eWhich].bValid = true;
+ m_aValidValues[eWhich].nValue = nSet;
+ }
+ else
+ OSL_ENSURE( false, "invalid TablePropertyMapTarget");
+}
+/*-- 18.02.2008 11:23:28---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void TablePropertyMap::insertTableProperties( const PropertyMap* pMap )
+{
+ 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 )
+ {
+ m_aValidValues[eTarget].bValid = true;
+ m_aValidValues[eTarget].nValue = pSource->m_aValidValues[eTarget].nValue;
+ }
+ }
+ }
+}
+
+
+}//namespace dmapper
+}//namespace writerfilter
diff --git a/writerfilter/source/dmapper/PropertyMap.hxx b/writerfilter/source/dmapper/PropertyMap.hxx
new file mode 100644
index 000000000000..be6209cd1f30
--- /dev/null
+++ b/writerfilter/source/dmapper/PropertyMap.hxx
@@ -0,0 +1,548 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_DMAPPER_PROPERTYMAP_HXX
+#define INCLUDED_DMAPPER_PROPERTYMAP_HXX
+
+#include <rtl/ustring.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+#ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_HXX_
+#include <com/sun/star/beans/PropertyValue.hpp>
+#endif
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/uno/Any.h>
+#include <PropertyIds.hxx>
+#include <boost/shared_ptr.hpp>
+#include <map>
+#include <vector>
+
+namespace com{namespace sun{namespace star{
+ namespace beans{
+ struct PropertyValue;
+ }
+ namespace container{
+ class XNameAccess;
+ class XNameContainer;
+ }
+ namespace lang{
+ class XMultiServiceFactory;
+ }
+ namespace text{
+ class XTextRange;
+ class XTextColumns;
+ class XFootnote;
+ }
+ namespace table{
+ struct BorderLine;
+ }
+}}}
+
+namespace writerfilter {
+namespace dmapper{
+class DomainMapper_Impl;
+
+enum BorderPosition
+{
+ BORDER_LEFT,
+ BORDER_RIGHT,
+ BORDER_TOP,
+ BORDER_BOTTOM
+};
+/*-- 15.06.2006 08:22:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+struct PropertyDefinition
+{
+ PropertyIds eId;
+ bool bIsTextProperty;
+
+ PropertyDefinition( PropertyIds _eId, bool _bIsTextProperty ) :
+ eId( _eId ),
+ bIsTextProperty( _bIsTextProperty ){}
+
+ bool operator== (const PropertyDefinition& rDef) const
+ { return rDef.eId == eId; }
+ bool operator< (const PropertyDefinition& rDef) const
+ { return eId < rDef.eId; }
+};
+typedef std::map < PropertyDefinition, ::com::sun::star::uno::Any > _PropertyMap;
+class PropertyMap : public _PropertyMap
+{
+ ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > m_aValues;
+ //marks context as footnote context - ::text( ) events contain either the footnote character or can be ignored
+ //depending on sprmCSymbol
+ sal_Unicode m_cFootnoteSymbol; // 0 == invalid
+ sal_Int32 m_nFootnoteFontId; // negative values are invalid ids
+ ::rtl::OUString m_sFootnoteFontName;
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XFootnote > m_xFootnote;
+
+ public:
+ PropertyMap();
+ virtual ~PropertyMap();
+
+ ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > GetPropertyValues();
+ bool hasEmptyPropertyValues() const {return !m_aValues.getLength();}
+ /** Add property, usually overwrites already available attributes. It shouldn't overwrite in case of default attributes
+ */
+ void Insert( PropertyIds eId, bool bIsTextProperty, const ::com::sun::star::uno::Any& rAny, bool bOverwrite = true );
+ using _PropertyMap::insert;
+ void insert(const boost::shared_ptr<PropertyMap> pMap, bool bOverwrite = true);
+
+ void Invalidate()
+ {
+ if(m_aValues.getLength())
+ m_aValues.realloc( 0 );
+ }
+
+ const ::com::sun::star::uno::Reference< ::com::sun::star::text::XFootnote>& GetFootnote() const;
+ void SetFootnote( ::com::sun::star::uno::Reference< ::com::sun::star::text::XFootnote> xF ) { m_xFootnote = xF; }
+
+ sal_Unicode GetFootnoteSymbol() const { return m_cFootnoteSymbol;}
+ void SetFootnoteSymbol(sal_Unicode cSet) { m_cFootnoteSymbol = cSet;}
+
+ sal_Int32 GetFootnoteFontId() const { return m_nFootnoteFontId;}
+ void SetFootnoteFontId(sal_Int32 nSet) { m_nFootnoteFontId = nSet;}
+
+ const ::rtl::OUString& GetFootnoteFontName() const { return m_sFootnoteFontName;}
+ void SetFootnoteFontName( const ::rtl::OUString& rSet ) { m_sFootnoteFontName = rSet;}
+
+ virtual void insertTableProperties( const PropertyMap* );
+
+};
+typedef boost::shared_ptr<PropertyMap> PropertyMapPtr;
+
+/*-- 24.07.2006 08:26:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+class SectionPropertyMap : public PropertyMap
+{
+ //--> debug
+ sal_Int32 nSectionNumber;
+ //<-- debug
+ //'temporarily' the section page settings are imported as page styles
+ // empty strings mark page settings as not yet imported
+
+ bool m_bIsFirstSection;
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > m_xStartingRange;
+
+ ::rtl::OUString m_sFirstPageStyleName;
+ ::rtl::OUString m_sFollowPageStyleName;
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_aFirstPageStyle;
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_aFollowPageStyle;
+
+ ::com::sun::star::table::BorderLine* m_pBorderLines[4];
+ sal_Int32 m_nBorderDistances[4];
+ sal_Int32 m_nBorderParams;
+
+ bool m_bTitlePage;
+ sal_Int16 m_nColumnCount;
+ sal_Int32 m_nColumnDistance;
+ ::std::vector< sal_Int32 > m_aColWidth;
+ ::std::vector< sal_Int32 > m_aColDistance;
+
+ bool m_bSeparatorLineIsOn;
+ bool m_bEvenlySpaced;
+ bool m_bIsLandscape;
+
+ bool m_bPageNoRestart;
+ sal_Int32 m_nPageNumber;
+ sal_Int32 m_nBreakType;
+ sal_Int32 m_nPaperBin;
+ sal_Int32 m_nFirstPaperBin;
+
+ sal_Int32 m_nLeftMargin;
+ sal_Int32 m_nRightMargin;
+ sal_Int32 m_nTopMargin;
+ sal_Int32 m_nBottomMargin;
+ sal_Int32 m_nHeaderTop;
+ sal_Int32 m_nHeaderBottom;
+
+ sal_Int32 m_nDzaGutter;
+ bool m_bGutterRTL;
+ bool m_bSFBiDi;
+
+ sal_Int32 m_nGridLinePitch;
+ sal_Int32 m_nDxtCharSpace;
+
+ //line numbering
+ sal_Int32 m_nLnnMod;
+ sal_Int32 m_nLnc;
+ sal_Int32 m_ndxaLnn;
+ sal_Int32 m_nLnnMin;
+
+ void _ApplyProperties( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xStyle );
+ ::com::sun::star::uno::Reference< com::sun::star::text::XTextColumns > ApplyColumnProperties(
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xFollowPageStyle );
+ void PrepareHeaderFooterProperties( bool bFirstPage );
+ bool HasHeader( bool bFirstPage ) const;
+ bool HasFooter( bool bFirstPage ) const;
+
+ void SetBorderDistance( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xStyle,
+ PropertyIds eMarginId, PropertyIds eDistId, sal_Int32 nDistance, sal_Int32 nOffsetFrom );
+
+public:
+ explicit SectionPropertyMap(bool bIsFirstSection);
+ ~SectionPropertyMap();
+
+ enum PageType
+ {
+ PAGE_FIRST,
+ PAGE_LEFT,
+ PAGE_RIGHT
+ };
+
+ void SetStart( const ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange >& xRange )
+ {
+ m_xStartingRange = xRange;
+ }
+
+ const ::rtl::OUString& GetPageStyleName( bool bFirst );
+ void SetPageStyleName( bool bFirst, const ::rtl::OUString& rName);
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > GetPageStyle(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& xStyles,
+ const ::com::sun::star::uno::Reference < ::com::sun::star::lang::XMultiServiceFactory >& xTextFactory,
+ bool bFirst );
+
+ void SetBorder( BorderPosition ePos, sal_Int32 nLineDistance, const ::com::sun::star::table::BorderLine& rBorderLine );
+ void SetBorderParams( sal_Int32 nSet ) { m_nBorderParams = nSet; }
+
+ void SetColumnCount( sal_Int16 nCount ) { m_nColumnCount = nCount; }
+ void SetColumnDistance( sal_Int32 nDist ) { m_nColumnDistance = nDist; }
+ void AppendColumnWidth( sal_Int32 nWidth ) { m_aColWidth.push_back( nWidth ); }
+ void AppendColumnSpacing( sal_Int32 nDist ) {m_aColDistance.push_back( nDist ); }
+
+ void SetTitlePage( bool bSet ) { m_bTitlePage = bSet; }
+ void SetSeparatorLine( bool bSet ) { m_bSeparatorLineIsOn = bSet; }
+ void SetEvenlySpaced( bool bSet ) { m_bEvenlySpaced = bSet; }
+ void SetLandscape( bool bSet ) { m_bIsLandscape = bSet; }
+ void SetPageNoRestart( bool bSet ) { m_bPageNoRestart = bSet; }
+ void SetPageNumber( sal_Int32 nSet ) { m_nPageNumber = nSet; }
+ void SetBreakType( sal_Int32 nSet ) { m_nBreakType = nSet; }
+ void SetPaperBin( sal_Int32 nSet );
+ void SetFirstPaperBin( sal_Int32 nSet );
+
+ void SetLeftMargin( sal_Int32 nSet ) { m_nLeftMargin = nSet; }
+ void SetRightMargin( sal_Int32 nSet ) { m_nRightMargin = nSet; }
+ void SetTopMargin( sal_Int32 nSet ) { m_nTopMargin = nSet; }
+ void SetBottomMargin( sal_Int32 nSet ) { m_nBottomMargin = nSet; }
+ void SetHeaderTop( sal_Int32 nSet ) { m_nHeaderTop = nSet; }
+ void SetHeaderBottom( sal_Int32 nSet ) { m_nHeaderBottom = nSet; }
+
+ void SetGutterRTL( bool bSet ) { m_bGutterRTL = bSet;}
+ void SetDzaGutter( sal_Int32 nSet ) {m_nDzaGutter = nSet; }
+ void SetSFBiDi( bool bSet ) { m_bSFBiDi = bSet;}
+
+ void SetGridLinePitch( sal_Int32 nSet ) { m_nGridLinePitch = nSet; }
+ void SetDxtCharSpace( sal_Int32 nSet ) { m_nDxtCharSpace = nSet; }
+
+ void SetLnnMod( sal_Int32 nValue ) { m_nLnnMod = nValue; }
+ void SetLnc( sal_Int32 nValue ) { m_nLnc = nValue; }
+ void SetdxaLnn( sal_Int32 nValue ) { m_ndxaLnn = nValue; }
+ void SetLnnMin( sal_Int32 nValue ) { m_nLnnMin = nValue; }
+
+ //determine which style gets the borders
+ void ApplyBorderToPageStyles(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& xStyles,
+ const ::com::sun::star::uno::Reference < ::com::sun::star::lang::XMultiServiceFactory >& xTextFactory,
+ sal_Int32 nValue );
+
+ void CloseSectionGroup( DomainMapper_Impl& rDM_Impl );
+};
+
+/*-- 28.12.2007 08:17:34---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+class ParagraphProperties
+{
+ bool m_bFrameMode;
+ sal_Int32 m_nDropCap; //drop, margin ST_DropCap
+ sal_Int32 m_nLines; //number of lines of the drop cap
+ sal_Int32 m_w; //width
+ sal_Int32 m_h; //height
+ sal_Int32 m_nWrap; // from ST_Wrap around, auto, none, notBeside, through, tight
+ sal_Int32 m_hAnchor; // page, from ST_HAnchor margin, page, text
+ sal_Int32 m_vAnchor; // around from ST_VAnchor margin, page, text
+ sal_Int32 m_x; //x-position
+ bool m_bxValid;
+ sal_Int32 m_y; //y-position
+ bool m_byValid;
+ sal_Int32 m_hSpace; //frame padding h
+ sal_Int32 m_vSpace; //frame padding v
+ sal_Int32 m_hRule; // from ST_HeightRule exact, atLeast, auto
+ sal_Int32 m_xAlign; // from ST_XAlign center, inside, left, outside, right
+ sal_Int32 m_yAlign; // from ST_YAlign bottom, center, inline, inside, outside, top
+ bool m_bAnchorLock;
+
+ sal_Int8 m_nDropCapLength; //number of characters
+
+ ::rtl::OUString m_sParaStyleName;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > m_xStartingRange; //start of a frame
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > m_xEndingRange; //end of the frame
+
+public:
+ ParagraphProperties();
+ ParagraphProperties(const ParagraphProperties&);
+ ~ParagraphProperties();
+
+ int operator==(const ParagraphProperties&); //does not compare the starting/ending range, m_sParaStyleName and m_nDropCapLength
+
+ void SetFrameMode() { m_bFrameMode = true; }
+ bool IsFrameMode()const { return m_bFrameMode; }
+
+ void SetDropCap( sal_Int32 nSet ) { m_nDropCap = nSet; }
+ sal_Int32 GetDropCap()const { return m_nDropCap; }
+
+ void SetLines( sal_Int32 nSet ) { m_nLines = nSet; }
+ sal_Int32 GetLines() const { return m_nLines; }
+
+ void Setw( sal_Int32 nSet ) { m_w = nSet; }
+ sal_Int32 Getw() const { return m_w; }
+
+ void Seth( sal_Int32 nSet ) { m_h = nSet; }
+ sal_Int32 Geth() const { return m_h; }
+
+ void SetWrap( sal_Int32 nSet ) { m_nWrap = nSet; }
+ sal_Int32 GetWrap() const { return m_nWrap; }
+
+ void SethAnchor( sal_Int32 nSet ) { m_hAnchor = nSet; }
+ sal_Int32 GethAnchor() const { return m_hAnchor;}
+
+ void SetvAnchor( sal_Int32 nSet ) { m_vAnchor = nSet; }
+ sal_Int32 GetvAnchor() const { return m_vAnchor; }
+
+ void Setx( sal_Int32 nSet ) { m_x = nSet; m_bxValid = true;}
+ sal_Int32 Getx() const { return m_x; }
+ bool IsxValid() const {return m_bxValid;}
+
+ void Sety( sal_Int32 nSet ) { m_y = nSet; m_byValid = true;}
+ sal_Int32 Gety()const { return m_y; }
+ bool IsyValid() const {return m_byValid;}
+
+ void SethSpace( sal_Int32 nSet ) { m_hSpace = nSet; }
+ sal_Int32 GethSpace()const { return m_hSpace; }
+
+ void SetvSpace( sal_Int32 nSet ) { m_vSpace = nSet; }
+ sal_Int32 GetvSpace()const { return m_vSpace; }
+
+ void SethRule( sal_Int32 nSet ) { m_hRule = nSet; }
+ sal_Int32 GethRule() const { return m_hRule; }
+
+ void SetxAlign( sal_Int32 nSet ) { m_xAlign = nSet; }
+ sal_Int32 GetxAlign()const { return m_xAlign; }
+
+ void SetyAlign( sal_Int32 nSet ) { m_yAlign = nSet; }
+ sal_Int32 GetyAlign()const { return m_yAlign; }
+
+ void SetAnchorLock( bool bSet ) {m_bAnchorLock = bSet; }
+
+ sal_Int8 GetDropCapLength() const { return m_nDropCapLength;}
+ void SetDropCapLength(sal_Int8 nSet) { m_nDropCapLength = nSet;}
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > GetStartingRange() const { return m_xStartingRange; }
+ void SetStartingRange( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xSet ) { m_xStartingRange = xSet; }
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > GetEndingRange() const { return m_xEndingRange; }
+ void SetEndingRange( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xSet ) { m_xEndingRange = xSet; }
+
+ void SetParaStyleName( const ::rtl::OUString& rSet ) { m_sParaStyleName = rSet;}
+ const ::rtl::OUString& GetParaStyleName() const { return m_sParaStyleName;}
+
+
+};
+typedef boost::shared_ptr<ParagraphProperties> ParagraphPropertiesPtr;
+/*-- 14.06.2007 12:12:34---------------------------------------------------
+ property map of a stylesheet
+ -----------------------------------------------------------------------*/
+
+#define WW_OUTLINE_MAX sal_Int16( 9 )
+
+class StyleSheetPropertyMap : public PropertyMap, public ParagraphProperties
+
+{
+ //special table style properties
+// sal_Int32 mnCT_Spacing_after;
+ sal_Int32 mnCT_Spacing_line;
+ sal_Int32 mnCT_Spacing_lineRule;
+
+ ::rtl::OUString msCT_Fonts_ascii;
+ bool mbCT_TrPrBase_tblHeader;
+ sal_Int32 mnCT_TrPrBase_jc;
+ sal_Int32 mnCT_TcPrBase_vAlign;
+
+ sal_Int32 mnCT_TblWidth_w;
+ sal_Int32 mnCT_TblWidth_type;
+
+// bool mbCT_Spacing_afterSet;
+ bool mbCT_Spacing_lineSet;
+ bool mbCT_Spacing_lineRuleSet;
+
+ bool mbCT_TrPrBase_tblHeaderSet;
+ bool mbCT_TrPrBase_jcSet;
+ bool mbCT_TcPrBase_vAlignSet;
+
+ bool mbCT_TblWidth_wSet;
+ bool mbCT_TblWidth_typeSet;
+
+ sal_Int32 mnListId;
+ sal_Int16 mnListLevel;
+
+ sal_Int16 mnOutlineLevel;
+public:
+ explicit StyleSheetPropertyMap();
+ ~StyleSheetPropertyMap();
+
+// void SetCT_Spacing_after( sal_Int32 nSet )
+// {mnCT_Spacing_after = nSet; mbCT_Spacing_afterSet = true; }
+ void SetCT_Spacing_line( sal_Int32 nSet )
+ {mnCT_Spacing_line = nSet; mbCT_Spacing_lineSet = true; }
+ void SetCT_Spacing_lineRule( sal_Int32 nSet )
+ {mnCT_Spacing_lineRule = nSet; mbCT_Spacing_lineRuleSet = true; }
+
+ void SetCT_Fonts_ascii( const ::rtl::OUString& rSet )
+ {msCT_Fonts_ascii = rSet; }
+ void SetCT_TrPrBase_tblHeader( bool bSet )
+ {mbCT_TrPrBase_tblHeader = bSet; mbCT_TrPrBase_tblHeaderSet = true; }
+ void SetCT_TrPrBase_jc( sal_Int32 nSet )
+ {mnCT_TrPrBase_jc = nSet; mbCT_TrPrBase_jcSet = true; }
+ void SetCT_TcPrBase_vAlign( sal_Int32 nSet )
+ {mnCT_TcPrBase_vAlign = nSet; mbCT_TcPrBase_vAlignSet = true; }
+
+ void SetCT_TblWidth_w( sal_Int32 nSet )
+ { mnCT_TblWidth_w = nSet; mbCT_TblWidth_wSet = true; }
+ void SetCT_TblWidth_type( sal_Int32 nSet )
+ {mnCT_TblWidth_type = nSet; mbCT_TblWidth_typeSet = true; }
+
+// bool GetCT_Spacing_after( sal_Int32& rToFill) const
+// {
+// if( mbCT_Spacing_afterSet )
+// rToFill = mnCT_Spacing_after;
+// return mbCT_Spacing_afterSet;
+// }
+ bool GetCT_Spacing_line( sal_Int32& rToFill) const
+ {
+ if( mbCT_Spacing_lineSet )
+ rToFill = mnCT_Spacing_line;
+ return mbCT_Spacing_lineSet;
+ }
+ bool GetCT_Spacing_lineRule(sal_Int32& rToFill) const
+ {
+ if( mbCT_Spacing_lineRuleSet )
+ rToFill = mnCT_Spacing_lineRule;
+ return mbCT_Spacing_lineRuleSet;
+ }
+
+ bool GetCT_Fonts_ascii(::rtl::OUString& rToFill) const
+ {
+ if( msCT_Fonts_ascii.getLength() > 0 )
+ rToFill = msCT_Fonts_ascii;
+ return msCT_Fonts_ascii.getLength() > 0;
+ }
+ bool GetCT_TrPrBase_tblHeader(bool& rToFill) const
+ {
+ if( mbCT_TrPrBase_tblHeaderSet )
+ rToFill = mbCT_TrPrBase_tblHeader;
+ return mbCT_TrPrBase_tblHeaderSet;
+ }
+ bool GetCT_TrPrBase_jc( sal_Int32& rToFill)const
+ {
+ if( mbCT_TrPrBase_jcSet )
+ rToFill = mnCT_TrPrBase_jc;
+ return mbCT_TrPrBase_jcSet;
+ }
+ bool GetCT_TcPrBase_vAlign( sal_Int32& rToFill)const
+ {
+ if( mbCT_TcPrBase_vAlignSet )
+ rToFill = mnCT_TcPrBase_vAlign;
+ return mbCT_TcPrBase_vAlignSet;
+ }
+ sal_Int32 GetListId() const { return mnListId; }
+ void SetListId(sal_Int32 nId) { mnListId = nId; }
+
+ sal_Int16 GetListLevel() const { return mnListLevel; }
+ void SetListLevel(sal_Int16 nLevel) { mnListLevel = nLevel; }
+
+ sal_Int16 GetOutlineLevel() const { return mnOutlineLevel; }
+ void SetOutlineLevel(sal_Int16 nLevel)
+ {
+ if ( nLevel < WW_OUTLINE_MAX )
+ mnOutlineLevel = nLevel;
+ }
+};
+/*-- 27.12.2007 12:38:06---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+class ParagraphPropertyMap : public PropertyMap, public ParagraphProperties
+{
+public:
+ explicit ParagraphPropertyMap();
+ ~ParagraphPropertyMap();
+
+};
+/*-- 15.02.2008 16:06:52---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+class TablePropertyMap : public PropertyMap
+{
+public:
+ enum TablePropertyMapTarget
+ {
+ TablePropertyMapTarget_START,
+ CELL_MAR_LEFT = TablePropertyMapTarget_START,
+ CELL_MAR_RIGHT,
+ CELL_MAR_TOP,
+ CELL_MAR_BOTTOM,
+ TABLE_WIDTH,
+ GAP_HALF,
+ LEFT_MARGIN,
+ HORI_ORIENT,
+ TablePropertyMapTarget_MAX
+ };
+private:
+ struct ValidValue
+ {
+ sal_Int32 nValue;
+ bool bValid;
+ ValidValue() :
+ nValue( 0 ),
+ bValid( false ){}
+ };
+ ValidValue m_aValidValues[TablePropertyMapTarget_MAX];
+
+public:
+ explicit TablePropertyMap();
+ ~TablePropertyMap();
+
+ bool getValue( TablePropertyMapTarget eWhich, sal_Int32& nFill );
+ void setValue( TablePropertyMapTarget eWhich, sal_Int32 nSet );
+
+ virtual void insertTableProperties( const PropertyMap* );
+};
+typedef boost::shared_ptr<TablePropertyMap> TablePropertyMapPtr;
+} //namespace dmapper
+} //namespace writerfilter
+#endif
diff --git a/writerfilter/source/dmapper/SectionColumnHandler.cxx b/writerfilter/source/dmapper/SectionColumnHandler.cxx
new file mode 100644
index 000000000000..5ad3e51fb8b7
--- /dev/null
+++ b/writerfilter/source/dmapper/SectionColumnHandler.cxx
@@ -0,0 +1,118 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <SectionColumnHandler.hxx>
+#include <PropertyMap.hxx>
+#include <doctok/resourceids.hxx>
+#include <ConversionHelper.hxx>
+#include <ooxml/resourceids.hxx>
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+//using namespace ::std;
+
+/*-- 02.06.2008 13:36:24---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SectionColumnHandler::SectionColumnHandler() :
+ bEqualWidth( false ),
+ nSpace( 0 ),
+ nNum( 0 ),
+ bSep( false )
+{
+}
+/*-- 02.06.2008 13:36:24---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SectionColumnHandler::~SectionColumnHandler()
+{
+}
+/*-- 02.06.2008 13:36:24---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SectionColumnHandler::attribute(Id rName, Value & rVal)
+{
+ sal_Int32 nIntValue = rVal.getInt();
+ /* WRITERFILTERSTATUS: table: SectionColumnHandler_attributedata */
+ switch( rName )
+ {
+ case NS_ooxml::LN_CT_Columns_equalWidth:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ bEqualWidth = (nIntValue != 0);
+ break;
+ case NS_ooxml::LN_CT_Columns_space:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ nSpace = ConversionHelper::convertTwipToMM100( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_Columns_num:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ nNum = nIntValue;
+ break;
+ case NS_ooxml::LN_CT_Columns_sep:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ bSep = (nIntValue != 0);
+ break;
+
+ case NS_ooxml::LN_CT_Column_w:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ aTempColumn.nWidth = ConversionHelper::convertTwipToMM100( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_Column_space:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ aTempColumn.nSpace = ConversionHelper::convertTwipToMM100( nIntValue );
+ break;
+ default:
+ OSL_ENSURE( false, "SectionColumnHandler: unknown attribute");
+ }
+}
+/*-- 02.06.2008 13:36:24---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SectionColumnHandler::sprm(Sprm & rSprm)
+{
+ /* WRITERFILTERSTATUS: table: SectionColumnHandler_sprm */
+ switch( rSprm.getId())
+ {
+ case NS_ooxml::LN_CT_Columns_col:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ aTempColumn.nWidth = aTempColumn.nSpace = 0;
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ pProperties->resolve(*this);
+ aCols.push_back(aTempColumn);
+ }
+ }
+ break;
+ default:
+ OSL_ENSURE( false, "SectionColumnHandler: unknown sprm");
+ }
+}
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/SectionColumnHandler.hxx b/writerfilter/source/dmapper/SectionColumnHandler.hxx
new file mode 100644
index 000000000000..452895b50194
--- /dev/null
+++ b/writerfilter/source/dmapper/SectionColumnHandler.hxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_SECTIONCOLUMNHANDLER_HXX
+#define INCLUDED_SECTIONCOLUMNHANDLER_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <boost/shared_ptr.hpp>
+
+
+namespace writerfilter {
+namespace dmapper
+{
+class PropertyMap;
+
+struct _Column
+{
+ sal_Int32 nWidth;
+ sal_Int32 nSpace;
+};
+
+
+class WRITERFILTER_DLLPRIVATE SectionColumnHandler : public Properties
+{
+ bool bEqualWidth;
+ sal_Int32 nSpace;
+ sal_Int32 nNum;
+ bool bSep;
+ std::vector<_Column> aCols;
+
+ _Column aTempColumn;
+
+public:
+ SectionColumnHandler();
+ virtual ~SectionColumnHandler();
+
+ // Properties
+ virtual void attribute(Id Name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ bool IsEqualWidth() const { return bEqualWidth; }
+ sal_Int32 GetSpace() const { return nSpace; }
+ sal_Int32 GetNum() const { return nNum; }
+ bool IsSeparator() const { return bSep; }
+
+ const std::vector<_Column>& GetColumns() const { return aCols;}
+
+};
+typedef boost::shared_ptr< SectionColumnHandler > SectionColumnHandlerPtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/SettingsTable.cxx b/writerfilter/source/dmapper/SettingsTable.cxx
new file mode 100644
index 000000000000..dd5796a22ceb
--- /dev/null
+++ b/writerfilter/source/dmapper/SettingsTable.cxx
@@ -0,0 +1,87 @@
+#include "SettingsTable.hxx"
+
+#include <ooxml/resourceids.hxx>
+
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/text/XTextDocument.hpp>
+
+#if DEBUG
+#include <iostream>
+#endif
+
+using namespace com::sun::star;
+using namespace rtl;
+
+namespace writerfilter {
+namespace dmapper {
+
+SettingsTable_Impl::SettingsTable_Impl( ) :
+ m_bRecordChanges( false )
+{
+}
+
+SettingsTable_Impl::~SettingsTable_Impl( )
+{
+}
+
+SettingsTable::SettingsTable( ) :
+ m_pImpl( new SettingsTable_Impl )
+{
+}
+
+SettingsTable::~SettingsTable( )
+{
+ delete m_pImpl, m_pImpl = NULL;
+}
+
+void SettingsTable::attribute( Id /*nName*/, Value& /*rVal*/ )
+{
+#if DEBUG
+ clog << "SettingsTable::attribute( )" << endl;
+#endif
+}
+
+void SettingsTable::sprm( Sprm& rSprm )
+{
+ switch ( rSprm.getId( ) )
+ {
+ case NS_ooxml::LN_CT_Settings_trackRevisions:
+ {
+ m_pImpl->m_bRecordChanges = bool(rSprm.getValue( )->getInt( ) );
+ }
+ break;
+ default:
+ {
+#if DEBUG
+ clog << __FILE__ << ":" << __LINE__;
+ clog << ": unknown SPRM: " << rSprm.getName( ) << endl;
+#endif
+ }
+ }
+}
+
+void SettingsTable::entry( int nPos, writerfilter::Reference<Properties>::Pointer_t pRef )
+{
+ (void)nPos;
+#if DEBUG
+ fprintf( stderr, "SettingsTable::entry( ), pos: %d\n", nPos );
+#endif
+ pRef->resolve( *this );
+}
+
+void SettingsTable::resolveSprmProps( Sprm& rSprm )
+{
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+}
+
+void SettingsTable::ApplyProperties( uno::Reference< text::XTextDocument > xDoc )
+{
+ uno::Reference< beans::XPropertySet> xDocProps( xDoc, uno::UNO_QUERY );
+
+ // Record changes value
+ xDocProps->setPropertyValue( OUString::createFromAscii( "RecordChanges" ), uno::makeAny( m_pImpl->m_bRecordChanges ) );
+}
+
+} }
diff --git a/writerfilter/source/dmapper/SettingsTable.hxx b/writerfilter/source/dmapper/SettingsTable.hxx
new file mode 100644
index 000000000000..fb5ba5a8b010
--- /dev/null
+++ b/writerfilter/source/dmapper/SettingsTable.hxx
@@ -0,0 +1,46 @@
+#ifndef INCLUDED_SETTINGSTABLE_HXX
+#define INCLUDED_SETTINGSTABLE_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+
+#include <com/sun/star/text/XTextDocument.hpp>
+
+namespace writerfilter {
+namespace dmapper
+{
+
+struct SettingsTable_Impl
+{
+public:
+ bool m_bRecordChanges;
+
+ SettingsTable_Impl( );
+ ~SettingsTable_Impl( );
+};
+
+class WRITERFILTER_DLLPRIVATE SettingsTable: public Properties, public Table
+{
+public:
+ SettingsTable_Impl* m_pImpl;
+
+ SettingsTable( );
+ ~SettingsTable( );
+
+ // Properties
+ virtual void attribute(Id Name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ // Table
+ virtual void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
+ void resolveSprmProps( Sprm& rSprm );
+
+ void ApplyProperties( com::sun::star::uno::Reference< com::sun::star::text::XTextDocument > xDoc );
+};
+typedef boost::shared_ptr< SettingsTable > SettingsTablePtr;
+
+
+} }
+
+#endif
diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
new file mode 100644
index 000000000000..118dc7c3bf60
--- /dev/null
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -0,0 +1,1718 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <StyleSheetTable.hxx>
+#include <dmapper/DomainMapper.hxx>
+#include <ConversionHelper.hxx>
+#include <TblStylePrHandler.hxx>
+#include <BorderHandler.hxx>
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#include <vector>
+#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/text/XChapterNumberingSupplier.hpp>
+#include <com/sun/star/text/XTextDocument.hpp>
+#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
+#include <com/sun/star/style/XStyle.hpp>
+#include <com/sun/star/text/WritingMode.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <map>
+#include <stdio.h>
+#include <rtl/ustrbuf.hxx>
+
+using namespace ::com::sun::star;
+namespace writerfilter {
+namespace dmapper
+{
+
+typedef ::std::map< ::rtl::OUString, ::rtl::OUString> StringPairMap_t;
+
+/*-- 21.06.2006 07:34:44---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+StyleSheetEntry::StyleSheetEntry() :
+ sStyleIdentifierI()
+ ,sStyleIdentifierD()
+ ,bIsDefaultStyle(false)
+ ,bInvalidHeight(false)
+ ,bHasUPE(false)
+ ,nStyleTypeCode(STYLE_TYPE_UNKNOWN)
+ ,sBaseStyleIdentifier()
+ ,sNextStyleIdentifier()
+ ,pProperties(new StyleSheetPropertyMap)
+ {
+ }
+
+TableStyleSheetEntry::TableStyleSheetEntry( StyleSheetEntry& rEntry, StyleSheetTable* pStyles ):
+ StyleSheetEntry( ),
+ m_pStyleSheet( pStyles )
+{
+ bIsDefaultStyle = rEntry.bIsDefaultStyle;
+ bInvalidHeight = rEntry.bInvalidHeight;
+ bHasUPE = rEntry.bHasUPE;
+ nStyleTypeCode = STYLE_TYPE_TABLE;
+ sBaseStyleIdentifier = rEntry.sBaseStyleIdentifier;
+ sNextStyleIdentifier = rEntry.sNextStyleIdentifier;
+ sStyleName = rEntry.sStyleName;
+ sStyleName1 = rEntry.sStyleName1;
+
+ m_nColBandSize = 1;
+ m_nRowBandSize = 1;
+}
+
+TableStyleSheetEntry::~TableStyleSheetEntry( )
+{
+ m_pStyleSheet = NULL;
+}
+
+void TableStyleSheetEntry::AddTblStylePr( TblStyleType nType, PropertyMapPtr pProps )
+{
+ static TblStyleType pTypesToFix[] =
+ {
+ TBL_STYLE_FIRSTROW,
+ TBL_STYLE_LASTROW,
+ TBL_STYLE_FIRSTCOL,
+ TBL_STYLE_LASTCOL
+ };
+
+ static PropertyIds pPropsToCheck[] =
+ {
+ PROP_BOTTOM_BORDER,
+ PROP_TOP_BORDER,
+ PROP_RIGHT_BORDER,
+ PROP_LEFT_BORDER
+ };
+
+ int i = 0;
+ while ( i < 4 )
+ {
+ if ( nType == pTypesToFix[i] )
+ {
+ PropertyIds nChecked = pPropsToCheck[i];
+ PropertyMap::iterator pCheckedIt = pProps->find( PropertyDefinition( nChecked, false ) );
+
+ PropertyIds nInsideProp = ( i < 2 ) ? META_PROP_HORIZONTAL_BORDER : META_PROP_VERTICAL_BORDER;
+ PropertyMap::iterator pInsideIt = pProps->find( PropertyDefinition( nInsideProp, false ) );
+
+ bool bHasChecked = pCheckedIt != pProps->end( );
+ bool bHasInside = pInsideIt != pProps->end( );
+
+ if ( bHasChecked && bHasInside )
+ {
+ // In this case, remove the inside border
+ pProps->erase( pInsideIt );
+ }
+
+ i = 4; // Stop looping stupidly
+ }
+ i++;
+ }
+
+ // Append the tblStylePr
+ m_aStyles[nType] = pProps;
+}
+
+PropertyMapPtr TableStyleSheetEntry::GetProperties( sal_Int32 nMask )
+{
+ PropertyMapPtr pProps( new PropertyMap );
+
+ // First get the parent properties
+ StyleSheetEntryPtr pEntry = m_pStyleSheet->FindParentStyleSheet( sBaseStyleIdentifier );
+
+ if ( pEntry.get( ) )
+ {
+ TableStyleSheetEntry* pParent = static_cast<TableStyleSheetEntry *>( pEntry.get( ) );
+ pProps->insert( pParent->GetProperties( nMask ) );
+ }
+
+ // And finally get the mask ones
+ pProps->insert( GetLocalPropertiesFromMask( nMask ) );
+
+ return pProps;
+}
+
+void lcl_mergeProps( PropertyMapPtr pToFill, PropertyMapPtr pToAdd, TblStyleType nStyleId )
+{
+ static 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 ( int i = 0 ; i < 7; i++ )
+ {
+ PropertyIds nId = pPropsToCheck[i];
+ PropertyDefinition aProp( nId, false );
+ PropertyMap::iterator pIt = pToAdd->find( aProp );
+
+ if ( pIt != pToAdd->end( ) )
+ {
+ PropertyMap::iterator pDestIt = pToFill->find( aProp );
+
+ 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;
+ pDestIt = pToFill->find( PropertyDefinition( nInsideProp, false ) );
+ if ( pDestIt != pToFill->end( ) )
+ pToFill->erase( pDestIt );
+ }
+ }
+ }
+
+ pToFill->insert( pToAdd );
+}
+
+PropertyMapPtr TableStyleSheetEntry::GetLocalPropertiesFromMask( sal_Int32 nMask )
+{
+ // Order from right to left
+ static TblStyleType aBitsOrder[] =
+ {
+ TBL_STYLE_SWCELL,
+ TBL_STYLE_SECELL,
+ TBL_STYLE_NWCELL,
+ TBL_STYLE_NECELL,
+ TBL_STYLE_BAND2HORZ,
+ TBL_STYLE_BAND1HORZ,
+ TBL_STYLE_BAND2VERT,
+ TBL_STYLE_BAND1VERT,
+ TBL_STYLE_LASTCOL,
+ TBL_STYLE_FIRSTCOL,
+ TBL_STYLE_LASTROW,
+ TBL_STYLE_FIRSTROW
+ };
+
+ // Get the properties applying according to the mask
+ PropertyMapPtr pProps( new PropertyMap( ) );
+ short nBit = 0;
+ do
+ {
+ TblStyleType nStyleId = aBitsOrder[nBit];
+ TblStylePrs::iterator pIt = m_aStyles.find( nStyleId );
+
+ short nTestBit = 1 << nBit;
+ sal_Int32 nBitMask = sal_Int32( nTestBit );
+ if ( ( nMask & nBitMask ) && ( pIt != m_aStyles.end( ) ) )
+ lcl_mergeProps( pProps, pIt->second, nStyleId );
+
+ nBit++;
+ }
+ while ( nBit < 12 );
+
+ return pProps;
+}
+
+/*-- 06.02.2008 11:30:46---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+struct ListCharStylePropertyMap_t
+{
+ ::rtl::OUString sCharStyleName;
+ PropertyValueVector_t aPropertyValues;
+
+ ListCharStylePropertyMap_t(const ::rtl::OUString& rCharStyleName, const PropertyValueVector_t& rPropertyValues):
+ sCharStyleName( rCharStyleName ),
+ aPropertyValues( rPropertyValues )
+ {}
+};
+typedef std::vector< ListCharStylePropertyMap_t > ListCharStylePropertyVector_t;
+/*-- 19.06.2006 12:04:32---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+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;
+ PropertyMapPtr m_pCurrentProps;
+ StringPairMap_t m_aStyleNameMap;
+ ListCharStylePropertyVector_t m_aListCharStylePropertyVector;
+
+
+ StyleSheetTable_Impl(DomainMapper& rDMapper, uno::Reference< text::XTextDocument> xTextDocument);
+
+ ::rtl::OUString HasListCharStyle( const PropertyValueVector_t& rCharProperties );
+};
+/*-- 15.11.2007 08:30:02---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+StyleSheetTable_Impl::StyleSheetTable_Impl(DomainMapper& rDMapper, uno::Reference< text::XTextDocument> xTextDocument ) :
+ m_rDMapper( rDMapper ),
+ m_xTextDocument( xTextDocument ),
+ m_pCurrentEntry(),
+ m_pDefaultParaProps(new PropertyMap),
+ m_pDefaultCharProps(new PropertyMap)
+{
+ //set font height default to 10pt
+ uno::Any aVal = uno::makeAny( double(10.) );
+ m_pDefaultCharProps->Insert( PROP_CHAR_HEIGHT, true, aVal );
+ m_pDefaultCharProps->Insert( PROP_CHAR_HEIGHT_ASIAN, true, aVal );
+ m_pDefaultCharProps->Insert( PROP_CHAR_HEIGHT_COMPLEX, true, aVal );
+}
+/*-- 06.02.2008 11:45:21---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::rtl::OUString StyleSheetTable_Impl::HasListCharStyle( const PropertyValueVector_t& rPropValues )
+{
+ ::rtl::OUString sRet;
+ ListCharStylePropertyVector_t::const_iterator aListVectorIter = m_aListCharStylePropertyVector.begin();
+ while( aListVectorIter != m_aListCharStylePropertyVector.end() )
+ {
+ //if size is identical
+ if( aListVectorIter->aPropertyValues.size() == rPropValues.size() )
+ {
+ bool bBreak = false;
+ //then search for all contained properties
+ PropertyValueVector_t::const_iterator aList1Iter = rPropValues.begin();
+ while( aList1Iter != rPropValues.end() && !bBreak)
+ {
+ //find the property
+ bool bElementFound = false;
+ PropertyValueVector_t::const_iterator aList2Iter = aListVectorIter->aPropertyValues.begin();
+ while( aList2Iter != aListVectorIter->aPropertyValues.end() && !bBreak )
+ {
+ if( aList2Iter->Name == aList1Iter->Name )
+ {
+ bElementFound = true;
+ if( aList2Iter->Value != aList1Iter->Value )
+ bBreak = true;
+ break;
+ }
+ ++aList2Iter;
+ }
+ //set break flag if property hasn't been found
+ if(!bElementFound )
+ {
+ bBreak = true;
+ break;
+ }
+ ++aList1Iter;
+ }
+ if( !bBreak )
+ return aListVectorIter->sCharStyleName;
+ }
+ ++aListVectorIter;
+ }
+ return sRet;
+}
+/*-- 19.06.2006 12:04:32---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+StyleSheetTable::StyleSheetTable(DomainMapper& rDMapper, uno::Reference< text::XTextDocument> xTextDocument) :
+ m_pImpl( new StyleSheetTable_Impl(rDMapper, xTextDocument) )
+{
+}
+/*-- 19.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+StyleSheetTable::~StyleSheetTable()
+{
+ delete m_pImpl;
+}
+/*-- 19.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void StyleSheetTable::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();
+ (void)nIntValue;
+ ::rtl::OUString sValue = val.getString();
+// printf ( "StyleSheetTable::attribute(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)Name, (unsigned int)nIntValue, ::rtl::OUStringToOString(sValue, RTL_TEXTENCODING_DONTKNOW).getStr());
+ /* WRITERFILTERSTATUS: table: StyleSheetTable_attributedata */
+ switch(Name)
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_ISTD:
+ m_pImpl->m_pCurrentEntry->sStyleIdentifierD = ::rtl::OUString::valueOf(static_cast<sal_Int32>(nIntValue), 16);
+ break;
+// case NS_rtf::LN_ISTARTAT: break;
+// case NS_rtf::LN_NFC: break;
+// case NS_rtf::LN_JC: break;
+// case NS_rtf::LN_FLEGAL: break;
+// case NS_rtf::LN_FNORESTART: break;
+// case NS_rtf::LN_FPREV: break;
+// case NS_rtf::LN_FPREVSPACE: break;
+// case NS_rtf::LN_FWORD6: break;
+// case NS_rtf::LN_UNUSED5_7: break;
+// case NS_rtf::LN_RGBXCHNUMS: break;
+// case NS_rtf::LN_IXCHFOLLOW: break;
+// case NS_rtf::LN_DXASPACE: break;
+// case NS_rtf::LN_DXAINDENT: break;
+// case NS_rtf::LN_CBGRPPRLCHPX: break;
+// case NS_rtf::LN_CBGRPPRLPAPX: break;
+// case NS_rtf::LN_LSID: break;
+// case NS_rtf::LN_TPLC: break;
+// case NS_rtf::LN_RGISTD: break;
+// case NS_rtf::LN_FSIMPLELIST: break;
+// case NS_rtf::LN_FRESTARTHDN: break;
+// case NS_rtf::LN_UNSIGNED26_2: break;
+// case NS_rtf::LN_ILVL: break;
+// case NS_rtf::LN_FSTARTAT: break;
+// case NS_rtf::LN_FFORMATTING: break;
+// case NS_rtf::LN_UNSIGNED4_6: break;
+// case NS_rtf::LN_UNUSED4: break;
+// case NS_rtf::LN_UNUSED8: break;
+// case NS_rtf::LN_CLFOLVL: break;
+// case NS_rtf::LN_CBFFNM1: break;
+// case NS_rtf::LN_PRQ: break;
+// case NS_rtf::LN_FTRUETYPE: break;
+// case NS_rtf::LN_UNUSED1_3: break;
+// case NS_rtf::LN_FF: break;
+// case NS_rtf::LN_UNUSED1_7: break;
+// case NS_rtf::LN_WWEIGHT: break;
+// case NS_rtf::LN_CHS: break;
+// case NS_rtf::LN_IXCHSZALT: break;
+// case NS_rtf::LN_PANOSE: break;
+// case NS_rtf::LN_FS: break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_STI:
+ {
+ ::rtl::OUString tempStyleIdentifier = GetStyleIdFromIndex(static_cast<sal_uInt32>(nIntValue));
+ if (tempStyleIdentifier.getLength())
+ m_pImpl->m_pCurrentEntry->sStyleIdentifierI = tempStyleIdentifier;
+ if (nIntValue == 0 || nIntValue == 65)
+ m_pImpl->m_pCurrentEntry->bIsDefaultStyle = true;
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_SGC:
+ m_pImpl->m_pCurrentEntry->nStyleTypeCode = (StyleType)nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_ISTDBASE:
+ if (static_cast<sal_uInt32>(nIntValue) != 0xfff)
+ m_pImpl->m_pCurrentEntry->sBaseStyleIdentifier = ::rtl::OUString::valueOf(static_cast<sal_Int32>(nIntValue), 16);
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_ISTDNEXT:
+ if (static_cast<sal_uInt32>(nIntValue) != 0xfff)
+ m_pImpl->m_pCurrentEntry->sNextStyleIdentifier = ::rtl::OUString::valueOf(static_cast<sal_Int32>(nIntValue), 16);
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FSCRATCH:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FINVALHEIGHT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FHASUPE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FMASSCOPY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_CUPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_BCHUPE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FAUTOREDEF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FHIDDEN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_UNUSED8_3:
+ //noone seems to care about it
+ break;
+// case NS_rtf::LN_CSTD: break;
+// case NS_rtf::LN_CBSTDBASEINFILE: break;
+// case NS_rtf::LN_FSTDSTYLENAMESWRITTEN: break;
+// case NS_rtf::LN_UNUSED4_2: break;
+// case NS_rtf::LN_STIMAXWHENSAVED: break;
+// case NS_rtf::LN_ISTDMAXFIXEDWHENSAVED: break;
+// case NS_rtf::LN_NVERBUILTINNAMESWHENSAVED: break;
+// case NS_rtf::LN_RGFTCSTANDARDCHPSTSH: break;
+// case NS_rtf::LN_WIDENT: break;
+// case NS_rtf::LN_NFIB: break;
+// case NS_rtf::LN_NPRODUCT: break;
+// case NS_rtf::LN_LID: break;
+// case NS_rtf::LN_PNNEXT: break;
+// case NS_rtf::LN_FDOT: break;
+// case NS_rtf::LN_FGLSY: break;
+// case NS_rtf::LN_FCOMPLEX: break;
+// case NS_rtf::LN_FHASPIC: break;
+// case NS_rtf::LN_CQUICKSAVES: break;
+// case NS_rtf::LN_FENCRYPTED: break;
+// case NS_rtf::LN_FWHICHTBLSTM: break;
+// case NS_rtf::LN_FREADONLYRECOMMENDED: break;
+// case NS_rtf::LN_FWRITERESERVATION: break;
+// case NS_rtf::LN_FEXTCHAR: break;
+// case NS_rtf::LN_FLOADOVERRIDE: break;
+// case NS_rtf::LN_FFAREAST: break;
+// case NS_rtf::LN_FCRYPTO: break;
+// case NS_rtf::LN_NFIBBACK: break;
+// case NS_rtf::LN_LKEY: break;
+// case NS_rtf::LN_ENVR: break;
+// case NS_rtf::LN_FMAC: break;
+// case NS_rtf::LN_FEMPTYSPECIAL: break;
+// case NS_rtf::LN_FLOADOVERRIDEPAGE: break;
+// case NS_rtf::LN_FFUTURESAVEDUNDO: break;
+// case NS_rtf::LN_FWORD97SAVED: break;
+// case NS_rtf::LN_FSPARE0: break;
+// case NS_rtf::LN_CHSTABLES: break;
+// case NS_rtf::LN_FCMIN: break;
+// case NS_rtf::LN_FCMAC: break;
+// case NS_rtf::LN_CSW: break;
+// case NS_rtf::LN_WMAGICCREATED: break;
+// case NS_rtf::LN_WMAGICREVISED: break;
+// case NS_rtf::LN_WMAGICCREATEDPRIVATE: break;
+// case NS_rtf::LN_WMAGICREVISEDPRIVATE: break;
+// case NS_rtf::LN_PNFBPCHPFIRST_W6: break;
+// case NS_rtf::LN_PNCHPFIRST_W6: break;
+// case NS_rtf::LN_CPNBTECHP_W6: break;
+// case NS_rtf::LN_PNFBPPAPFIRST_W6: break;
+// case NS_rtf::LN_PNPAPFIRST_W6: break;
+// case NS_rtf::LN_CPNBTEPAP_W6: break;
+// case NS_rtf::LN_PNFBPLVCFIRST_W6: break;
+// case NS_rtf::LN_PNLVCFIRST_W6: break;
+// case NS_rtf::LN_CPNBTELVC_W6: break;
+// case NS_rtf::LN_LIDFE: break;
+// case NS_rtf::LN_CLW: break;
+// case NS_rtf::LN_CBMAC: break;
+// case NS_rtf::LN_LPRODUCTCREATED: break;
+// case NS_rtf::LN_LPRODUCTREVISED: break;
+// case NS_rtf::LN_CCPTEXT: break;
+// case NS_rtf::LN_CCPFTN: break;
+// case NS_rtf::LN_CCPHDD: break;
+// case NS_rtf::LN_CCPMCR: break;
+// case NS_rtf::LN_CCPATN: break;
+// case NS_rtf::LN_CCPEDN: break;
+// case NS_rtf::LN_CCPTXBX: break;
+// case NS_rtf::LN_CCPHDRTXBX: break;
+// case NS_rtf::LN_PNFBPCHPFIRST: break;
+// case NS_rtf::LN_PNCHPFIRST: break;
+// case NS_rtf::LN_CPNBTECHP: break;
+// case NS_rtf::LN_PNFBPPAPFIRST: break;
+// case NS_rtf::LN_PNPAPFIRST: break;
+// case NS_rtf::LN_CPNBTEPAP: break;
+// case NS_rtf::LN_PNFBPLVCFIRST: break;
+// case NS_rtf::LN_PNLVCFIRST: break;
+// case NS_rtf::LN_CPNBTELVC: break;
+// case NS_rtf::LN_FCISLANDFIRST: break;
+// case NS_rtf::LN_FCISLANDLIM: break;
+// case NS_rtf::LN_CFCLCB: break;
+// case NS_rtf::LN_FCSTSHFORIG: break;
+// case NS_rtf::LN_LCBSTSHFORIG: break;
+// case NS_rtf::LN_FCSTSHF: break;
+// case NS_rtf::LN_LCBSTSHF: break;
+// case NS_rtf::LN_FCPLCFFNDREF: break;
+// case NS_rtf::LN_LCBPLCFFNDREF: break;
+// case NS_rtf::LN_FCPLCFFNDTXT: break;
+// case NS_rtf::LN_LCBPLCFFNDTXT: break;
+// case NS_rtf::LN_FCPLCFANDREF: break;
+// case NS_rtf::LN_LCBPLCFANDREF: break;
+// case NS_rtf::LN_FCPLCFANDTXT: break;
+// case NS_rtf::LN_LCBPLCFANDTXT: break;
+// case NS_rtf::LN_FCPLCFSED: break;
+// case NS_rtf::LN_LCBPLCFSED: break;
+// case NS_rtf::LN_FCPLCFPAD: break;
+// case NS_rtf::LN_LCBPLCFPAD: break;
+// case NS_rtf::LN_FCPLCFPHE: break;
+// case NS_rtf::LN_LCBPLCFPHE: break;
+// case NS_rtf::LN_FCSTTBFGLSY: break;
+// case NS_rtf::LN_LCBSTTBFGLSY: break;
+// case NS_rtf::LN_FCPLCFGLSY: break;
+// case NS_rtf::LN_LCBPLCFGLSY: break;
+// case NS_rtf::LN_FCPLCFHDD: break;
+// case NS_rtf::LN_LCBPLCFHDD: break;
+// case NS_rtf::LN_FCPLCFBTECHPX: break;
+// case NS_rtf::LN_LCBPLCFBTECHPX: break;
+// case NS_rtf::LN_FCPLCFBTEPAPX: break;
+// case NS_rtf::LN_LCBPLCFBTEPAPX: break;
+// case NS_rtf::LN_FCPLCFSEA: break;
+// case NS_rtf::LN_LCBPLCFSEA: break;
+// case NS_rtf::LN_FCSTTBFFFN: break;
+// case NS_rtf::LN_LCBSTTBFFFN: break;
+// case NS_rtf::LN_FCPLCFFLDMOM: break;
+// case NS_rtf::LN_LCBPLCFFLDMOM: break;
+// case NS_rtf::LN_FCPLCFFLDHDR: break;
+// case NS_rtf::LN_LCBPLCFFLDHDR: break;
+// case NS_rtf::LN_FCPLCFFLDFTN: break;
+// case NS_rtf::LN_LCBPLCFFLDFTN: break;
+// case NS_rtf::LN_FCPLCFFLDATN: break;
+// case NS_rtf::LN_LCBPLCFFLDATN: break;
+// case NS_rtf::LN_FCPLCFFLDMCR: break;
+// case NS_rtf::LN_LCBPLCFFLDMCR: break;
+// case NS_rtf::LN_FCSTTBFBKMK: break;
+// case NS_rtf::LN_LCBSTTBFBKMK: break;
+// case NS_rtf::LN_FCPLCFBKF: break;
+// case NS_rtf::LN_LCBPLCFBKF: break;
+// case NS_rtf::LN_FCPLCFBKL: break;
+// case NS_rtf::LN_LCBPLCFBKL: break;
+// case NS_rtf::LN_FCCMDS: break;
+// case NS_rtf::LN_LCBCMDS: break;
+// case NS_rtf::LN_FCPLCMCR: break;
+// case NS_rtf::LN_LCBPLCMCR: break;
+// case NS_rtf::LN_FCSTTBFMCR: break;
+// case NS_rtf::LN_LCBSTTBFMCR: break;
+// case NS_rtf::LN_FCPRDRVR: break;
+// case NS_rtf::LN_LCBPRDRVR: break;
+// case NS_rtf::LN_FCPRENVPORT: break;
+// case NS_rtf::LN_LCBPRENVPORT: break;
+// case NS_rtf::LN_FCPRENVLAND: break;
+// case NS_rtf::LN_LCBPRENVLAND: break;
+// case NS_rtf::LN_FCWSS: break;
+// case NS_rtf::LN_LCBWSS: break;
+// case NS_rtf::LN_FCDOP: break;
+// case NS_rtf::LN_LCBDOP: break;
+// case NS_rtf::LN_FCSTTBFASSOC: break;
+// case NS_rtf::LN_LCBSTTBFASSOC: break;
+// case NS_rtf::LN_FCCLX: break;
+// case NS_rtf::LN_LCBCLX: break;
+// case NS_rtf::LN_FCPLCFPGDFTN: break;
+// case NS_rtf::LN_LCBPLCFPGDFTN: break;
+// case NS_rtf::LN_FCAUTOSAVESOURCE: break;
+// case NS_rtf::LN_LCBAUTOSAVESOURCE: break;
+// case NS_rtf::LN_FCGRPXSTATNOWNERS: break;
+// case NS_rtf::LN_LCBGRPXSTATNOWNERS: break;
+// case NS_rtf::LN_FCSTTBFATNBKMK: break;
+// case NS_rtf::LN_LCBSTTBFATNBKMK: break;
+// case NS_rtf::LN_FCPLCDOAMOM: break;
+// case NS_rtf::LN_LCBPLCDOAMOM: break;
+// case NS_rtf::LN_FCPLCDOAHDR: break;
+// case NS_rtf::LN_LCBPLCDOAHDR: break;
+// case NS_rtf::LN_FCPLCSPAMOM: break;
+// case NS_rtf::LN_LCBPLCSPAMOM: break;
+// case NS_rtf::LN_FCPLCSPAHDR: break;
+// case NS_rtf::LN_LCBPLCSPAHDR: break;
+// case NS_rtf::LN_FCPLCFATNBKF: break;
+// case NS_rtf::LN_LCBPLCFATNBKF: break;
+// case NS_rtf::LN_FCPLCFATNBKL: break;
+// case NS_rtf::LN_LCBPLCFATNBKL: break;
+// case NS_rtf::LN_FCPMS: break;
+// case NS_rtf::LN_LCBPMS: break;
+// case NS_rtf::LN_FCFORMFLDSTTBF: break;
+// case NS_rtf::LN_LCBFORMFLDSTTBF: break;
+// case NS_rtf::LN_FCPLCFENDREF: break;
+// case NS_rtf::LN_LCBPLCFENDREF: break;
+// case NS_rtf::LN_FCPLCFENDTXT: break;
+// case NS_rtf::LN_LCBPLCFENDTXT: break;
+// case NS_rtf::LN_FCPLCFFLDEDN: break;
+// case NS_rtf::LN_LCBPLCFFLDEDN: break;
+// case NS_rtf::LN_FCPLCFPGDEDN: break;
+// case NS_rtf::LN_LCBPLCFPGDEDN: break;
+// case NS_rtf::LN_FCDGGINFO: break;
+// case NS_rtf::LN_LCBDGGINFO: break;
+// case NS_rtf::LN_FCSTTBFRMARK: break;
+// case NS_rtf::LN_LCBSTTBFRMARK: break;
+// case NS_rtf::LN_FCSTTBFCAPTION: break;
+// case NS_rtf::LN_LCBSTTBFCAPTION: break;
+// case NS_rtf::LN_FCSTTBFAUTOCAPTION: break;
+// case NS_rtf::LN_LCBSTTBFAUTOCAPTION: break;
+// case NS_rtf::LN_FCPLCFWKB: break;
+// case NS_rtf::LN_LCBPLCFWKB: break;
+// case NS_rtf::LN_FCPLCFSPL: break;
+// case NS_rtf::LN_LCBPLCFSPL: break;
+// case NS_rtf::LN_FCPLCFTXBXTXT: break;
+// case NS_rtf::LN_LCBPLCFTXBXTXT: break;
+// case NS_rtf::LN_FCPLCFFLDTXBX: break;
+// case NS_rtf::LN_LCBPLCFFLDTXBX: break;
+// case NS_rtf::LN_FCPLCFHDRTXBXTXT: break;
+// case NS_rtf::LN_LCBPLCFHDRTXBXTXT: break;
+// case NS_rtf::LN_FCPLCFFLDHDRTXBX: break;
+// case NS_rtf::LN_LCBPLCFFLDHDRTXBX: break;
+// case NS_rtf::LN_FCSTWUSER: break;
+// case NS_rtf::LN_LCBSTWUSER: break;
+// case NS_rtf::LN_FCSTTBTTMBD: break;
+// case NS_rtf::LN_LCBSTTBTTMBD: break;
+// case NS_rtf::LN_FCUNUSED: break;
+// case NS_rtf::LN_LCBUNUSED: break;
+// case NS_rtf::LN_FCPGDMOTHER: break;
+// case NS_rtf::LN_LCBPGDMOTHER: break;
+// case NS_rtf::LN_FCBKDMOTHER: break;
+// case NS_rtf::LN_LCBBKDMOTHER: break;
+// case NS_rtf::LN_FCPGDFTN: break;
+// case NS_rtf::LN_LCBPGDFTN: break;
+// case NS_rtf::LN_FCBKDFTN: break;
+// case NS_rtf::LN_LCBBKDFTN: break;
+// case NS_rtf::LN_FCPGDEDN: break;
+// case NS_rtf::LN_LCBPGDEDN: break;
+// case NS_rtf::LN_FCBKDEDN: break;
+// case NS_rtf::LN_LCBBKDEDN: break;
+// case NS_rtf::LN_FCSTTBFINTLFLD: break;
+// case NS_rtf::LN_LCBSTTBFINTLFLD: break;
+// case NS_rtf::LN_FCROUTESLIP: break;
+// case NS_rtf::LN_LCBROUTESLIP: break;
+// case NS_rtf::LN_FCSTTBSAVEDBY: break;
+// case NS_rtf::LN_LCBSTTBSAVEDBY: break;
+// case NS_rtf::LN_FCSTTBFNM: break;
+// case NS_rtf::LN_LCBSTTBFNM: break;
+// case NS_rtf::LN_FCPLCFLST: break;
+// case NS_rtf::LN_LCBPLCFLST: break;
+// case NS_rtf::LN_FCPLFLFO: break;
+// case NS_rtf::LN_LCBPLFLFO: break;
+// case NS_rtf::LN_FCPLCFTXBXBKD: break;
+// case NS_rtf::LN_LCBPLCFTXBXBKD: break;
+// case NS_rtf::LN_FCPLCFTXBXHDRBKD: break;
+// case NS_rtf::LN_LCBPLCFTXBXHDRBKD: break;
+// case NS_rtf::LN_FCDOCUNDO: break;
+// case NS_rtf::LN_LCBDOCUNDO: break;
+// case NS_rtf::LN_FCRGBUSE: break;
+// case NS_rtf::LN_LCBRGBUSE: break;
+// case NS_rtf::LN_FCUSP: break;
+// case NS_rtf::LN_LCBUSP: break;
+// case NS_rtf::LN_FCUSKF: break;
+// case NS_rtf::LN_LCBUSKF: break;
+// case NS_rtf::LN_FCPLCUPCRGBUSE: break;
+// case NS_rtf::LN_LCBPLCUPCRGBUSE: break;
+// case NS_rtf::LN_FCPLCUPCUSP: break;
+// case NS_rtf::LN_LCBPLCUPCUSP: break;
+// case NS_rtf::LN_FCSTTBGLSYSTYLE: break;
+// case NS_rtf::LN_LCBSTTBGLSYSTYLE: break;
+// case NS_rtf::LN_FCPLGOSL: break;
+// case NS_rtf::LN_LCBPLGOSL: break;
+// case NS_rtf::LN_FCPLCOCX: break;
+// case NS_rtf::LN_LCBPLCOCX: break;
+// case NS_rtf::LN_FCPLCFBTELVC: break;
+// case NS_rtf::LN_LCBPLCFBTELVC: break;
+// case NS_rtf::LN_DWLOWDATETIME: break;
+// case NS_rtf::LN_DWHIGHDATETIME: break;
+// case NS_rtf::LN_FCPLCFLVC: break;
+// case NS_rtf::LN_LCBPLCFLVC: break;
+// case NS_rtf::LN_FCPLCASUMY: break;
+// case NS_rtf::LN_LCBPLCASUMY: break;
+// case NS_rtf::LN_FCPLCFGRAM: break;
+// case NS_rtf::LN_LCBPLCFGRAM: break;
+// case NS_rtf::LN_FCSTTBLISTNAMES: break;
+// case NS_rtf::LN_LCBSTTBLISTNAMES: break;
+// case NS_rtf::LN_FCSTTBFUSSR: break;
+// case NS_rtf::LN_LCBSTTBFUSSR: break;
+// case NS_rtf::LN_FN: break;
+// case NS_rtf::LN_FCSEPX: break;
+// case NS_rtf::LN_FNMPR: break;
+// case NS_rtf::LN_FCMPR: break;
+// case NS_rtf::LN_ICOFORE: break;
+// case NS_rtf::LN_ICOBACK: break;
+// case NS_rtf::LN_IPAT: break;
+// case NS_rtf::LN_SHDFORECOLOR: break;
+// case NS_rtf::LN_SHDBACKCOLOR: break;
+// case NS_rtf::LN_SHDPATTERN: break;
+// case NS_rtf::LN_DPTLINEWIDTH: break;
+// case NS_rtf::LN_BRCTYPE: break;
+// case NS_rtf::LN_ICO: break;
+// case NS_rtf::LN_DPTSPACE: break;
+// case NS_rtf::LN_FSHADOW: break;
+// case NS_rtf::LN_FFRAME: break;
+// case NS_rtf::LN_UNUSED2_15: break;
+// case NS_rtf::LN_FFIRSTMERGED: break;
+// case NS_rtf::LN_FMERGED: break;
+// case NS_rtf::LN_FVERTICAL: break;
+// case NS_rtf::LN_FBACKWARD: break;
+// case NS_rtf::LN_FROTATEFONT: break;
+// case NS_rtf::LN_FVERTMERGE: break;
+// case NS_rtf::LN_FVERTRESTART: break;
+// case NS_rtf::LN_VERTALIGN: break;
+// case NS_rtf::LN_FUNUSED: break;
+// case NS_rtf::LN_WUNUSED: break;
+// case NS_rtf::LN_BRCTOP: break;
+// case NS_rtf::LN_BRCLEFT: break;
+// case NS_rtf::LN_BRCBOTTOM: break;
+// case NS_rtf::LN_BRCRIGHT: break;
+// case NS_rtf::LN_IBKL: break;
+// case NS_rtf::LN_ITCFIRST: break;
+// case NS_rtf::LN_FPUB: break;
+// case NS_rtf::LN_ITCLIM: break;
+// case NS_rtf::LN_FCOL: break;
+// case NS_rtf::LN_LINECOLOR: break;
+// case NS_rtf::LN_LINEWIDTH: break;
+// case NS_rtf::LN_LINETYPE: break;
+// case NS_rtf::LN_MM: break;
+// case NS_rtf::LN_XEXT: break;
+// case NS_rtf::LN_YEXT: break;
+// case NS_rtf::LN_HMF: break;
+// case NS_rtf::LN_LCB: break;
+// case NS_rtf::LN_CBHEADER: break;
+// case NS_rtf::LN_MFP: break;
+// case NS_rtf::LN_BM_RCWINMF: break;
+// case NS_rtf::LN_DXAGOAL: break;
+// case NS_rtf::LN_DYAGOAL: break;
+// case NS_rtf::LN_MX: break;
+// case NS_rtf::LN_MY: break;
+// case NS_rtf::LN_DXACROPLEFT: break;
+// case NS_rtf::LN_DYACROPTOP: break;
+// case NS_rtf::LN_DXACROPRIGHT: break;
+// case NS_rtf::LN_DYACROPBOTTOM: break;
+// case NS_rtf::LN_BRCL: break;
+// case NS_rtf::LN_FFRAMEEMPTY: break;
+// case NS_rtf::LN_FBITMAP: break;
+// case NS_rtf::LN_FDRAWHATCH: break;
+// case NS_rtf::LN_FERROR: break;
+// case NS_rtf::LN_BPP: break;
+// case NS_rtf::LN_DXAORIGIN: break;
+// case NS_rtf::LN_DYAORIGIN: break;
+// case NS_rtf::LN_CPROPS: break;
+// case NS_rtf::LN_LINEPROPSTOP: break;
+// case NS_rtf::LN_LINEPROPSLEFT: break;
+// case NS_rtf::LN_LINEPROPSBOTTOM: break;
+// case NS_rtf::LN_LINEPROPSRIGHT: break;
+// case NS_rtf::LN_LINEPROPSHORIZONTAL: break;
+// case NS_rtf::LN_LINEPROPSVERTICAL: break;
+// case NS_rtf::LN_headerr: break;
+// case NS_rtf::LN_footerr: break;
+// case NS_rtf::LN_endnote: break;
+// case NS_rtf::LN_BOOKMARKNAME: break;
+
+// case NS_rtf::LN_LISTLEVEL: break;
+// case NS_rtf::LN_LFO: break;
+// case NS_rtf::LN_F: break;
+// case NS_rtf::LN_ALTFONTNAME: break;
+// case NS_rtf::LN_XSZFFN: break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_XSTZNAME:
+ m_pImpl->m_pCurrentEntry->sStyleName1 = sValue;
+ if (m_pImpl->m_pCurrentEntry->sStyleIdentifierI.getLength())
+ m_pImpl->m_pCurrentEntry->sStyleIdentifierI = sValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_XSTZNAME1:
+ m_pImpl->m_pCurrentEntry->sStyleName = sValue;
+ if (m_pImpl->m_pCurrentEntry->sStyleIdentifierI.getLength())
+ m_pImpl->m_pCurrentEntry->sStyleIdentifierI = sValue;
+ break;
+// case NS_rtf::LN_UPXSTART: break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_UPX:
+ resolveAttributeProperties(val);
+ break;
+// case NS_rtf::LN_sed: break;
+// case NS_rtf::LN_picf: break;
+
+// case NS_rtf::LN_rgbrc: break;
+// case NS_rtf::LN_shd: break;
+// case NS_rtf::LN_cellShd: break;
+// case NS_rtf::LN_cellTopColor: break;
+// case NS_rtf::LN_cellLeftColor: break;
+// case NS_rtf::LN_cellBottomColor: break;
+// case NS_rtf::LN_cellRightColor: break;
+
+// case NS_rtf::LN_LISTTABLE: break;
+// case NS_rtf::LN_LFOTABLE: break;
+// case NS_rtf::LN_StyleSheetTable: break;
+// case NS_rtf::LN_STYLESHEET: break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_type:
+ {
+/* defaults should be set at the service "com.sun.star.text.Defaults"
+ if (nIntValue == 1)
+ *(m_pImpl->m_pCurrentEntry->pProperties) = *(m_pImpl->m_pDefaultParaProps);
+ else if (nIntValue == 2)
+ *(m_pImpl->m_pCurrentEntry->pProperties) = *(m_pImpl->m_pDefaultCharProps);*/
+ StyleType nType = ( StyleType ) nIntValue;
+ if ( nType == STYLE_TYPE_TABLE )
+ {
+ StyleSheetEntryPtr pEntry = m_pImpl->m_pCurrentEntry;
+ TableStyleSheetEntryPtr pTableEntry( new TableStyleSheetEntry( *pEntry.get( ), this ) );
+ m_pImpl->m_pCurrentEntry = pTableEntry;
+ }
+ else
+ m_pImpl->m_pCurrentEntry->nStyleTypeCode = (StyleType)nIntValue;
+ break;
+ }
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_default:
+ m_pImpl->m_pCurrentEntry->bIsDefaultStyle = (nIntValue != 0);
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_customStyle:
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_styleId:
+ m_pImpl->m_pCurrentEntry->sStyleIdentifierI = sValue;
+ m_pImpl->m_pCurrentEntry->sStyleIdentifierD = sValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblWidth_w:
+ dynamic_cast< StyleSheetPropertyMap* >( m_pImpl->m_pCurrentEntry->pProperties.get() )->SetCT_TblWidth_w( nIntValue );
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblWidth_type:
+ dynamic_cast< StyleSheetPropertyMap* >( m_pImpl->m_pCurrentEntry->pProperties.get() )->SetCT_TblWidth_type( nIntValue );
+ break;
+ default:
+ {
+ //----> debug
+ int nVal = val.getInt();
+ ++nVal;
+ //<---- debug
+ }
+ break;
+ }
+}
+/*-- 19.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void StyleSheetTable::sprm(Sprm & rSprm)
+{
+ sal_uInt32 nSprmId = rSprm.getId();
+ Value::Pointer_t pValue = rSprm.getValue();
+ sal_Int32 nIntValue = pValue.get() ? pValue->getInt() : 0;
+ (void)nIntValue;
+ rtl::OUString sStringValue = pValue.get() ? pValue->getString() : rtl::OUString();
+ //printf ( "StyleSheetTable::sprm(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)nSprmId, (unsigned int)nIntValue, ::rtl::OUStringToOString(sStringValue, RTL_TEXTENCODING_DONTKNOW).getStr());
+
+ /* WRITERFILTERSTATUS: table: StyleSheetTable_sprm */
+ switch(nSprmId)
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_name:
+ //this is only a UI name!
+ m_pImpl->m_pCurrentEntry->sStyleName = sStringValue;
+ m_pImpl->m_pCurrentEntry->sStyleName1 = sStringValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_basedOn:
+ m_pImpl->m_pCurrentEntry->sBaseStyleIdentifier = sStringValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_next:
+ m_pImpl->m_pCurrentEntry->sNextStyleIdentifier = sStringValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_aliases:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_link:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_autoRedefine:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_hidden:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_uiPriority:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_semiHidden:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_unhideWhenUsed:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_qFormat:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_locked:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_personal:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_personalCompose:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_personalReply:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_rsid:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_trPr:
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_tblStylePr: //contains to table properties
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ TblStylePrHandlerPtr pTblStylePrHandler( new TblStylePrHandler( m_pImpl->m_rDMapper ) );
+ pProperties->resolve( *pTblStylePrHandler );
+
+ // Add the properties to the table style
+ TblStyleType nType = pTblStylePrHandler->getType( );
+ PropertyMapPtr pProps = pTblStylePrHandler->getProperties( );
+ StyleSheetEntryPtr pEntry = m_pImpl->m_pCurrentEntry;
+ TableStyleSheetEntry* pTableEntry = static_cast<TableStyleSheetEntry*>( pEntry.get( ) );
+ pTableEntry->AddTblStylePr( nType, pProps );
+ }
+ break;
+ }
+ case NS_ooxml::LN_CT_Style_tcPr:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_tblPr: //contains table properties
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_DocDefaults_pPrDefault:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_DocDefaults_rPrDefault:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblPrBase_tblInd: //table properties - at least width value and type
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_EG_RPrBase_rFonts: //table fonts
+ resolveSprmProps(rSprm);
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_PPrDefault_pPr:
+ m_pImpl->m_rDMapper.PushStyleSheetProperties( m_pImpl->m_pDefaultParaProps );
+ m_pImpl->m_rDMapper.sprm( rSprm );
+ m_pImpl->m_rDMapper.PopStyleSheetProperties();
+ applyDefaults( true );
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_RPrDefault_rPr:
+ m_pImpl->m_rDMapper.PushStyleSheetProperties( m_pImpl->m_pDefaultCharProps );
+ m_pImpl->m_rDMapper.sprm( rSprm );
+ m_pImpl->m_rDMapper.PopStyleSheetProperties();
+ applyDefaults( false );
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblPrBase_jc: //table alignment - row properties!
+ m_pImpl->m_pCurrentEntry->pProperties->Insert( PROP_HORI_ORIENT, false,
+ uno::makeAny( ConversionHelper::convertTableJustification( nIntValue )));
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TrPrBase_jc: //table alignment - row properties!
+ dynamic_cast< StyleSheetPropertyMap* >( m_pImpl->m_pCurrentEntry->pProperties.get() )->SetCT_TrPrBase_jc(nIntValue);
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ 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.get())
+ {
+ BorderHandlerPtr pBorderHandler( new BorderHandler(m_pImpl->m_rDMapper.IsOOXMLImport()) );
+ pProperties->resolve(*pBorderHandler);
+ m_pImpl->m_pCurrentEntry->pProperties->insert( pBorderHandler->getProperties(), true );
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_TblPrBase_tblStyleRowBandSize:
+ case NS_ooxml::LN_CT_TblPrBase_tblStyleColBandSize:
+ {
+ StyleSheetEntry* pEntry = m_pImpl->m_pCurrentEntry.get( );
+ TableStyleSheetEntry *pTEntry = static_cast<TableStyleSheetEntry*>( pEntry );
+ if ( pTEntry )
+ {
+ if ( nSprmId == NS_ooxml::LN_CT_TblPrBase_tblStyleRowBandSize )
+ pTEntry->m_nRowBandSize = nIntValue;
+ else
+ pTEntry->m_nColBandSize = nIntValue;
+ }
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_pPr:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Style_rPr:
+ default:
+ if (!m_pImpl->m_pCurrentEntry)
+ break;
+ TablePropertiesHandlerPtr pTblHandler( new TablePropertiesHandler( true ) );
+ pTblHandler->SetProperties( m_pImpl->m_pCurrentEntry->pProperties );
+ if ( !pTblHandler->sprm( rSprm ) )
+ {
+ m_pImpl->m_rDMapper.PushStyleSheetProperties( m_pImpl->m_pCurrentEntry->pProperties );
+ m_pImpl->m_rDMapper.sprm( rSprm );
+ m_pImpl->m_rDMapper.PopStyleSheetProperties( );
+ }
+ }
+}
+/*-- 19.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void StyleSheetTable::entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ //create a new style entry
+ // printf("StyleSheetTable::entry(...)\n");
+ 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.getLength() >0)
+ {
+ 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
+ }
+ StyleSheetEntryPtr pEmptyEntry;
+ m_pImpl->m_pCurrentEntry = pEmptyEntry;
+}
+/*-- 21.06.2006 15:34:49---------------------------------------------------
+ sorting helper
+ -----------------------------------------------------------------------*/
+typedef std::vector< beans::PropertyValue > _PropValVector;
+class PropValVector : public _PropValVector
+{
+public:
+ PropValVector(){}
+
+ void Insert( beans::PropertyValue aVal );
+ uno::Sequence< uno::Any > getValues();
+ uno::Sequence< ::rtl::OUString > getNames();
+};
+void PropValVector::Insert( beans::PropertyValue aVal )
+{
+ _PropValVector::iterator aIt = begin();
+ while(aIt != end())
+ {
+ if(aIt->Name > aVal.Name)
+ {
+ insert( aIt, aVal );
+ return;
+ }
+ ++aIt;
+ }
+ push_back( aVal );
+}
+uno::Sequence< uno::Any > PropValVector::getValues()
+{
+ uno::Sequence< uno::Any > aRet( size() );
+ uno::Any* pValues = aRet.getArray();
+ sal_Int32 nVal = 0;
+ _PropValVector::iterator aIt = begin();
+ while(aIt != end())
+ {
+ pValues[nVal++] = aIt->Value;
+ ++aIt;
+ }
+ return aRet;
+}
+uno::Sequence< ::rtl::OUString > PropValVector::getNames()
+{
+ uno::Sequence< ::rtl::OUString > aRet( size() );
+ ::rtl::OUString* pNames = aRet.getArray();
+ sal_Int32 nVal = 0;
+ _PropValVector::iterator aIt = begin();
+ while(aIt != end())
+ {
+ pNames[nVal++] = aIt->Name;
+ ++aIt;
+ }
+ return aRet;
+}
+/*-- 21.06.2006 13:35:48---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void StyleSheetTable::ApplyStyleSheets( 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;
+
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ xStyleFamilies->getByName(rPropNameSupplier.GetName( PROP_CHARACTER_STYLES )) >>= xCharStyles;
+ xStyleFamilies->getByName(rPropNameSupplier.GetName( PROP_PARAGRAPH_STYLES )) >>= xParaStyles;
+ if(xCharStyles.is() && xParaStyles.is())
+ {
+ std::vector< StyleSheetEntryPtr >::iterator aIt = m_pImpl->m_aStyleSheetEntries.begin();
+ while( aIt != m_pImpl->m_aStyleSheetEntries.end() )
+ {
+ StyleSheetEntryPtr pEntry = *aIt;
+ if( pEntry->nStyleTypeCode == STYLE_TYPE_CHAR || pEntry->nStyleTypeCode == STYLE_TYPE_PARA )
+ {
+ bool bParaStyle = pEntry->nStyleTypeCode == STYLE_TYPE_PARA;
+ bool bInsert = false;
+ uno::Reference< container::XNameContainer > xStyles = bParaStyle ? xParaStyles : xCharStyles;
+ uno::Reference< style::XStyle > xStyle;
+ ::rtl::OUString sConvertedStyleName = ConvertStyleName( pEntry->sStyleName );
+ if(xStyles->hasByName( sConvertedStyleName ))
+ xStyles->getByName( sConvertedStyleName ) >>= xStyle;
+ else
+ {
+ bInsert = true;
+ xStyle = uno::Reference< style::XStyle >(xDocFactory->createInstance(
+ bParaStyle ?
+ rPropNameSupplier.GetName( PROP_SERVICE_PARA_STYLE ) :
+ rPropNameSupplier.GetName( PROP_SERVICE_CHAR_STYLE )),
+ uno::UNO_QUERY_THROW);
+ }
+ if( pEntry->sBaseStyleIdentifier.getLength() )
+ {
+ try
+ {
+ //TODO: Handle cases where a paragraph <> character style relation is needed
+ StyleSheetEntryPtr pParent = FindStyleSheetByISTD( pEntry->sBaseStyleIdentifier );
+ xStyle->setParentStyle(ConvertStyleName( pParent->sStyleName ));
+ }
+ catch( const uno::RuntimeException& )
+ {
+ OSL_ENSURE( false, "Styles parent could not be set");
+ }
+ }
+ else if( bParaStyle )
+ {
+ //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, true, aTwoHundredFortyTwip, false);
+ // western font not already set -> apply first font
+ const FontEntry* pWesternFontEntry = rFontTable->getFontEntry( 0 );
+ rtl::OUString sWesternFontName = pWesternFontEntry->sFontName;
+ pEntry->pProperties->Insert(PROP_CHAR_FONT_NAME, true, uno::makeAny( sWesternFontName ), false);
+
+ // CJK ... apply second font
+ const FontEntry* pCJKFontEntry = rFontTable->getFontEntry( 2 );
+ pEntry->pProperties->Insert(PROP_CHAR_FONT_NAME_ASIAN, true, uno::makeAny( pCJKFontEntry->sFontName ), false);
+ pEntry->pProperties->Insert(PROP_CHAR_HEIGHT_ASIAN, true, aTwoHundredFortyTwip, false);
+ // CTL ... apply third font, if available
+ if( nFontCount > 3 )
+ {
+ const FontEntry* pCTLFontEntry = rFontTable->getFontEntry( 3 );
+ pEntry->pProperties->Insert(PROP_CHAR_FONT_NAME_COMPLEX, true, uno::makeAny( pCTLFontEntry->sFontName ), false);
+ pEntry->pProperties->Insert(PROP_CHAR_HEIGHT_COMPLEX, true, aTwoHundredFortyTwip, false);
+ }
+ }
+ // Widow/Orphan -> set both to two if not already set
+ uno::Any aTwo = uno::makeAny(sal_Int8(2));
+ pEntry->pProperties->Insert(PROP_PARA_WIDOWS, true, aTwo, false);
+ pEntry->pProperties->Insert(PROP_PARA_ORPHANS, true, aTwo, false);
+ // Left-to-right direction if not already set
+ pEntry->pProperties->Insert(PROP_WRITING_MODE, true, uno::makeAny( sal_Int16(text::WritingMode_LR_TB) ), false);
+ // font color COL_AUTO if not already set
+ pEntry->pProperties->Insert(PROP_CHAR_COLOR, true, uno::makeAny( sal_Int32(0xffffffff) ), false);
+ }
+
+ uno::Sequence< beans::PropertyValue > aPropValues = pEntry->pProperties->GetPropertyValues();
+ bool bAddFollowStyle = false;
+ if(bParaStyle && !pEntry->sNextStyleIdentifier.getLength() )
+ {
+ bAddFollowStyle = true;
+ }
+ //remove Left/RightMargin values from TOX heading styles
+ if( bParaStyle )
+ {
+ // Set the outline levels
+ const StyleSheetPropertyMap* pStyleSheetProperties = dynamic_cast<const StyleSheetPropertyMap*>(pEntry ? pEntry->pProperties.get() : 0);
+ if ( pStyleSheetProperties && pStyleSheetProperties->GetOutlineLevel( ) >= 0 )
+ {
+ sal_Int16 nLvl = pStyleSheetProperties->GetOutlineLevel( );
+ uno::Reference< text::XChapterNumberingSupplier > xOutlines ( m_pImpl->m_xTextDocument,
+ uno::UNO_QUERY_THROW );
+ uno::Reference< container::XIndexReplace > xRules = xOutlines->getChapterNumberingRules( );
+ uno::Any aLevel = xRules->getByIndex( nLvl );
+ uno::Sequence< beans::PropertyValue > aLevelProps;
+ aLevel >>= aLevelProps;
+
+ sal_Int32 nLen = aLevelProps.getLength( );
+ sal_Int32 i = 0;
+ bool bPropFound = false;
+ rtl::OUString sPropName( rtl::OUString::createFromAscii( "HeadingStyleName" ) );
+ while ( i < nLen && !bPropFound )
+ {
+ if ( aLevelProps[i].Name.equals( sPropName ) )
+ {
+ aLevelProps[i].Value = uno::makeAny( ConvertStyleName( pEntry->sStyleName ) );
+ bPropFound = true;
+ }
+ i++;
+ }
+ xRules->replaceByIndex( nLvl, uno::makeAny( aLevelProps ) );
+ }
+
+ uno::Reference< beans::XPropertyState >xState( xStyle, uno::UNO_QUERY_THROW );
+ if( sConvertedStyleName.equalsAscii( "Contents Heading" ) ||
+ sConvertedStyleName.equalsAscii( "User Index Heading" ) ||
+ sConvertedStyleName.equalsAscii( "Index Heading" ))
+ {
+ //left margin is set to NULL by default
+ uno::Reference< beans::XPropertyState >xState1( xStyle, uno::UNO_QUERY_THROW );
+ xState1->setPropertyToDefault(rPropNameSupplier.GetName( PROP_PARA_LEFT_MARGIN ));
+ }
+ else if( sConvertedStyleName.equalsAscii( "Text body" ) )
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_PARA_BOTTOM_MARGIN ));
+ else if( sConvertedStyleName.equalsAscii( "Heading 1" ) ||
+ sConvertedStyleName.equalsAscii( "Heading 2" ) ||
+ sConvertedStyleName.equalsAscii( "Heading 3" ) ||
+ sConvertedStyleName.equalsAscii( "Heading 4" ) ||
+ sConvertedStyleName.equalsAscii( "Heading 5" ) ||
+ sConvertedStyleName.equalsAscii( "Heading 6" ) ||
+ sConvertedStyleName.equalsAscii( "Heading 7" ) ||
+ sConvertedStyleName.equalsAscii( "Heading 8" ) ||
+ sConvertedStyleName.equalsAscii( "Heading 9" ) )
+ {
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_WEIGHT ));
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_WEIGHT_ASIAN ));
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_WEIGHT_COMPLEX ));
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_POSTURE ));
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_POSTURE_ASIAN ));
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_POSTURE_COMPLEX ));
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_PROP_HEIGHT ));
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_PROP_HEIGHT_ASIAN ));
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_PROP_HEIGHT_COMPLEX));
+
+ }
+ }
+
+ if(bAddFollowStyle || aPropValues.getLength())
+ {
+ PropValVector aSortedPropVals;
+ for( sal_Int32 nProp = 0; nProp < aPropValues.getLength(); ++nProp)
+ {
+ // Don't add the style name properties
+ bool bIsParaStyleName = aPropValues[nProp].Name.equalsAscii( "ParaStyleName" );
+ bool bIsCharStyleName = aPropValues[nProp].Name.equalsAscii( "CharStyleName" );
+ if ( !bInsert && !bIsParaStyleName && !bIsCharStyleName )
+ aSortedPropVals.Insert( aPropValues[nProp] );
+ }
+ if(bAddFollowStyle)
+ {
+ //find the name of the Next style
+ std::vector< StyleSheetEntryPtr >::iterator aNextStyleIt = m_pImpl->m_aStyleSheetEntries.begin();
+ for( ; aNextStyleIt != m_pImpl->m_aStyleSheetEntries.end(); ++aNextStyleIt )
+ {
+ if( ( *aNextStyleIt )->sStyleName.getLength() &&
+ ( *aNextStyleIt )->sStyleName == pEntry->sNextStyleIdentifier)
+ {
+ beans::PropertyValue aNew;
+ aNew.Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FollowStyle"));
+ aNew.Value = uno::makeAny(ConvertStyleName( ( *aNextStyleIt )->sStyleIdentifierD ));
+ aSortedPropVals.Insert( aNew );
+ break;
+ }
+ }
+ }
+
+ try
+ {
+ uno::Reference< beans::XMultiPropertySet > xMultiPropertySet( xStyle, uno::UNO_QUERY_THROW);
+ xMultiPropertySet->setPropertyValues( aSortedPropVals.getNames(), aSortedPropVals.getValues() );
+ }
+ catch( const beans::UnknownPropertyException& rUnknown)
+ {
+ (void) rUnknown;
+ OSL_ENSURE( false, "Some style properties could not be set");
+ }
+ catch( const lang::WrappedTargetException& rWrapped)
+ {
+ (void) rWrapped;
+ OSL_ENSURE( false, "Some style properties could not be set");
+ }
+ }
+ if(bInsert)
+ xStyles->insertByName( sConvertedStyleName, uno::makeAny( xStyle) );
+ }
+ ++aIt;
+ }
+ }
+ }
+ catch( uno::Exception& rEx)
+ {
+ (void)rEx;
+ OSL_ENSURE( false, "Styles could not be imported completely");
+ }
+}
+/*-- 22.06.2006 15:56:56---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+const StyleSheetEntryPtr StyleSheetTable::FindStyleSheetByISTD(const ::rtl::OUString& sIndex)
+{
+ StyleSheetEntryPtr pRet;
+ for( sal_uInt32 nPos = 0; nPos < m_pImpl->m_aStyleSheetEntries.size(); ++nPos )
+ {
+ if( m_pImpl->m_aStyleSheetEntries[nPos]->sStyleIdentifierD == sIndex)
+ {
+ pRet = m_pImpl->m_aStyleSheetEntries[nPos];
+ break;
+ }
+ }
+ return pRet;
+}
+/*-- 28.12.2007 14:45:45---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+const StyleSheetEntryPtr StyleSheetTable::FindStyleSheetByStyleName(const ::rtl::OUString& sIndex)
+{
+ StyleSheetEntryPtr pRet;
+ for( sal_uInt32 nPos = 0; nPos < m_pImpl->m_aStyleSheetEntries.size(); ++nPos )
+ {
+ if( m_pImpl->m_aStyleSheetEntries[nPos]->sStyleName == sIndex)
+ {
+ pRet = m_pImpl->m_aStyleSheetEntries[nPos];
+ break;
+ }
+ }
+ return pRet;
+}
+/*-- 28.12.2007 14:45:45---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+const StyleSheetEntryPtr StyleSheetTable::FindStyleSheetByConvertedStyleName(const ::rtl::OUString& sIndex)
+{
+ StyleSheetEntryPtr pRet;
+ for( sal_uInt32 nPos = 0; nPos < m_pImpl->m_aStyleSheetEntries.size(); ++nPos )
+ {
+ if( m_pImpl->m_aStyleSheetEntries[nPos]->sConvertedStyleName == sIndex)
+ {
+ pRet = m_pImpl->m_aStyleSheetEntries[nPos];
+ break;
+ }
+ }
+ return pRet;
+}
+
+/*-- 17.07.2006 11:47:00---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+const StyleSheetEntryPtr StyleSheetTable::FindParentStyleSheet(::rtl::OUString sBaseStyle)
+{
+ if( !sBaseStyle.getLength() )
+ {
+ StyleSheetEntryPtr pEmptyPtr;
+ return pEmptyPtr;
+ }
+ if( m_pImpl->m_pCurrentEntry)
+ sBaseStyle = m_pImpl->m_pCurrentEntry->sBaseStyleIdentifier;
+
+ return FindStyleSheetByISTD( sBaseStyle );
+}
+/*-- 21.12.2006 15:58:23---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+static const sal_Char *aStyleNamePairs[] =
+{
+ "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",
+ "Heading1", "Heading 1",
+ "Heading2", "Heading 2",
+ "Heading3", "Heading 3",
+ "Heading4", "Heading 4",
+ "Heading5", "Heading 5",
+ "Heading6", "Heading 6",
+ "Heading7", "Heading 7",
+ "Heading8", "Heading 8",
+ "Heading9", "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",
+ "TOC Heading", "Contents Heading",
+ "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",
+ "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 anchor",
+ "Annotation Reference", "",
+ "Line Number", "Line numbering",
+ "Page Number", "Page Number",
+ "Endnote Reference", "Endnote anchor",
+ "Endnote Text", "Endnote Symbol",
+ "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",
+ "Followed Hyperlink", "Visited Internet Link",
+ "Strong", "Strong Emphasis",
+ "Emphasis", "Emphasis",
+ "Document Map", "",
+ "Plain Text", "",
+ "NoList", "No List",
+ "AbstractHeading", "Abstract Heading",
+ "AbstractBody", "Abstract Body",
+ "PageNumber", "page number"
+ "TableNormal", "Normal Table",
+ "DocumentMap", "Document Map"
+};
+
+
+::rtl::OUString StyleSheetTable::ConvertStyleName( const ::rtl::OUString& rWWName, bool bExtendedSearch)
+{
+ ::rtl::OUString sRet( rWWName );
+ if( bExtendedSearch )
+ {
+ //search for the rWWName in the IdentifierD of the existing styles and convert the sStyleName member
+ std::vector< StyleSheetEntryPtr >::iterator aIt = m_pImpl->m_aStyleSheetEntries.begin();
+ //TODO: performance issue - put styles list into a map sorted by it's sStyleIdentifierD members
+ while( aIt != m_pImpl->m_aStyleSheetEntries.end() )
+ {
+ if( rWWName == ( *aIt )->sStyleIdentifierD )
+ sRet = ( *aIt )->sStyleName;
+ ++aIt;
+ }
+ }
+ if(!m_pImpl->m_aStyleNameMap.size())
+ {
+ for( sal_uInt32 nPair = 0; nPair < sizeof(aStyleNamePairs) / sizeof( sal_Char*) / 2; ++nPair)
+ {
+ m_pImpl->m_aStyleNameMap.insert( StringPairMap_t::value_type(
+ ::rtl::OUString::createFromAscii(aStyleNamePairs[2 * nPair]),
+ ::rtl::OUString::createFromAscii(aStyleNamePairs[2 * nPair + 1]) ));
+ }
+ }
+ StringPairMap_t::iterator aIt = m_pImpl->m_aStyleNameMap.find( sRet );
+ if(aIt != m_pImpl->m_aStyleNameMap.end() && aIt->second.getLength())
+ sRet = aIt->second;
+ return sRet;
+}
+
+::rtl::OUString StyleSheetTable::GetStyleIdFromIndex(const sal_uInt32 sti)
+{
+ ::rtl::OUString sRet;
+ if (sti >= (sizeof(aStyleNamePairs) / sizeof( sal_Char*) / 2))
+ sRet = ::rtl::OUString();
+ else
+ sRet = ::rtl::OUString::createFromAscii(aStyleNamePairs[2 * sti]);
+ return sRet;
+}
+
+void StyleSheetTable::resolveSprmProps(Sprm & rSprm)
+{
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+}
+
+void StyleSheetTable::resolveAttributeProperties(Value & val)
+{
+ writerfilter::Reference<Properties>::Pointer_t pProperties = val.getProperties();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+}
+/*-- 18.07.2007 15:59:34---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void StyleSheetTable::applyDefaults(bool bParaProperties)
+{
+ try{
+ if(!m_pImpl->m_xTextDefaults.is())
+ {
+ m_pImpl->m_xTextDefaults = uno::Reference< beans::XPropertySet>(
+ m_pImpl->m_rDMapper.GetTextFactory()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.Defaults"))),
+ uno::UNO_QUERY_THROW );
+ }
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ if( bParaProperties && m_pImpl->m_pDefaultParaProps.get() && m_pImpl->m_pDefaultParaProps->size())
+ {
+ PropertyMap::iterator aMapIter = m_pImpl->m_pDefaultParaProps->begin();
+ for( ; aMapIter != m_pImpl->m_pDefaultParaProps->end(); ++aMapIter )
+ {
+ try
+ {
+ m_pImpl->m_xTextDefaults->setPropertyValue(rPropNameSupplier.GetName( aMapIter->first.eId ), aMapIter->second);
+ }
+ catch( const uno::Exception& )
+ {
+ OSL_ENSURE( false, "setPropertyValue exception");
+ }
+ }
+ }
+ if( !bParaProperties && m_pImpl->m_pDefaultCharProps.get() && m_pImpl->m_pDefaultCharProps->size())
+ {
+ PropertyMap::iterator aMapIter = m_pImpl->m_pDefaultCharProps->begin();
+ for( ; aMapIter != m_pImpl->m_pDefaultCharProps->end(); ++aMapIter )
+ {
+ try
+ {
+ m_pImpl->m_xTextDefaults->setPropertyValue(rPropNameSupplier.GetName( aMapIter->first.eId ), aMapIter->second);
+ }
+ catch( const uno::Exception& )
+ {
+ OSL_ENSURE( false, "setPropertyValue exception");
+ }
+ }
+ }
+ }
+ catch( const uno::Exception& )
+ {
+ }
+}
+/*-- 05.02.2008 10:27:36---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::rtl::OUString StyleSheetTable::getOrCreateCharStyle( PropertyValueVector_t& rCharProperties )
+{
+ //find out if any of the styles already has the required properties then return it's name
+ ::rtl::OUString sListLabel = m_pImpl->HasListCharStyle(rCharProperties);
+ if( sListLabel.getLength() )
+ 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(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharacterStyles"))) >>= xCharStyles;
+ //search for all character styles with the name sListLabel + <index>
+ sal_Int32 nStyleFound = 0;
+ uno::Sequence< ::rtl::OUString > aStyleNames = xCharStyles->getElementNames();
+ const ::rtl::OUString* pStyleNames = aStyleNames.getConstArray();
+ for( sal_Int32 nStyle = 0; nStyle < aStyleNames.getLength(); ++nStyle )
+ {
+ if( pStyleNames[nStyle].matchAsciiL( cListLabel, sizeof( cListLabel ) - 1 ))
+ {
+ ::rtl::OUString sSuffix = pStyleNames[nStyle].copy( sizeof( cListLabel ) - 1 );
+ sal_Int32 nSuffix = sSuffix.toInt32();
+ if( nSuffix > 0 )
+ {
+ if( nSuffix > nStyleFound )
+ nStyleFound = nSuffix;
+ }
+ }
+ }
+ sListLabel = ::rtl::OUString::createFromAscii( cListLabel );
+ sListLabel += ::rtl::OUString::valueOf( ++nStyleFound );
+ //create a new one otherwise
+ uno::Reference< lang::XMultiServiceFactory > xDocFactory( m_pImpl->m_xTextDocument, uno::UNO_QUERY_THROW );
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ try
+ {
+ uno::Reference< style::XStyle > xStyle( xDocFactory->createInstance(
+ rPropNameSupplier.GetName( PROP_SERVICE_CHAR_STYLE )), uno::UNO_QUERY_THROW);
+ //uno::Reference< container::XNamed >xNamed( xStyle, uno::UNO_QUERY_THROW );
+ //xNamed->setName( sListLabel );
+ uno::Reference< beans::XPropertySet > xStyleProps(xStyle, uno::UNO_QUERY_THROW );
+ PropertyValueVector_t::const_iterator aCharPropIter = rCharProperties.begin();
+ while( aCharPropIter != rCharProperties.end())
+ {
+ try
+ {
+ xStyleProps->setPropertyValue( aCharPropIter->Name, aCharPropIter->Value );
+ }
+ catch( const uno::Exception& rEx )
+ {
+ (void)rEx;
+ OSL_ENSURE( false, "Exception in StyleSheetTable::getOrCreateCharStyle - Style::setPropertyValue");
+ }
+ ++aCharPropIter;
+ }
+ xCharStyles->insertByName( sListLabel, uno::makeAny( xStyle) );
+ m_pImpl->m_aListCharStylePropertyVector.push_back( ListCharStylePropertyMap_t( sListLabel, rCharProperties ));
+ }
+ catch( const uno::Exception& rEx )
+ {
+ (void)rEx;
+ OSL_ENSURE( false, "Exception in StyleSheetTable::getOrCreateCharStyle");
+ }
+
+ return sListLabel;
+}
+
+}//namespace dmapper
+}//namespace writerfilter
diff --git a/writerfilter/source/dmapper/StyleSheetTable.hxx b/writerfilter/source/dmapper/StyleSheetTable.hxx
new file mode 100644
index 000000000000..0dd31ed52f9d
--- /dev/null
+++ b/writerfilter/source/dmapper/StyleSheetTable.hxx
@@ -0,0 +1,150 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_STYLESHEETTABLE_HXX
+#define INCLUDED_STYLESHEETTABLE_HXX
+
+#include "TblStylePrHandler.hxx"
+
+#include <WriterFilterDllApi.hxx>
+#include <dmapper/DomainMapper.hxx>
+#include <com/sun/star/lang/XComponent.hpp>
+#include <PropertyMap.hxx>
+#include <FontTable.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+
+namespace com{ namespace sun { namespace star { namespace text{
+ class XTextDocument;
+}}}}
+
+
+namespace writerfilter {
+namespace dmapper
+{
+
+
+enum StyleType
+{
+ STYLE_TYPE_UNKNOWN,
+ STYLE_TYPE_PARA,
+ STYLE_TYPE_CHAR,
+ STYLE_TYPE_TABLE,
+ STYLE_LIST
+};
+
+struct StyleSheetTable_Impl;
+struct StyleSheetEntry
+{
+ ::rtl::OUString sStyleIdentifierI;
+ ::rtl::OUString sStyleIdentifierD;
+ bool bIsDefaultStyle;
+ bool bInvalidHeight;
+ bool bHasUPE; //universal property expansion
+ StyleType nStyleTypeCode; //sgc
+ ::rtl::OUString sBaseStyleIdentifier;
+ ::rtl::OUString sNextStyleIdentifier;
+ ::rtl::OUString sStyleName;
+ ::rtl::OUString sStyleName1;
+ PropertyMapPtr pProperties;
+ ::rtl::OUString sConvertedStyleName;
+ StyleSheetEntry();
+};
+
+typedef boost::shared_ptr<StyleSheetEntry> StyleSheetEntryPtr;
+
+class DomainMapper;
+class WRITERFILTER_DLLPRIVATE StyleSheetTable :
+ public Properties,
+ public Table
+{
+ StyleSheetTable_Impl *m_pImpl;
+
+public:
+ StyleSheetTable( DomainMapper& rDMapper,
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextDocument> xTextDocument );
+ virtual ~StyleSheetTable();
+
+ // Properties
+ virtual void attribute(Id Name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ // Table
+ virtual void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
+ void ApplyStyleSheets( FontTablePtr rFontTable );
+ const StyleSheetEntryPtr FindStyleSheetByISTD(const ::rtl::OUString& sIndex);
+ const StyleSheetEntryPtr FindStyleSheetByStyleName(const ::rtl::OUString& rIndex);
+ const StyleSheetEntryPtr FindStyleSheetByConvertedStyleName(const ::rtl::OUString& rIndex);
+ // returns the parent of the one with the given name - if empty the parent of the current style sheet is returned
+ const StyleSheetEntryPtr FindParentStyleSheet(::rtl::OUString sBaseStyle);
+
+ ::rtl::OUString ConvertStyleName( const ::rtl::OUString& rWWName, bool bExtendedSearch = false );
+ ::rtl::OUString GetStyleIdFromIndex(const sal_uInt32 sti);
+
+ ::rtl::OUString getOrCreateCharStyle( PropertyValueVector_t& rCharProperties );
+
+private:
+ void resolveAttributeProperties(Value & val);
+ void resolveSprmProps(Sprm & sprm_);
+ void applyDefaults(bool bParaProperties);
+};
+typedef boost::shared_ptr< StyleSheetTable > StyleSheetTablePtr;
+
+
+class WRITERFILTER_DLLPRIVATE TableStyleSheetEntry :
+ public StyleSheetEntry
+{
+private:
+ typedef std::map<TblStyleType, PropertyMapPtr> TblStylePrs;
+
+ StyleSheetTable* m_pStyleSheet;
+ TblStylePrs m_aStyles;
+
+public:
+
+ short m_nColBandSize;
+ short m_nRowBandSize;
+
+ // Adds a new tblStylePr to the table style entry. This method
+ // fixes some possible properties conflicts, like borders ones.
+ void AddTblStylePr( TblStyleType nType, PropertyMapPtr pProps );
+
+ // Gets all the properties
+ // + corresponding to the mask,
+ // + from the parent styles
+ PropertyMapPtr GetProperties( sal_Int32 nMask );
+
+ TableStyleSheetEntry( StyleSheetEntry& aEntry, StyleSheetTable* pStyles );
+ ~TableStyleSheetEntry( );
+
+protected:
+ PropertyMapPtr GetLocalPropertiesFromMask( sal_Int32 nMask );
+};
+typedef boost::shared_ptr<TableStyleSheetEntry> TableStyleSheetEntryPtr;
+
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/TDefTableHandler.cxx b/writerfilter/source/dmapper/TDefTableHandler.cxx
new file mode 100644
index 000000000000..c65ce2cdb784
--- /dev/null
+++ b/writerfilter/source/dmapper/TDefTableHandler.cxx
@@ -0,0 +1,323 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <TDefTableHandler.hxx>
+#include <PropertyMap.hxx>
+#include <ConversionHelper.hxx>
+#include <ooxml/resourceids.hxx>
+#include <doctok/resourceids.hxx>
+#include <com/sun/star/table/BorderLine.hpp>
+#include <com/sun/star/text/TableColumnSeparator.hpp>
+#include <com/sun/star/text/VertOrientation.hpp>
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+TDefTableHandler::TDefTableHandler(bool bOOXML) :
+ m_nLineWidth(0),
+ m_nLineType(0),
+ m_nLineColor(0),
+ m_nLineDistance(0),
+ m_bOOXML( bOOXML )
+{
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+TDefTableHandler::~TDefTableHandler()
+{
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void TDefTableHandler::attribute(Id rName, Value & rVal)
+{
+ sal_Int32 nIntValue = rVal.getInt();
+ (void)nIntValue;
+ (void)rName;
+ /* WRITERFILTERSTATUS: table: TDefTable_attributedata */
+ switch( rName )
+ {
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_rtf::LN_cellx:
+ // nIntValue contains the vert. line position
+ //TODO: nIntValue is wrong for negative values!
+ if( nIntValue > 0x7fff )
+ nIntValue -= 0xffff;
+ m_aCellBorderPositions.push_back( ConversionHelper::convertTwipToMM100( nIntValue ) );
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_tc:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rVal.getProperties();
+ if( pProperties.get())
+ {
+ pProperties->resolve( *this );
+ }
+ }
+ break;
+ //from LN_tc
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FFIRSTMERGED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FMERGED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FVERTICAL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FBACKWARD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FROTATEFONT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FVERTMERGE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FVERTRESTART:
+ break;
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_rtf::LN_VERTALIGN:
+ //TODO: m_aCellVertAlign is just a temporary solution! 0 - top 1 - center 2 - bottom
+ m_aCellVertAlign.push_back( nIntValue );
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FUNUSED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_CellPrefferedSize:
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCTOP:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCLEFT:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCBOTTOM:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCRIGHT:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rVal.getProperties();
+ localResolve( rName, pProperties );
+ }
+ break;
+ //from LN_BRCXXXX - handled within the BorderHandler
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_DPTLINEWIDTH: // 0x2871
+ // width of a single line in 1/8 pt, max of 32 pt -> twip * 5 / 2.
+ m_nLineWidth = ConversionHelper::convertTwipToMM100( nIntValue * 5 / 2 );
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCTYPE: // 0x2872
+ m_nLineType = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Border_color:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_ICO: // 0x2873
+ m_nLineColor = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_DPTSPACE: // 0x2874
+ m_nLineDistance = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FSHADOW: // 0x2875
+ //if 1 then line has shadow - unsupported
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FFRAME: // 0x2876
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_UNUSED2_15: // 0x2877
+ // ignored
+ break;
+ case NS_ooxml::LN_CT_Border_themeColor:
+ case NS_ooxml::LN_CT_Border_themeTint:
+ case NS_ooxml::LN_CT_Border_themeShade:
+ // ignored
+ break;
+ default:
+ OSL_ENSURE(false, "unknown attribute");
+ }
+}
+/*-- 08.10.2007 12:55:32---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void TDefTableHandler::localResolve(Id rName, writerfilter::Reference<Properties>::Pointer_t pProperties)
+{
+ if( pProperties.get())
+ {
+ m_nLineWidth = m_nLineType = m_nLineColor = m_nLineDistance = 0;
+ pProperties->resolve( *this );
+ table::BorderLine aBorderLine;
+ ConversionHelper::MakeBorderLine( m_nLineWidth, m_nLineType, m_nLineColor,
+ aBorderLine, m_bOOXML );
+
+ /* WRITERFILTERSTATUS: table: TDefTable_localresolve */
+ switch( rName )
+ {
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TcBorders_top:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCTOP:
+ m_aTopBorderLines.push_back(aBorderLine);
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TcBorders_left:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCLEFT:
+ m_aLeftBorderLines.push_back(aBorderLine);
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TcBorders_bottom:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCBOTTOM:
+ m_aBottomBorderLines.push_back(aBorderLine);
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TcBorders_right:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCRIGHT:
+ m_aRightBorderLines.push_back(aBorderLine);
+ break;
+ case NS_ooxml::LN_CT_TcBorders_insideH:
+ m_aInsideHBorderLines.push_back(aBorderLine);
+ break;
+ case NS_ooxml::LN_CT_TcBorders_insideV:
+ m_aInsideVBorderLines.push_back(aBorderLine);
+ break;
+ default:;
+ }
+ }
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void TDefTableHandler::sprm(Sprm & rSprm)
+{
+ /* WRITERFILTERSTATUS: table: TDefTable_sprm */
+ switch( rSprm.getId() )
+ {
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TcBorders_top:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TcBorders_left:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TcBorders_bottom:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TcBorders_right:
+ 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:;
+ }
+}
+/*-- 24.04.2007 09:09:01---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+PropertyMapPtr TDefTableHandler::getRowProperties() const
+{
+ PropertyMapPtr pPropertyMap(new PropertyMap);
+
+ // Writer only wants the separators, Word provides also the outer border positions
+ if( m_aCellBorderPositions.size() > 2 )
+ {
+ //determine table width
+ double nFullWidth = m_aCellBorderPositions[m_aCellBorderPositions.size() - 1] - m_aCellBorderPositions[0];
+ //the positions have to be distibuted in a range of 10000
+ const double nFullWidthRelative = 10000.;
+ uno::Sequence< text::TableColumnSeparator > aSeparators( m_aCellBorderPositions.size() - 2 );
+ text::TableColumnSeparator* pSeparators = aSeparators.getArray();
+ for( sal_uInt32 nBorder = 1; nBorder < m_aCellBorderPositions.size() - 1; ++nBorder )
+ {
+ sal_Int16 nRelPos =
+ sal::static_int_cast< sal_Int16 >(double(m_aCellBorderPositions[nBorder]) * nFullWidthRelative / nFullWidth );
+
+ pSeparators[nBorder - 1].Position = nRelPos;
+ pSeparators[nBorder - 1].IsVisible = sal_True;
+ }
+ pPropertyMap->Insert( PROP_TABLE_COLUMN_SEPARATORS, false, uno::makeAny( aSeparators ) );
+ }
+
+ return pPropertyMap;
+}
+/*-- 10.05.2007 16:10:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void TDefTableHandler::fillCellProperties(
+ size_t nCell, ::boost::shared_ptr< TablePropertyMap > pCellProperties ) const
+{
+ if( m_aCellBorderPositions.size() > nCell )
+ {
+ sal_Int16 nVertOrient = text::VertOrientation::NONE;
+ switch( m_aCellVertAlign[nCell] ) //0 - top 1 - center 2 - bottom
+ {
+ case 1: nVertOrient = text::VertOrientation::CENTER; break;
+ case 2: nVertOrient = text::VertOrientation::BOTTOM; break;
+ default:;
+ }
+ pCellProperties->Insert( PROP_VERT_ORIENT, false, uno::makeAny( nVertOrient ) );
+ }
+ if( m_aTopBorderLines.size() > nCell )
+ pCellProperties->Insert( PROP_TOP_BORDER, false, uno::makeAny( m_aTopBorderLines[nCell] ) );
+ if( m_aLeftBorderLines.size() > nCell )
+ pCellProperties->Insert( PROP_LEFT_BORDER, false, uno::makeAny( m_aLeftBorderLines[nCell] ) );
+ if( m_aBottomBorderLines.size() > nCell )
+ pCellProperties->Insert( PROP_BOTTOM_BORDER, false, uno::makeAny( m_aBottomBorderLines[nCell] ) );
+ if( m_aRightBorderLines.size() > nCell )
+ pCellProperties->Insert( PROP_RIGHT_BORDER, false, uno::makeAny( m_aRightBorderLines[nCell] ) );
+ if( m_aInsideHBorderLines.size() > nCell )
+ pCellProperties->Insert( META_PROP_HORIZONTAL_BORDER, false, uno::makeAny( m_aInsideHBorderLines[nCell] ) );
+ if( m_aInsideVBorderLines.size() > nCell )
+ pCellProperties->Insert( META_PROP_VERTICAL_BORDER, false, uno::makeAny( m_aInsideVBorderLines[nCell] ) );
+}
+/*-- 09.05.2007 13:14:17---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Int32 TDefTableHandler::getTableWidth() const
+{
+ sal_Int32 nWidth = 0;
+ if( m_aCellBorderPositions.size() > 1 )
+ {
+ //determine table width
+ nWidth = m_aCellBorderPositions[m_aCellBorderPositions.size() - 1] - m_aCellBorderPositions[0];
+ }
+ return nWidth;
+}
+/*-- 10.05.2007 16:09:10---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+size_t TDefTableHandler::getCellCount() const
+{
+ return m_aCellVertAlign.size();
+}
+
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/TDefTableHandler.hxx b/writerfilter/source/dmapper/TDefTableHandler.hxx
new file mode 100644
index 000000000000..993b49251a77
--- /dev/null
+++ b/writerfilter/source/dmapper/TDefTableHandler.hxx
@@ -0,0 +1,86 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_TDEFTABLEHANDLER_HXX
+#define INCLUDED_TDEFTABLEHANDLER_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <boost/shared_ptr.hpp>
+#include <com/sun/star/table/BorderLine.hpp>
+#include <vector>
+namespace com{ namespace sun{ namespace star{namespace table {
+ struct BorderLine;
+}}}}
+
+namespace writerfilter {
+namespace dmapper
+{
+class PropertyMap;
+class TablePropertyMap;
+class WRITERFILTER_DLLPRIVATE TDefTableHandler : public Properties
+{
+public:
+
+private:
+ ::std::vector<sal_Int32> m_aCellBorderPositions;
+ ::std::vector<sal_Int32> m_aCellVertAlign;
+
+ ::std::vector< ::com::sun::star::table::BorderLine > m_aLeftBorderLines;
+ ::std::vector< ::com::sun::star::table::BorderLine > m_aRightBorderLines;
+ ::std::vector< ::com::sun::star::table::BorderLine > m_aTopBorderLines;
+ ::std::vector< ::com::sun::star::table::BorderLine > m_aBottomBorderLines;
+ ::std::vector< ::com::sun::star::table::BorderLine > m_aInsideHBorderLines;
+ ::std::vector< ::com::sun::star::table::BorderLine > m_aInsideVBorderLines;
+ ::std::vector< ::com::sun::star::table::BorderLine > m_aTl2brBorderLines;
+ ::std::vector< ::com::sun::star::table::BorderLine > m_aTr2blBorderLines;
+
+ //values of the current border
+ sal_Int32 m_nLineWidth;
+ sal_Int32 m_nLineType;
+ sal_Int32 m_nLineColor;
+ sal_Int32 m_nLineDistance;
+
+ bool m_bOOXML;
+
+ void localResolve(Id Name, writerfilter::Reference<Properties>::Pointer_t pProperties);
+public:
+ TDefTableHandler( bool bOOXML );
+ virtual ~TDefTableHandler();
+
+ // Properties
+ virtual void attribute(Id Name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ size_t getCellCount() const;
+ void fillCellProperties( size_t nCell, ::boost::shared_ptr< TablePropertyMap > pCellProperties) const;
+ ::boost::shared_ptr<PropertyMap> getRowProperties() const;
+ sal_Int32 getTableWidth() const;
+};
+typedef boost::shared_ptr< TDefTableHandler > TDefTableHandlerPtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/TablePropertiesHandler.cxx b/writerfilter/source/dmapper/TablePropertiesHandler.cxx
new file mode 100644
index 000000000000..e3739b56e636
--- /dev/null
+++ b/writerfilter/source/dmapper/TablePropertiesHandler.cxx
@@ -0,0 +1,217 @@
+#include "BorderHandler.hxx"
+#include "CellColorHandler.hxx"
+#include "CellMarginHandler.hxx"
+#include "ConversionHelper.hxx"
+#include "MeasureHandler.hxx"
+#include "TablePropertiesHandler.hxx"
+#include "TDefTableHandler.hxx"
+
+#include <ooxml/resourceids.hxx>
+#include <doctok/sprmids.hxx>
+
+#include <com/sun/star/text/SizeType.hpp>
+#include <com/sun/star/text/VertOrientation.hpp>
+
+
+namespace writerfilter {
+namespace dmapper {
+
+ TablePropertiesHandler::TablePropertiesHandler( bool bOOXML ) :
+ m_pTableManager( NULL ),
+ m_bOOXML( bOOXML )
+ {
+ }
+
+
+ TablePropertiesHandler::~TablePropertiesHandler( )
+ {
+ // Do not delete the table manager... this will be done somewhere else
+ m_pTableManager = NULL;
+ }
+
+ bool TablePropertiesHandler::sprm(Sprm & rSprm)
+ {
+ bool bRet = true;
+ sal_uInt32 nSprmId = rSprm.getId();
+ Value::Pointer_t pValue = rSprm.getValue();
+ sal_Int32 nIntValue = ((pValue.get() != NULL) ? pValue->getInt() : 0);
+ /* WRITERFILTERSTATUS: table: table_sprmdata */
+ switch( nSprmId )
+ {
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 2 */
+ case NS_ooxml::LN_CT_TrPrBase_jc: //90706
+ /* WRITERFILTERSTATUS: done: 1, planned: 0.5, spent: 0.5 */
+ case NS_ooxml::LN_CT_TblPrBase_jc:
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 2 */
+ case 0x5400: // sprmTJc
+ {
+ //table justification 0: left, 1: center, 2: right
+ sal_Int16 nOrient = ConversionHelper::convertTableJustification( nIntValue );
+ TablePropertyMapPtr pTableMap( new TablePropertyMap );
+ pTableMap->setValue( TablePropertyMap::HORI_ORIENT, nOrient );
+ insertTableProps( pTableMap );
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ case 0x9601: // sprmTDxaLeft
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case 0x9602: // sprmTDxaGapHalf
+ {
+ //m_nGapHalf = ConversionHelper::convertTwipToMM100( nIntValue );
+ TablePropertyMapPtr pPropMap( new TablePropertyMap );
+ pPropMap->setValue( TablePropertyMap::GAP_HALF, ConversionHelper::convertTwipToMM100( nIntValue ) );
+ insertTableProps(pPropMap);
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 2 */
+ case NS_ooxml::LN_CT_TrPrBase_trHeight: //90703
+ {
+ //contains unit and value
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ { //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, false, uno::makeAny( pMeasureHandler->GetRowHeightSizeType() ));
+ pPropMap->Insert( PROP_HEIGHT, false, uno::makeAny(pMeasureHandler->getMeasureValue() ));
+ insertRowProps(pPropMap);
+ }
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case 0x3403: // sprmTFCantSplit
+ case NS_sprm::LN_TCantSplit: // 0x3644
+ {
+ //row can't break across pages if nIntValue == 1
+ TablePropertyMapPtr pPropMap( new TablePropertyMap );
+ pPropMap->Insert( PROP_IS_SPLIT_ALLOWED, false, uno::makeAny(sal_Bool( nIntValue == 1 ? sal_False : sal_True ) ));
+ insertRowProps(pPropMap);
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case 0x9407: // sprmTDyaRowHeight
+ {
+ // table row height - negative values indicate 'exact height' - positive 'at least'
+ TablePropertyMapPtr pPropMap( new TablePropertyMap );
+ bool bMinHeight = true;
+ sal_Int16 nHeight = static_cast<sal_Int16>( nIntValue );
+ if( nHeight < 0 )
+ {
+ bMinHeight = false;
+ nHeight *= -1;
+ }
+ pPropMap->Insert( PROP_SIZE_TYPE, false, uno::makeAny(bMinHeight ? text::SizeType::MIN : text::SizeType::FIX ));
+ pPropMap->Insert( PROP_HEIGHT, false, uno::makeAny(ConversionHelper::convertTwipToMM100( nHeight )));
+ insertRowProps(pPropMap);
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case NS_ooxml::LN_CT_TcPrBase_vAlign://90694
+ {
+ sal_Int16 nVertOrient = text::VertOrientation::NONE;
+ switch( nIntValue ) //0 - top 1 - center 3 - bottom
+ {
+ case 1: nVertOrient = text::VertOrientation::CENTER; break;
+ case 3: nVertOrient = text::VertOrientation::BOTTOM; break;
+ default:;
+ };
+ TablePropertyMapPtr pCellPropMap( new TablePropertyMap() );
+ pCellPropMap->Insert( PROP_VERT_ORIENT, false, uno::makeAny( nVertOrient ) );
+ //todo: in ooxml import the value of m_ncell is wrong
+ cellProps( pCellPropMap );
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ 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.get())
+ {
+ BorderHandlerPtr pBorderHandler( new BorderHandler(m_bOOXML) );
+ pProperties->resolve(*pBorderHandler);
+ TablePropertyMapPtr pTablePropMap( new TablePropertyMap );
+ pTablePropMap->insert( pBorderHandler->getProperties() );
+ insertTableProps( pTablePropMap );
+ }
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ 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.get())
+ {
+ //in OOXML there's one set of borders at each cell (if there is any)
+ TDefTableHandlerPtr pTDefTableHandler( new TDefTableHandler( m_bOOXML ));
+ pProperties->resolve( *pTDefTableHandler );
+ TablePropertyMapPtr pCellPropMap( new TablePropertyMap );
+ pTDefTableHandler->fillCellProperties( 0, pCellPropMap );
+ cellProps( pCellPropMap );
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_TblPrBase_shd:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ CellColorHandlerPtr pCellColorHandler( new CellColorHandler);
+ pProperties->resolve( *pCellColorHandler );
+ TablePropertyMapPtr pTablePropMap( new TablePropertyMap );
+ insertTableProps( pCellColorHandler->getProperties() );
+ }
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case 0xd61a : // sprmTCellTopColor
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case 0xd61b : // sprmTCellLeftColor
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case 0xd61c : // sprmTCellBottomColor
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case 0xd61d : // sprmTCellRightColor
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ 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.get())
+ {
+ CellColorHandlerPtr pCellColorHandler( new CellColorHandler );
+ pProperties->resolve( *pCellColorHandler );
+ cellProps( pCellColorHandler->getProperties());
+ }
+ }
+ break;
+//OOXML table properties
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ 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
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ CellMarginHandlerPtr pCellMarginHandler( new CellMarginHandler );
+ pProperties->resolve( *pCellMarginHandler );
+ 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;
+ default: bRet = false;
+ }
+ return bRet;
+ }
+}}
diff --git a/writerfilter/source/dmapper/TablePropertiesHandler.hxx b/writerfilter/source/dmapper/TablePropertiesHandler.hxx
new file mode 100644
index 000000000000..68fe40689702
--- /dev/null
+++ b/writerfilter/source/dmapper/TablePropertiesHandler.hxx
@@ -0,0 +1,83 @@
+#ifndef INCLUDED_TABLEPROPERTIESHANDLER_HXX
+#define INCLUDED_TABLEPROPERTIESHANDLER_HXX
+
+#include <PropertyMap.hxx>
+
+#include <resourcemodel/TableManager.hxx>
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+
+#include <boost/shared_ptr.hpp>
+
+#include <vector>
+
+namespace writerfilter {
+namespace dmapper {
+
+
+typedef ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > Handle_t;
+typedef TableManager<Handle_t , TablePropertyMapPtr > DomainMapperTableManager_Base_t;
+
+class TablePropertiesHandler
+{
+private:
+ vector< PropertyMapPtr > m_rPropertiesStack;
+ PropertyMapPtr m_pCurrentProperties;
+ DomainMapperTableManager_Base_t *m_pTableManager;
+ bool m_bOOXML;
+
+public:
+ TablePropertiesHandler( bool bOOXML );
+ virtual ~TablePropertiesHandler( );
+
+ bool sprm(Sprm & sprm);
+
+ inline void SetTableManager( DomainMapperTableManager_Base_t *pTableManager )
+ {
+ m_pTableManager = pTableManager;
+ };
+
+ inline void SetProperties( PropertyMapPtr pProperties )
+ {
+ m_pCurrentProperties = pProperties;
+ };
+
+private:
+
+ inline void cellProps( TablePropertyMapPtr pProps )
+ {
+ if ( m_pTableManager )
+ m_pTableManager->cellProps( pProps );
+ else
+ m_pCurrentProperties->insert( pProps, true );
+ };
+
+ inline void cellPropsByCell( unsigned int i, TablePropertyMapPtr pProps )
+ {
+ if ( m_pTableManager )
+ m_pTableManager->cellPropsByCell( i, pProps );
+ else
+ m_pCurrentProperties->insert( pProps, true );
+ };
+
+ inline void insertRowProps( TablePropertyMapPtr pProps )
+ {
+ if ( m_pTableManager )
+ m_pTableManager->insertRowProps( pProps );
+ else
+ m_pCurrentProperties->insert( pProps, true );
+ };
+
+ inline void insertTableProps( TablePropertyMapPtr pProps )
+ {
+ if ( m_pTableManager )
+ m_pTableManager->insertTableProps( pProps );
+ else
+ m_pCurrentProperties->insert( pProps, true );
+ };
+};
+typedef boost::shared_ptr<TablePropertiesHandler> TablePropertiesHandlerPtr;
+
+} }
+
+#endif
diff --git a/writerfilter/source/dmapper/TblStylePrHandler.cxx b/writerfilter/source/dmapper/TblStylePrHandler.cxx
new file mode 100644
index 000000000000..d6f790990e22
--- /dev/null
+++ b/writerfilter/source/dmapper/TblStylePrHandler.cxx
@@ -0,0 +1,69 @@
+#include <TblStylePrHandler.hxx>
+#include <PropertyMap.hxx>
+#include <ooxml/resourceids.hxx>
+
+namespace writerfilter {
+namespace dmapper {
+
+TblStylePrHandler::TblStylePrHandler( DomainMapper & rDMapper ) :
+ m_rDMapper( rDMapper ),
+ m_pTablePropsHandler( new TablePropertiesHandler( true ) ),
+ m_nType( TBL_STYLE_UNKNOWN ),
+ m_pProperties( new PropertyMap )
+{
+}
+
+TblStylePrHandler::~TblStylePrHandler( )
+{
+ delete m_pTablePropsHandler, m_pTablePropsHandler = NULL;
+}
+
+void TblStylePrHandler::attribute(Id rName, Value & rVal)
+{
+ switch ( rName )
+ {
+ case NS_ooxml::LN_CT_TblStyleOverrideType:
+ {
+ // The tokenid should be the same in the model.xml than
+ // in the TblStyleType enum
+ m_nType = TblStyleType( rVal.getInt( ) );
+ }
+ break;
+ }
+}
+
+void TblStylePrHandler::sprm(Sprm & rSprm)
+{
+ Value::Pointer_t pValue = rSprm.getValue();
+ 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:
+ resolveSprmProps( rSprm );
+ break;
+ default:
+ // Tables specific properties have to handled here
+ m_pTablePropsHandler->SetProperties( m_pProperties );
+ bool bRet = m_pTablePropsHandler->sprm( rSprm );
+
+ if ( !bRet )
+ {
+ // The DomainMapper can handle some of the properties
+ m_rDMapper.PushStyleSheetProperties( m_pProperties, true );
+ m_rDMapper.sprm( rSprm );
+ m_rDMapper.PopStyleSheetProperties( true );
+ }
+ }
+}
+
+void TblStylePrHandler::resolveSprmProps(Sprm & rSprm)
+{
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+}
+
+}}
diff --git a/writerfilter/source/dmapper/TblStylePrHandler.hxx b/writerfilter/source/dmapper/TblStylePrHandler.hxx
new file mode 100644
index 000000000000..dd8d2da97690
--- /dev/null
+++ b/writerfilter/source/dmapper/TblStylePrHandler.hxx
@@ -0,0 +1,64 @@
+#ifndef INCLUDED_TBLSTYLEPRHANDLER_HXX
+#define INCLUDED_TBLSTYLEPRHANDLER_HXX
+
+#include "TablePropertiesHandler.hxx"
+
+#include <dmapper/DomainMapper.hxx>
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <boost/shared_ptr.hpp>
+
+namespace writerfilter {
+namespace dmapper {
+
+class DomainMapper;
+class PropertyMap;
+
+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 WRITERFILTER_DLLPRIVATE TblStylePrHandler : public Properties
+{
+private:
+ DomainMapper & m_rDMapper;
+ TablePropertiesHandler * m_pTablePropsHandler;
+
+ TblStyleType m_nType;
+ PropertyMapPtr m_pProperties;
+
+public:
+ TblStylePrHandler( DomainMapper & rDMapper );
+ virtual ~TblStylePrHandler( );
+
+ // Properties
+ virtual void attribute(Id Name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ inline PropertyMapPtr getProperties() { return m_pProperties; };
+ inline TblStyleType getType() { return m_nType; };
+
+private:
+
+ void resolveSprmProps(Sprm & rSprm);
+};
+
+typedef boost::shared_ptr< TblStylePrHandler > TblStylePrHandlerPtr;
+
+}}
+
+#endif
diff --git a/writerfilter/source/dmapper/ThemeTable.cxx b/writerfilter/source/dmapper/ThemeTable.cxx
new file mode 100644
index 000000000000..cde3c0d39082
--- /dev/null
+++ b/writerfilter/source/dmapper/ThemeTable.cxx
@@ -0,0 +1,196 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_FONTTABLE_HXX
+#include <ThemeTable.hxx>
+#endif
+#ifndef INCLUDED_RESOURCESIDS
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#endif
+#include <stdio.h>
+
+namespace writerfilter {
+namespace dmapper
+{
+
+struct ThemeTable_Impl
+{
+ ThemeTable_Impl() :
+ m_currentThemeFontId(0),
+ m_currentFontThemeEntry() {}
+ std::map<sal_uInt32, std::map<sal_uInt32, ::rtl::OUString> > m_themeFontMap;
+ sal_uInt32 m_currentThemeFontId;
+ std::map<sal_uInt32, ::rtl::OUString> m_currentFontThemeEntry;
+};
+
+ThemeTable::ThemeTable() :
+ m_pImpl( new ThemeTable_Impl )
+{
+ // printf("ThemeTable::ThemeTable()\n");
+}
+
+ThemeTable::~ThemeTable()
+{
+ delete m_pImpl;
+}
+
+void ThemeTable::attribute(Id Name, Value & val)
+{
+ // int nIntValue = val.getInt();
+ ::rtl::OUString sValue = val.getString();
+ // printf ( "ThemeTable::attribute(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)Name, (unsigned int)nIntValue, ::rtl::OUStringToOString(sValue, RTL_TEXTENCODING_DONTKNOW).getStr());
+ /* WRITERFILTERSTATUS: table: ThemeTable_attributedata */
+ switch(Name)
+ {
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TextFont_typeface:
+ if (sValue.getLength())
+ m_pImpl->m_currentFontThemeEntry[m_pImpl->m_currentThemeFontId] = sValue;
+ break;
+ default:
+ {
+ }
+ }
+}
+
+void ThemeTable::sprm(Sprm& rSprm)
+{
+ sal_uInt32 nSprmId = rSprm.getId();
+ (void)nSprmId;
+
+ Value::Pointer_t pValue = rSprm.getValue();
+ sal_Int32 nIntValue = pValue->getInt();
+ (void)nIntValue;
+ rtl::OUString sStringValue = pValue->getString();
+
+ // printf ( "ThemeTable::sprm(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)nSprmId, (unsigned int)nIntValue, ::rtl::OUStringToOString(sStringValue, RTL_TEXTENCODING_DONTKNOW).getStr());
+
+ /* WRITERFILTERSTATUS: table: ThemeTable_sprm */
+ switch(nSprmId)
+ {
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_BaseStyles_fontScheme:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_FontScheme_majorFont:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_FontScheme_minorFont:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ m_pImpl->m_currentFontThemeEntry = std::map<sal_uInt32, rtl::OUString>();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+ m_pImpl->m_themeFontMap[nSprmId] = m_pImpl->m_currentFontThemeEntry;
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_FontCollection_latin:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_FontCollection_ea:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_FontCollection_cs:
+ {
+ m_pImpl->m_currentThemeFontId = nSprmId;
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ default:
+ {
+ }
+ }
+}
+
+void ThemeTable::entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ // printf ( "ThemeTable::entry\n");
+ ref->resolve(*this);
+}
+
+const ::rtl::OUString ThemeTable::getFontNameForTheme(const Id id) const
+{
+ std::map<sal_uInt32, ::rtl::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 ::rtl::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, ::rtl::OUString>::const_iterator Iter = tmpThemeFontMap.find(NS_ooxml::LN_CT_FontCollection_latin);
+ if (Iter != tmpThemeFontMap.end())
+ return (Iter)->second;
+ return ::rtl::OUString();
+ }
+ case NS_ooxml::LN_Value_ST_Theme_majorBidi:
+ case NS_ooxml::LN_Value_ST_Theme_minorBidi:
+ {
+ std::map<sal_uInt32, ::rtl::OUString>::const_iterator Iter = tmpThemeFontMap.find(NS_ooxml::LN_CT_FontCollection_cs);
+ if (Iter != tmpThemeFontMap.end())
+ return (Iter)->second;
+ return ::rtl::OUString();
+ }
+ case NS_ooxml::LN_Value_ST_Theme_majorEastAsia:
+ case NS_ooxml::LN_Value_ST_Theme_minorEastAsia:
+ {
+ std::map<sal_uInt32, ::rtl::OUString>::const_iterator Iter = tmpThemeFontMap.find(NS_ooxml::LN_CT_FontCollection_ea);
+ if (Iter != tmpThemeFontMap.end())
+ return (Iter)->second;
+ return ::rtl::OUString();
+ }
+ default:
+ return ::rtl::OUString();
+ }
+}
+
+}//namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/ThemeTable.hxx b/writerfilter/source/dmapper/ThemeTable.hxx
new file mode 100644
index 000000000000..b79877703c58
--- /dev/null
+++ b/writerfilter/source/dmapper/ThemeTable.hxx
@@ -0,0 +1,62 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_THEMETABLE_HXX
+#define INCLUDED_THEMETABLE_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <com/sun/star/lang/XComponent.hpp>
+#include <map>
+
+namespace writerfilter {
+namespace dmapper
+{
+
+struct ThemeTable_Impl;
+
+class WRITERFILTER_DLLPRIVATE ThemeTable : public Properties, public Table
+{
+ ThemeTable_Impl *m_pImpl;
+
+public:
+ ThemeTable();
+ virtual ~ThemeTable();
+
+ // Properties
+ virtual void attribute(Id Name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ // Table
+ virtual void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
+ const ::rtl::OUString getFontNameForTheme(const Id id) const;
+};
+typedef boost::shared_ptr< ThemeTable > ThemeTablePtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/makefile.mk b/writerfilter/source/dmapper/makefile.mk
new file mode 100644
index 000000000000..b757af3fedeb
--- /dev/null
+++ b/writerfilter/source/dmapper/makefile.mk
@@ -0,0 +1,73 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+PRJ=..$/..
+PRJNAME=writerfilter
+TARGET=dmapper
+GEN_HID=TRUE
+
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/inc$/writerfilter.mk
+
+# --- Files -------------------------------------
+
+SLOFILES= $(SLO)$/BorderHandler.obj \
+ $(SLO)$/TblStylePrHandler.obj \
+ $(SLO)$/GraphicHelpers.obj \
+ $(SLO)$/TablePropertiesHandler.obj \
+ $(SLO)$/CellColorHandler.obj \
+ $(SLO)$/CellMarginHandler.obj \
+ $(SLO)$/SectionColumnHandler.obj \
+ $(SLO)$/ConversionHelper.obj \
+ $(SLO)$/DomainMapper.obj \
+ $(SLO)$/DomainMapper_Impl.obj \
+ $(SLO)$/DomainMapperTableHandler.obj \
+ $(SLO)$/DomainMapperTableManager.obj \
+ $(SLO)$/FontTable.obj \
+ $(SLO)$/GraphicImport.obj \
+ $(SLO)$/LFOTable.obj \
+ $(SLO)$/ListTable.obj \
+ $(SLO)$/MeasureHandler.obj \
+ $(SLO)$/PropertyMap.obj \
+ $(SLO)$/PropertyIds.obj \
+ $(SLO)$/StyleSheetTable.obj \
+ $(SLO)$/TDefTableHandler.obj \
+ $(SLO)$/ThemeTable.obj \
+ $(SLO)$/SettingsTable.obj \
+ $(SLO)$/ModelEventListener.obj\
+ $(SLO)$/OLEHandler.obj \
+ $(SLO)$/PageBordersHandler.obj
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/writerfilter/source/doctok/Dff.cxx b/writerfilter/source/doctok/Dff.cxx
new file mode 100644
index 000000000000..c7d8fb713d6f
--- /dev/null
+++ b/writerfilter/source/doctok/Dff.cxx
@@ -0,0 +1,518 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <stdio.h>
+#include "Dff.hxx"
+#include <doctok/resourceids.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include "resources.hxx"
+
+namespace writerfilter {
+namespace doctok {
+
+typedef boost::shared_ptr<WW8Value> WW8ValueSharedPointer_t;
+
+DffRecord::DffRecord(WW8Stream & rStream, sal_uInt32 nOffset,
+ sal_uInt32 nCount)
+: WW8StructBase(rStream, nOffset, nCount), bInitialized(false)
+{
+}
+
+DffRecord::DffRecord(WW8StructBase * pParent, sal_uInt32 nOffset,
+ sal_uInt32 nCount)
+: WW8StructBase(pParent, nOffset, nCount), bInitialized(false)
+{
+}
+
+Records_t::iterator DffRecord::begin()
+{
+ if (! bInitialized)
+ initChildren();
+
+ return mRecords.begin();
+}
+
+Records_t::iterator DffRecord::end()
+{
+ if (! bInitialized)
+ initChildren();
+
+ return mRecords.end();
+}
+
+bool DffRecord::isContainer() const
+{
+ return getVersion() == 0xf;
+}
+
+sal_uInt32 DffRecord::calcSize() const
+{
+ sal_uInt32 nResult = 0;
+
+ switch (getRecordType())
+ {
+ case 0xf000:
+ case 0xf001:
+ case 0xf002:
+ case 0xf003:
+ case 0xf004:
+ nResult = getU32(0x4) + 8;
+
+ break;
+ case 0xf700:
+ nResult = 8;
+
+ break;
+ default:
+ nResult = getU32(0x4);
+
+ if (! isContainer())
+ nResult += 8;
+ break;
+ }
+
+ return nResult;
+}
+
+sal_uInt32 DffRecord::getVersion() const
+{
+ return getU8(0x0) & 0xf;
+}
+
+sal_uInt32 DffRecord::getInstance() const
+{
+ return (getU16(0x0) & 0xfff0) >> 4;
+}
+
+sal_uInt32 DffRecord::getRecordType() const
+{
+ return getU16(0x2);
+}
+
+void DffRecord::initChildren()
+{
+ if (isContainer())
+ {
+ sal_uInt32 nOffset = 8;
+ sal_uInt32 nCount = calcSize();
+
+ while (nCount - nOffset >= 8)
+ {
+ sal_uInt32 nSize = 0;
+ boost::shared_ptr<DffRecord> pRec
+ (createDffRecord(this, nOffset, &nSize));
+
+ if (nSize == 0)
+ break;
+
+ mRecords.push_back(pRec);
+
+ nOffset += nSize;
+ }
+ }
+
+ bInitialized = true;
+}
+
+Records_t DffRecord::findRecords(sal_uInt32 nType, bool bRecursive, bool bAny)
+{
+ Records_t aResult;
+
+ findRecords(nType, aResult, bRecursive, bAny);
+
+ return aResult;
+}
+
+void DffRecord::findRecords
+(sal_uInt32 nType, Records_t & rRecords, bool bRecursive, bool bAny)
+{
+ Records_t::iterator aIt = begin();
+
+ while (aIt != end())
+ {
+ Pointer_t pPointer = *aIt;
+ if (bAny || pPointer->getRecordType() == nType)
+ rRecords.push_back(pPointer);
+
+ if (bRecursive)
+ pPointer->findRecords(nType, rRecords, bRecursive,
+ bAny);
+
+ ++aIt;
+ }
+}
+
+void DffRecord::resolveChildren(Properties & rHandler)
+{
+ Records_t::iterator aIt;
+ for (aIt = begin(); aIt != end(); ++aIt)
+ {
+ rHandler.sprm(**aIt);
+ }
+}
+
+void DffRecord::resolveLocal(Properties &)
+{
+}
+
+void DffRecord::resolve(Properties & rHandler)
+{
+ WW8Value::Pointer_t pVal = createValue(getRecordType());
+ rHandler.attribute(NS_rtf::LN_dfftype, *pVal);
+
+ pVal = createValue(getInstance());
+ rHandler.attribute(NS_rtf::LN_dffinstance, *pVal);
+
+ pVal = createValue(getVersion());
+ rHandler.attribute(NS_rtf::LN_dffversion, *pVal);
+
+ pVal = createValue(getU32(0x0));
+ rHandler.attribute(NS_rtf::LN_dffheader, *pVal);
+
+ if (isContainer())
+ {
+ resolveChildren(rHandler);
+ }
+
+ resolveLocal(rHandler);
+
+#if 1
+ WW8BinaryObjReference::Pointer_t pBinObjRef
+ (new WW8BinaryObjReference(this, 0, getCount()));
+ WW8Sprm aSprm(pBinObjRef);
+
+ rHandler.sprm(aSprm);
+#endif
+}
+
+sal_uInt32 DffRecord::getShapeType()
+{
+ sal_uInt32 nResult = 0;
+
+ Records_t aRecords = findRecords(0xf00a);
+
+ if (aRecords.size() > 0)
+ {
+ DffFSP * pDffFSP = dynamic_cast<DffFSP*>((*aRecords.begin()).get());
+ nResult = pDffFSP->get_shptype();
+ }
+
+ return nResult;
+}
+
+sal_uInt32 DffRecord::getShapeId()
+{
+ sal_uInt32 nResult = 0;
+
+ Records_t aRecords = findRecords(0xf00a);
+
+ if (aRecords.size() > 0)
+ {
+ DffFSP * pDffFSP = dynamic_cast<DffFSP*>((*aRecords.begin()).get());
+ nResult = pDffFSP->get_shpid();
+ }
+
+ return nResult;
+}
+
+class DffOPTHandler : public Properties
+{
+ map<int, WW8ValueSharedPointer_t> mMap;
+ int nId;
+
+public:
+ DffOPTHandler() : nId(0) {}
+ virtual ~DffOPTHandler() {}
+
+ virtual void attribute(Id name, Value & val)
+ {
+ switch (name)
+ {
+ case NS_rtf::LN_shppid:
+ nId = val.getInt();
+ break;
+ case NS_rtf::LN_shpvalue:
+ {
+ WW8Value & rTmpVal = dynamic_cast<WW8Value &>(val);
+ WW8ValueSharedPointer_t
+ pVal(dynamic_cast<WW8Value *>(rTmpVal.clone()));
+ mMap[nId] = pVal;
+ }
+ }
+ }
+
+ virtual void sprm(Sprm & /*sprm_*/)
+ {
+ }
+
+ WW8ValueSharedPointer_t & getValue(int nId_)
+ {
+ return mMap[nId_];
+ }
+
+};
+
+sal_uInt32 DffRecord::getShapeBid()
+{
+ sal_uInt32 nResult = 0;
+
+ if (getShapeType() == 75)
+ {
+ Records_t aRecords = findRecords(0xf00b);
+
+ if (aRecords.size() > 0)
+ {
+ DffOPTHandler aHandler;
+ DffOPT * pOpts = dynamic_cast<DffOPT*>((*aRecords.begin()).get());
+
+ sal_uInt32 nCount = pOpts->get_property_count();
+
+ for (sal_uInt32 n = 0; n < nCount; ++n)
+ {
+ pOpts->get_property(n)->resolve(aHandler);
+ }
+
+ WW8ValueSharedPointer_t pVal = aHandler.getValue(260);
+
+ if (pVal.get() != NULL)
+ nResult = pVal->getInt();
+ }
+ }
+
+ return nResult;
+}
+
+string DffRecord::getType() const
+{
+ return "DffRecord";
+}
+
+Value::Pointer_t DffRecord::getValue()
+{
+ return Value::Pointer_t();
+}
+
+writerfilter::Reference<BinaryObj>::Pointer_t DffRecord::getBinary()
+{
+ return writerfilter::Reference<BinaryObj>::Pointer_t();
+}
+
+writerfilter::Reference<Stream>::Pointer_t DffRecord::getStream()
+{
+ return writerfilter::Reference<Stream>::Pointer_t();
+}
+
+writerfilter::Reference<Properties>::Pointer_t DffRecord::getProps()
+{
+ return writerfilter::Reference<Properties>::Pointer_t(this->clone());
+}
+
+string DffRecord::toString() const
+{
+ char sBuffer[1024];
+
+ snprintf(sBuffer, sizeof(sBuffer),
+ "<dffrecord type=\"%" SAL_PRIuUINT32 "\" instance=\"%" SAL_PRIuUINT32 "\" version=\"%" SAL_PRIuUINT32 "\">\n",
+ getRecordType(), getInstance(), getVersion());
+ string aResult = sBuffer;
+
+
+ if (!isContainer())
+ aResult += mSequence.toString();
+ else
+ {
+ WW8StructBase::Sequence aSeq(mSequence, 0, 8);
+ aResult += aSeq.toString();
+ }
+
+ aResult += "</dffrecord>";
+
+ return aResult;
+}
+
+string DffRecord::getName() const
+{
+ return "";
+}
+
+Sprm::Kind DffRecord::getKind()
+{
+ return Sprm::UNKNOWN;
+}
+
+DffBlock::DffBlock(WW8Stream & rStream, sal_uInt32 nOffset,
+ sal_uInt32 nCount, sal_uInt32 nPadding)
+: WW8StructBase(rStream, nOffset, nCount), bInitialized(false),
+ mnPadding(nPadding)
+{
+}
+
+DffBlock::DffBlock(WW8StructBase * pParent, sal_uInt32 nOffset,
+ sal_uInt32 nCount, sal_uInt32 nPadding)
+: WW8StructBase(pParent, nOffset, nCount), bInitialized(false),
+ mnPadding(nPadding)
+{
+}
+
+DffBlock::DffBlock(const DffBlock & rSrc)
+: WW8StructBase(rSrc), writerfilter::Reference<Properties>(rSrc),
+ bInitialized(false), mnPadding(rSrc.mnPadding)
+{
+}
+
+void DffBlock::initChildren()
+{
+ sal_uInt32 nOffset = 0;
+ sal_uInt32 nCount = getCount();
+
+ while (nOffset < nCount)
+ {
+ sal_uInt32 nSize = 0;
+ DffRecord::Pointer_t pDffRecord
+ (createDffRecord(this, nOffset, &nSize));
+
+ if (nSize == 0)
+ break;
+
+ mRecords.push_back(pDffRecord);
+
+ nOffset += nSize + mnPadding;
+ }
+
+ bInitialized = true;
+}
+
+Records_t DffBlock::findRecords(sal_uInt32 nType, bool bRecursive, bool bAny)
+{
+ Records_t aResult;
+
+ findRecords(nType, aResult, bRecursive, bAny);
+
+ return aResult;
+}
+
+void DffBlock::findRecords
+(sal_uInt32 nType, Records_t & rRecords, bool bRecursive, bool bAny)
+{
+ Records_t::iterator aIt = begin();
+
+ while (aIt != end())
+ {
+ DffRecord::Pointer_t pPointer(*aIt);
+
+ if (bAny || pPointer->getRecordType() == nType)
+ rRecords.push_back(pPointer);
+
+ if (bRecursive)
+ pPointer->findRecords(nType, rRecords, bRecursive,
+ bAny);
+
+ ++aIt;
+ }
+}
+
+void DffBlock::resolve(Properties & rHandler)
+{
+ Records_t::iterator aIt;
+
+ for (aIt = begin(); aIt != end(); ++aIt)
+ {
+ DffRecord * pDff = aIt->get();
+ rHandler.sprm(*pDff);
+ }
+}
+
+DffRecord::Pointer_t DffBlock::getShape(sal_uInt32 nSpid)
+{
+ DffRecord::Pointer_t pResult;
+
+ Records_t aRecords = findRecords(0xf004);
+ Records_t::iterator aIt;
+ for (aIt = aRecords.begin(); aIt != aRecords.end(); ++aIt)
+ {
+ DffRecord::Pointer_t pPointer = *aIt;
+
+ Records_t aFSPs = pPointer->findRecords(0xf00a);
+ Records_t::iterator aItFSP = aFSPs.begin();
+
+ if (aItFSP != aFSPs.end())
+ {
+ DffFSP * pFSP = dynamic_cast<DffFSP *>((*aItFSP).get());
+
+ if (pFSP->get_shpid() == nSpid)
+ {
+ pResult = pPointer;
+
+ break;
+ }
+ }
+ }
+
+ return pResult;
+}
+
+DffRecord::Pointer_t DffBlock::getBlip(sal_uInt32 nBlip)
+{
+ DffRecord::Pointer_t pResult;
+
+ if (nBlip > 0)
+ {
+ nBlip--;
+
+ Records_t aRecords = findRecords(0xf007);
+
+ if (nBlip < aRecords.size())
+ {
+ pResult = aRecords[nBlip];
+ }
+ }
+
+ return pResult;
+}
+
+Records_t::iterator DffBlock::begin()
+{
+ if (! bInitialized)
+ initChildren();
+
+ return mRecords.begin();
+}
+
+Records_t::iterator DffBlock::end()
+{
+ if (! bInitialized)
+ initChildren();
+
+ return mRecords.end();
+}
+
+string DffBlock::getType() const
+{
+ return "DffBlock";
+}
+
+}}
diff --git a/writerfilter/source/doctok/Dff.hxx b/writerfilter/source/doctok/Dff.hxx
new file mode 100644
index 000000000000..b0a64f05c303
--- /dev/null
+++ b/writerfilter/source/doctok/Dff.hxx
@@ -0,0 +1,153 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_DFF_HXX
+#define INCLUDED_DFF_HXX
+
+#include <vector>
+#include <WW8StructBase.hxx>
+#include <WW8ResourceModelImpl.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+using std::vector;
+
+class DffBlock;
+
+class DffRecord : public WW8StructBase, public writerfilter::Reference<Properties>,
+ public Sprm
+{
+ bool bInitialized;
+public:
+ typedef boost::shared_ptr<DffRecord> Pointer_t;
+
+protected:
+ typedef vector<Pointer_t> Records_t;
+ Records_t mRecords;
+
+ void initChildren();
+
+public:
+
+ DffRecord(WW8Stream & rStream, sal_uInt32 nOffset, sal_uInt32 nCount);
+ DffRecord(WW8StructBase * pParent, sal_uInt32 nOffset, sal_uInt32 nCount);
+ virtual ~DffRecord() {}
+
+ bool isContainer() const;
+ sal_uInt32 calcSize() const;
+
+ sal_uInt32 getVersion() const;
+ sal_uInt32 getInstance() const;
+ sal_uInt32 getRecordType() const;
+
+ virtual DffRecord * clone() const { return new DffRecord(*this); }
+
+ virtual void resolveLocal(Properties & rHandler);
+ virtual void resolveChildren(Properties & rHandler);
+
+ Records_t findRecords(sal_uInt32 nType, bool bRecursive = true,
+ bool bAny = false);
+
+ void findRecords
+ (sal_uInt32 nType, Records_t & rRecords,
+ bool bRecursive = true, bool bAny = false);
+
+ Records_t::iterator begin();
+ Records_t::iterator end();
+
+ sal_uInt32 getShapeType();
+ sal_uInt32 getShapeId();
+ sal_uInt32 getShapeBid();
+
+ /* Properties methods */
+ virtual void resolve(Properties & rHandler);
+ virtual string getType() const;
+
+ /* Sprm methods */
+ virtual sal_uInt32 getId() const { return getRecordType(); }
+ virtual Value::Pointer_t getValue();
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary();
+ virtual writerfilter::Reference<Stream>::Pointer_t getStream();
+ virtual writerfilter::Reference<Properties>::Pointer_t getProps();
+
+ virtual string toString() const;
+ virtual string getName() const;
+
+ virtual Kind getKind();
+
+ friend class DffBlock;
+};
+
+typedef vector<DffRecord::Pointer_t> Records_t;
+
+class DffBlock : public WW8StructBase,
+ public writerfilter::Reference<Properties>
+{
+ bool bInitialized;
+ sal_uInt32 mnPadding;
+
+ Records_t mRecords;
+
+protected:
+ void initChildren();
+
+public:
+ typedef boost::shared_ptr<DffBlock> Pointer_t;
+
+ DffBlock(WW8Stream & rStream, sal_uInt32 nOffset, sal_uInt32 nCount, sal_uInt32 nPadding);
+ DffBlock(WW8StructBase * pParent, sal_uInt32 nOffset, sal_uInt32 nCount, sal_uInt32 nPadding);
+ DffBlock(const DffBlock & rSrc);
+ virtual ~DffBlock() {}
+
+ Records_t findRecords(sal_uInt32 nType, bool bRecursive = true,
+ bool bAny = false);
+
+ void findRecords(sal_uInt32 nType, Records_t & rRecords,
+ bool bRecursive = true, bool bAny = false);
+
+ DffRecord::Pointer_t getShape(sal_uInt32 nSpid);
+ DffRecord::Pointer_t getBlip(sal_uInt32 nBlip);
+
+ Records_t::iterator begin();
+ Records_t::iterator end();
+
+ /* Properties methods */
+ virtual void resolve(Properties & rHandler);
+ virtual string getType() const;
+};
+
+DffRecord *
+createDffRecord(WW8StructBase * pParent, sal_uInt32 nOffset,
+ sal_uInt32 * nSize = NULL);
+DffRecord *
+createDffRecord(WW8Stream & rStream, sal_uInt32 nOffset,
+ sal_uInt32 * nSize = NULL);
+
+}}
+
+#endif
diff --git a/writerfilter/source/doctok/DffImpl.cxx b/writerfilter/source/doctok/DffImpl.cxx
new file mode 100644
index 000000000000..fcb2fe6267be
--- /dev/null
+++ b/writerfilter/source/doctok/DffImpl.cxx
@@ -0,0 +1,518 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "resources.hxx"
+#include "WW8DocumentImpl.hxx"
+
+namespace writerfilter {
+namespace doctok
+{
+
+class ShapeTypeToString
+{
+ typedef boost::shared_ptr<ShapeTypeToString> Pointer_t;
+
+ static Pointer_t pInstance;
+
+ typedef map<sal_uInt32, string> Map_t;
+ Map_t mMap;
+
+protected:
+ ShapeTypeToString();
+
+public:
+ static Pointer_t Instance()
+ {
+ if (pInstance == NULL)
+ pInstance = Pointer_t(new ShapeTypeToString());
+
+ return pInstance;
+ }
+
+ string operator()(sal_uInt32 nShapeType)
+ {
+ return mMap[nShapeType];
+ }
+};
+
+ShapeTypeToString::Pointer_t ShapeTypeToString::pInstance;
+
+ShapeTypeToString::ShapeTypeToString()
+{
+ mMap[0]="NotPrimitive";
+ mMap[1]="Rectangle";
+ mMap[2]="RoundRectangle";
+ mMap[3]="Ellipse";
+ mMap[4]="Diamond";
+ mMap[5]="IsocelesTriangle";
+ mMap[6]="RightTriangle";
+ mMap[7]="Parallelogram";
+ mMap[8]="Trapezoid";
+ mMap[9]="Hexagon";
+ mMap[10]="Octagon";
+ mMap[11]="Plus";
+ mMap[12]="Star";
+ mMap[13]="Arrow";
+ mMap[14]="ThickArrow";
+ mMap[15]="HomePlate";
+ mMap[16]="Cube";
+ mMap[17]="Balloon";
+ mMap[18]="Seal";
+ mMap[19]="Arc";
+ mMap[20]="Line";
+ mMap[21]="Plaque";
+ mMap[22]="Can";
+ mMap[23]="Donut";
+ mMap[24]="TextSimple";
+ mMap[25]="TextOctagon";
+ mMap[26]="TextHexagon";
+ mMap[27]="TextCurve";
+ mMap[28]="TextWave";
+ mMap[29]="TextRing";
+ mMap[30]="TextOnCurve";
+ mMap[31]="TextOnRing";
+ mMap[32]="StraightConnector1";
+ mMap[33]="BentConnector2";
+ mMap[34]="BentConnector3";
+ mMap[35]="BentConnector4";
+ mMap[36]="BentConnector5";
+ mMap[37]="CurvedConnector2";
+ mMap[38]="CurvedConnector3";
+ mMap[39]="CurvedConnector4";
+ mMap[40]="CurvedConnector5";
+ mMap[41]="Callout1";
+ mMap[42]="Callout2";
+ mMap[43]="Callout3";
+ mMap[44]="AccentCallout1";
+ mMap[45]="AccentCallout2";
+ mMap[46]="AccentCallout3";
+ mMap[47]="BorderCallout1";
+ mMap[48]="BorderCallout2";
+ mMap[49]="BorderCallout3";
+ mMap[50]="AccentBorderCallout1";
+ mMap[51]="AccentBorderCallout2";
+ mMap[52]="AccentBorderCallout3";
+ mMap[53]="Ribbon";
+ mMap[54]="Ribbon2";
+ mMap[55]="Chevron";
+ mMap[56]="Pentagon";
+ mMap[57]="NoSmoking";
+ mMap[58]="Seal8";
+ mMap[59]="Seal16";
+ mMap[60]="Seal32";
+ mMap[61]="WedgeRectCallout";
+ mMap[62]="WedgeRRectCallout";
+ mMap[63]="WedgeEllipseCallout";
+ mMap[64]="Wave";
+ mMap[65]="FoldedCorner";
+ mMap[66]="LeftArrow";
+ mMap[67]="DownArrow";
+ mMap[68]="UpArrow";
+ mMap[69]="LeftRightArrow";
+ mMap[70]="UpDownArrow";
+ mMap[71]="IrregularSeal1";
+ mMap[72]="IrregularSeal2";
+ mMap[73]="LightningBolt";
+ mMap[74]="Heart";
+ mMap[75]="PictureFrame";
+ mMap[76]="QuadArrow";
+ mMap[77]="LeftArrowCallout";
+ mMap[78]="RightArrowCallout";
+ mMap[79]="UpArrowCallout";
+ mMap[80]="DownArrowCallout";
+ mMap[81]="LeftRightArrowCallout";
+ mMap[82]="UpDownArrowCallout";
+ mMap[83]="QuadArrowCallout";
+ mMap[84]="Bevel";
+ mMap[85]="LeftBracket";
+ mMap[86]="RightBracket";
+ mMap[87]="LeftBrace";
+ mMap[88]="RightBrace";
+ mMap[89]="LeftUpArrow";
+ mMap[90]="BentUpArrow";
+ mMap[91]="BentArrow";
+ mMap[92]="Seal24";
+ mMap[93]="StripedRightArrow";
+ mMap[94]="NotchedRightArrow";
+ mMap[95]="BlockArc";
+ mMap[96]="SmileyFace";
+ mMap[97]="VerticalScroll";
+ mMap[98]="HorizontalScroll";
+ mMap[99]="CircularArrow";
+ mMap[100]="NotchedCircularArrow";
+ mMap[101]="UturnArrow";
+ mMap[102]="CurvedRightArrow";
+ mMap[103]="CurvedLeftArrow";
+ mMap[104]="CurvedUpArrow";
+ mMap[105]="CurvedDownArrow";
+ mMap[106]="CloudCallout";
+ mMap[107]="EllipseRibbon";
+ mMap[108]="EllipseRibbon2";
+ mMap[109]="FlowChartProcess";
+ mMap[110]="FlowChartDecision";
+ mMap[111]="FlowChartInputOutput";
+ mMap[112]="FlowChartPredefinedProcess";
+ mMap[113]="FlowChartInternalStorage";
+ mMap[114]="FlowChartDocument";
+ mMap[115]="FlowChartMultidocument";
+ mMap[116]="FlowChartTerminator";
+ mMap[117]="FlowChartPreparation";
+ mMap[118]="FlowChartManualInput";
+ mMap[119]="FlowChartManualOperation";
+ mMap[120]="FlowChartConnector";
+ mMap[121]="FlowChartPunchedCard";
+ mMap[122]="FlowChartPunchedTape";
+ mMap[123]="FlowChartSummingJunction";
+ mMap[124]="FlowChartOr";
+ mMap[125]="FlowChartCollate";
+ mMap[126]="FlowChartSort";
+ mMap[127]="FlowChartExtract";
+ mMap[128]="FlowChartMerge";
+ mMap[129]="FlowChartOfflineStorage";
+ mMap[130]="FlowChartOnlineStorage";
+ mMap[131]="FlowChartMagneticTape";
+ mMap[132]="FlowChartMagneticDisk";
+ mMap[133]="FlowChartMagneticDrum";
+ mMap[134]="FlowChartDisplay";
+ mMap[135]="FlowChartDelay";
+ mMap[136]="TextPlainText";
+ mMap[137]="TextStop";
+ mMap[138]="TextTriangle";
+ mMap[139]="TextTriangleInverted";
+ mMap[140]="TextChevron";
+ mMap[141]="TextChevronInverted";
+ mMap[142]="TextRingInside";
+ mMap[143]="TextRingOutside";
+ mMap[144]="TextArchUpCurve";
+ mMap[145]="TextArchDownCurve";
+ mMap[146]="TextCircleCurve";
+ mMap[147]="TextButtonCurve";
+ mMap[148]="TextArchUpPour";
+ mMap[149]="TextArchDownPour";
+ mMap[150]="TextCirclePour";
+ mMap[151]="TextButtonPour";
+ mMap[152]="TextCurveUp";
+ mMap[153]="TextCurveDown";
+ mMap[154]="TextCascadeUp";
+ mMap[155]="TextCascadeDown";
+ mMap[156]="TextWave1";
+ mMap[157]="TextWave2";
+ mMap[158]="TextWave3";
+ mMap[159]="TextWave4";
+ mMap[160]="TextInflate";
+ mMap[161]="TextDeflate";
+ mMap[162]="TextInflateBottom";
+ mMap[163]="TextDeflateBottom";
+ mMap[164]="TextInflateTop";
+ mMap[165]="TextDeflateTop";
+ mMap[166]="TextDeflateInflate";
+ mMap[167]="TextDeflateInflateDeflate";
+ mMap[168]="TextFadeRight";
+ mMap[169]="TextFadeLeft";
+ mMap[170]="TextFadeUp";
+ mMap[171]="TextFadeDown";
+ mMap[172]="TextSlantUp";
+ mMap[173]="TextSlantDown";
+ mMap[174]="TextCanUp";
+ mMap[175]="TextCanDown";
+ mMap[176]="FlowChartAlternateProcess";
+ mMap[177]="FlowChartOffpageConnector";
+ mMap[178]="Callout90";
+ mMap[179]="AccentCallout90";
+ mMap[180]="BorderCallout90";
+ mMap[181]="AccentBorderCallout90";
+ mMap[182]="LeftRightUpArrow";
+ mMap[183]="Sun";
+ mMap[184]="Moon";
+ mMap[185]="BracketPair";
+ mMap[186]="BracePair";
+ mMap[187]="Seal4";
+ mMap[188]="DoubleWave";
+ mMap[189]="ActionButtonBlank";
+ mMap[190]="ActionButtonHome";
+ mMap[191]="ActionButtonHelp";
+ mMap[192]="ActionButtonInformation";
+ mMap[193]="ActionButtonForwardNext";
+ mMap[194]="ActionButtonBackPrevious";
+ mMap[195]="ActionButtonEnd";
+ mMap[196]="ActionButtonBeginning";
+ mMap[197]="ActionButtonReturn";
+ mMap[198]="ActionButtonDocument";
+ mMap[199]="ActionButtonSound";
+ mMap[200]="ActionButtonMovie";
+ mMap[201]="HostControl";
+ mMap[202]="TextBox";
+}
+
+// DffOPT
+
+sal_uInt32 DffOPT::get_property_count()
+{
+ return getInstance();
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+DffOPT::get_property(sal_uInt32 nPos)
+{
+ WW8FOPTE * pTmp = new WW8FOPTE(this, 0x8 + nPos * WW8FOPTE::getSize());
+ pTmp->setIndex(nPos);
+
+ return writerfilter::Reference<Properties>::Pointer_t(pTmp);
+}
+
+sal_uInt32 DffOPT::get_extraoffset_count()
+{
+ return get_property_count();
+}
+
+sal_uInt32 DffOPT::get_extraoffset(sal_uInt32 pos)
+{
+ sal_uInt32 nResult;
+ sal_uInt32 nCount = get_property_count();
+
+ if (pos < nCount)
+ {
+ nResult = 0x8 + nCount * WW8FOPTE::getSize();
+
+ for (sal_uInt32 n = 0; n < pos; ++n)
+ {
+ WW8FOPTE aFOPTE(this, 0x8 + n * WW8FOPTE::getSize());
+
+ if (aFOPTE.get_fComplex())
+ {
+ sal_uInt32 nValue = aFOPTE.get_op();
+ nResult += nValue;
+ }
+ }
+ }
+ else
+ nResult = getCount();
+
+ return nResult;
+}
+
+//DffDGG
+
+sal_uInt32 DffDGG::get_fidcl_count()
+{
+ return (getCount() - 0x18) / WW8FIDCL::getSize();
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+DffDGG::get_fidcl(sal_uInt32 pos)
+{
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8FIDCL(this, 0x18 + pos * WW8FIDCL::getSize()));
+}
+
+
+// DffBSE
+
+rtl::OUString DffBSE::get_blipname()
+{
+ rtl::OUString sResult;
+ WW8FBSE aFBSE(this, 0x8);
+
+ if (aFBSE.get_cbName() > 0)
+ sResult = getString(0x24, aFBSE.get_cbName());
+
+ return sResult;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+DffBSE::get_blip()
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ WW8FBSE aFBSE(this, 8);
+ sal_uInt32 nOffset = 8 + WW8FBSE::getSize() + aFBSE.get_cbName();
+
+ if (nOffset + 8 < getCount())
+ {
+ WW8StructBase aTmp(this, nOffset, 0x8);
+
+ sal_uInt32 nCount = getCount() - 8;
+
+ if (aTmp.getU32(0x4) - 8 < nCount)
+ nCount = aTmp.getU32(0x4) - 8;
+
+ if (nCount)
+ {
+ DffRecord * pRecord = createDffRecord(this, nOffset);
+
+ pResult = writerfilter::Reference<Properties>::Pointer_t(pRecord);
+ }
+ }
+ else
+ {
+ nOffset = sal::static_int_cast<sal_Int32>(aFBSE.get_foDelay());
+ if (! (nOffset & 1 << 31) && nOffset > 0 && getDocument() != NULL)
+ {
+ WW8StructBase aStructBase(*getDocument()->getDocStream(),
+ nOffset, 0x8);
+
+ DffRecord * pRecord =
+ createDffRecord(*getDocument()->getDocStream(),
+ aFBSE.get_foDelay());
+
+ pResult = writerfilter::Reference<Properties>::Pointer_t(pRecord);
+ }
+ }
+
+ return pResult;
+}
+
+#if 0
+WW8BinaryObjReference::Pointer_t DffBSE::get_binary()
+{
+ WW8BinaryObjReference::Pointer_t pResult;
+
+ if (getCount() > 0x45)
+ pResult = WW8BinaryObjReference::Pointer_t
+ (new WW8BinaryObjReference(this, 0x45,
+ getCount() - 0x45));
+ else
+ {
+ WW8FBSE aFBSE(this, 0x8);
+
+ sal_Int32 nOffset = sal::static_int_cast<sal_Int32>(aFBSE.get_foDelay());
+ if (nOffset > 0 && getDocument() != NULL)
+ {
+ WW8StructBase aStructBase(*getDocument()->getDocStream(),
+ nOffset, 0x8);
+
+ sal_uInt32 nCount = aStructBase.getU32(0x4) - 0x11;
+
+ pResult = WW8BinaryObjReference::Pointer_t
+ (new WW8BinaryObjReference(*getDocument()->getDocStream(),
+ aFBSE.get_foDelay() + 0x19, nCount));
+ }
+ }
+
+ return pResult;
+}
+#endif
+
+// WW8FOPTE
+void WW8FOPTE::resolveNoAuto(Properties & rHandler)
+{
+ sal_uInt16 nId = get_pid() + 1;
+ sal_uInt32 nOp = get_op();
+ sal_uInt32 nMask = 2;
+
+ while (isBooleanDffOpt(nId))
+ {
+ WW8Value::Pointer_t pVal = createValue(getDffOptName(nId));
+ rHandler.attribute(NS_rtf::LN_shpname, *pVal);
+
+ pVal = createValue((nOp & nMask) != 0);
+ rHandler.attribute(NS_rtf::LN_shpvalue, *pVal);
+
+ --nId;
+ nMask = nMask << 1;
+ }
+}
+
+// DffFSP
+
+rtl::OUString DffFSP::get_shptypename()
+{
+ string aName = (*ShapeTypeToString::Instance())(get_shptype());
+
+ return rtl::OUString::createFromAscii(aName.c_str());
+}
+
+// DffSpContainer
+
+writerfilter::Reference<Properties>::Pointer_t
+DffSpContainer::get_blip()
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ if (getShapeType() == 75)
+ {
+ sal_uInt32 nBid = getShapeBid();
+
+ if (getDocument() != NULL && nBid > 0)
+ pResult = getDocument()->getBlip(nBid);
+ }
+
+ return pResult;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+DffSpContainer::get_shptxt()
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ if (getShapeType() == 202)
+ {
+ sal_uInt32 nShpId = getShapeId();
+
+ if (getDocument() != NULL)
+ pResult = getDocument()->getTextboxText(nShpId);
+ }
+
+ return pResult;
+}
+
+// DffUDefProp
+
+void DffUDefProp::resolveNoAuto(Properties & rHandler)
+{
+ sal_uInt32 nOffset = 0x8;
+ sal_uInt32 nCount = getCount();
+
+ while (nOffset + 6 <= nCount)
+ {
+ sal_uInt16 nPid = getU16(nOffset);
+ sal_uInt32 nValue = getU32(nOffset + 2);
+
+ sal_uInt32 nAttrid = 0;
+ switch (nPid)
+ {
+ case 0x38f: nAttrid = NS_rtf::LN_XAlign; break;
+ case 0x390: nAttrid = NS_rtf::LN_XRelTo; break;
+ case 0x391: nAttrid = NS_rtf::LN_YAlign; break;
+ case 0x392: nAttrid = NS_rtf::LN_YRelTo; break;
+ case 0x3bf: nAttrid = NS_rtf::LN_LayoutInTableCell; break;
+ case 0x53f: nAttrid = NS_rtf::LN_Inline; break;
+ default:
+ break;
+ }
+
+ if (nAttrid != 0)
+ {
+ WW8Value::Pointer_t pVal = createValue(nValue);
+ rHandler.attribute(nAttrid, *pVal);
+ }
+
+ nOffset += 6;
+ }
+}
+
+}}
diff --git a/writerfilter/source/doctok/PLCF.hxx b/writerfilter/source/doctok/PLCF.hxx
new file mode 100644
index 000000000000..fefff12f6c11
--- /dev/null
+++ b/writerfilter/source/doctok/PLCF.hxx
@@ -0,0 +1,195 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_PLCF_HXX
+#define INCLUDED_PLCF_HXX
+
+#include <boost/shared_ptr.hpp>
+#include <WW8StructBase.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+
+class Empty
+{
+public:
+ typedef boost::shared_ptr<Empty> Pointer_t;
+
+ Empty() {}
+ virtual ~Empty() {}
+
+ sal_uInt32 getSize() { return 0; }
+};
+
+template <class T>
+/**
+ Plex in File
+
+ A PLCF is a concatenation of two arrays. The first array contains
+ file character positions. The second array contains elements of
+ type T. If the first array contains N elements, the second contains
+ N - 1 elements. The N-th element in the first array corresponds to
+ the N-th element of the second array.
+
+ The second array is referred to as the payload.
+ */
+class PLCF : public WW8StructBase
+{
+ /// number of entries
+ sal_uInt32 nEntryCount;
+
+ /// offset to payload
+ sal_uInt32 nPayloadOffset;
+
+ /// internal method to calculate the number of entries
+ sal_uInt32 getEntryCount_() const;
+
+public:
+ typedef boost::shared_ptr< PLCF< T > > Pointer_t;
+
+ PLCF(sal_uInt32 nLength)
+ : WW8StructBase(nLength), nEntryCount(getEntryCount_()),
+ nPayloadOffset((nEntryCount + 1) * 4)
+ {
+ }
+
+ PLCF(WW8Stream & rStream,
+ sal_Int32 nOffset, sal_Int32 nCount)
+ : WW8StructBase(rStream, nOffset, nCount),
+ nEntryCount(getEntryCount_()),
+ nPayloadOffset((nEntryCount + 1) * 4)
+ {
+ }
+
+ PLCF(const Sequence & rSequence)
+ : WW8StructBase(rSequence), nEntryCount(getEntryCount_()),
+ nPayloadOffset((nEntryCount + 1) * 4)
+ {
+ }
+
+ /**
+ Return the number of elements in the PLCF-
+ */
+ sal_uInt32 getEntryCount() const { return nEntryCount; }
+
+ /**
+ Return the file character position of a certain element.
+
+ @param nIndex the index of the element
+ */
+ sal_uInt32 getFc(sal_uInt32 nIndex) const;
+
+ /**
+ Return a C++ pointer to a certain payload entry.
+
+ @param nIndex the index of the element
+ */
+ T * getEntryPointer(sal_uInt32 nIndex) const;
+
+ /**
+ Return a shared pointer to a certain payload element.
+
+ @param nIndex the index of the element
+ */
+ typename T::Pointer_t getEntry(sal_uInt32 nIndex) const;
+
+ /**
+ Return a C++ pointer a certain payload element.
+
+ @param nFc the file character position of the element
+ */
+ T * getEntryByFc(sal_uInt32 nFc) const;
+
+ virtual void dump(OutputWithDepth<string> & out) const;
+};
+
+template <class T>
+sal_uInt32 PLCF<T>::getEntryCount_() const
+{
+ return (getCount() - 4) / (T::getSize() + 4);
+}
+
+template <class T>
+sal_uInt32 PLCF<T>::getFc(sal_uInt32 nIndex) const
+{
+ return getU32(nIndex * 4);
+}
+
+template <class T>
+T * PLCF<T>::getEntryPointer(sal_uInt32 nIndex) const
+{
+ return new T(mSequence, nPayloadOffset + nIndex * T::getSize(),
+ T::getSize());
+}
+
+template <class T>
+typename T::Pointer_t PLCF<T>::getEntry(sal_uInt32 nIndex) const
+{
+ typename T::Pointer_t pResult(getEntryPointer(nIndex));
+
+ return pResult;
+}
+
+
+template <class T>
+T * PLCF<T>::getEntryByFc(sal_uInt32 nFc) const
+{
+ T * pResult = NULL;
+
+ sal_uInt32 n = getEntryCount();
+
+ while (getFc(n) > nFc)
+ n--;
+
+ pResult = getEntryPointer(n);
+
+ return pResult;
+}
+
+template <class T>
+void PLCF<T>::dump(OutputWithDepth<string> & output_) const
+{
+ output_.addItem("<plcf>");
+ WW8StructBase::dump(output_);
+
+ sal_uInt32 nCount = getEntryCount();
+ for (sal_uInt32 n = 0; n < nCount; ++n)
+ {
+ Fc aFc = getFc(n);
+ typename T::Pointer_t pT = getEntry(n);
+
+ output_.addItem("<plcfentry cpandfc=\"" + aFc.toString() + "\">");
+ pT->dump(output_);
+ output_.addItem("</plcfentry>");
+ }
+ output_.addItem("</plcf>>");
+}
+
+}}
+
+#endif // INCLUDED_PLCF_HXX
diff --git a/writerfilter/source/doctok/WW8Annotation.cxx b/writerfilter/source/doctok/WW8Annotation.cxx
new file mode 100644
index 000000000000..aabcd5525e90
--- /dev/null
+++ b/writerfilter/source/doctok/WW8Annotation.cxx
@@ -0,0 +1,37 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <resources.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+rtl::OUString WW8ATRD::get_xstUsrInitl()
+{
+ return getString(0x0);
+}
+}}
diff --git a/writerfilter/source/doctok/WW8BinTable.hxx b/writerfilter/source/doctok/WW8BinTable.hxx
new file mode 100644
index 000000000000..4105a06b5fd4
--- /dev/null
+++ b/writerfilter/source/doctok/WW8BinTable.hxx
@@ -0,0 +1,88 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_BIN_TABLE_HXX
+#define INCLUDED_WW8_BIN_TABLE_HXX
+
+#include <boost/shared_ptr.hpp>
+#include <string>
+#include <WW8FKP.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+
+/**
+ A bintable.
+
+ Word uses bintables to associate FC ranges with FKPs. A bintable
+ has a list of FCs. At each FC a range begins. The length of the
+ range is given by the distance of the according CPs.
+ */
+class WW8BinTable
+{
+public:
+ virtual ~WW8BinTable() {};
+ /**
+ Shared pointer to a bintable.
+ */
+ typedef boost::shared_ptr<WW8BinTable> Pointer_t;
+
+ /**
+ Return count of entries.
+ */
+ virtual sal_uInt32 getEntryCount() const = 0;
+
+ /**
+ Return FC from bintable.
+
+ @param nIndex index in bintable to return FC from
+ */
+ virtual Fc getFc(sal_uInt32 nIndex) const = 0;
+
+ /**
+ Return page number.
+
+ @param nIndex index in bintable to return page number from
+ */
+ virtual sal_uInt32 getPageNumber(sal_uInt32 nIndex) const = 0;
+
+ /**
+ Return page number associated with FC.
+
+ @param rFc FC to return page number for
+ */
+ virtual sal_uInt32 getPageNumber(const Fc & rFc) const = 0;
+
+ /**
+ Return string representation of bintable.
+ */
+ virtual string toString() const = 0;
+};
+}}
+
+#endif // INCLUDED_WW8_BIN_TABLE_HXX
diff --git a/writerfilter/source/doctok/WW8BinTableImpl.cxx b/writerfilter/source/doctok/WW8BinTableImpl.cxx
new file mode 100644
index 000000000000..05959cf359b1
--- /dev/null
+++ b/writerfilter/source/doctok/WW8BinTableImpl.cxx
@@ -0,0 +1,106 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "WW8BinTableImpl.hxx"
+
+namespace writerfilter {
+namespace doctok
+{
+using namespace ::std;
+
+void PageNumber::dump(OutputWithDepth<string> & /*output*/) const
+{
+}
+
+sal_uInt32 WW8BinTableImpl::getPageNumber(const Fc & rFc) const
+{
+ sal_uInt32 nResult = 0;
+
+ if (mPageMap.find(rFc) == mPageMap.end())
+ {
+#if 0
+ sal_uInt32 n = getEntryCount();
+
+ while (rFc < getFc(n))
+ {
+ --n;
+ }
+
+ nResult = getPageNumber(n);
+ mPageMap[rFc] = nResult;
+#else
+ sal_uInt32 left = 0;
+ sal_uInt32 right = getEntryCount();
+
+ while (right - left > 1)
+ {
+ sal_uInt32 middle = (right + left) / 2;
+
+ Fc aFc = getFc(middle);
+
+ if (rFc < aFc)
+ right = middle;
+ else
+ left = middle;
+
+ }
+
+ nResult = getPageNumber(left);
+ mPageMap[rFc] = nResult;
+#endif
+
+ }
+ else
+ nResult = mPageMap[rFc];
+
+ return nResult;
+}
+
+string WW8BinTableImpl::toString() const
+{
+ string aResult;
+ char sBuffer[255];
+
+ aResult += "(";
+
+ for (sal_uInt32 n = 0; n < getEntryCount(); n++)
+ {
+ if (n > 0)
+ aResult += ", ";
+
+ snprintf(sBuffer, 255, "%" SAL_PRIxUINT32, getFc(n).get());
+ aResult += sBuffer;
+ aResult += "->";
+ snprintf(sBuffer, 255, "%" SAL_PRIxUINT32, getPageNumber(n));
+ aResult += sBuffer;
+ }
+
+ aResult += ")";
+
+ return aResult;
+}
+}}
diff --git a/writerfilter/source/doctok/WW8BinTableImpl.hxx b/writerfilter/source/doctok/WW8BinTableImpl.hxx
new file mode 100644
index 000000000000..d3119c13dd20
--- /dev/null
+++ b/writerfilter/source/doctok/WW8BinTableImpl.hxx
@@ -0,0 +1,98 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_BIN_TABLE_IMPL_HXX
+#define INCLUDED_WW8_BIN_TABLE_IMPL_HXX
+
+#include <istream>
+#include <WW8BinTable.hxx>
+#include <PLCF.hxx>
+
+#include <hash_map>
+
+namespace writerfilter {
+namespace doctok
+{
+using namespace ::std;
+
+/**
+ A number of a FKP.
+ */
+class PageNumber
+{
+ /// the page number
+ sal_uInt32 mnPageNumber;
+
+public:
+ /// Pointer to a page number
+ typedef boost::shared_ptr<PageNumber> Pointer_t;
+
+ /// get size of a page number
+ static size_t getSize() { return 4; }
+
+ PageNumber(WW8StructBase::Sequence & rSeq, sal_uInt32 nOffset,
+ sal_uInt32 /*nCount*/)
+ : mnPageNumber(getU32(rSeq, nOffset))
+ {
+ }
+
+ /// Return the page number
+ sal_uInt32 get() const { return mnPageNumber; }
+
+ virtual void dump(OutputWithDepth<string> & out) const;
+};
+
+/**
+ Implementation class for a binary table
+ */
+class WW8BinTableImpl : public WW8BinTable
+{
+ /// PLCF containing the numbers of the FKPs of the binary table
+ PLCF<PageNumber> mData;
+ mutable hash_map<Fc, sal_uInt32, FcHash> mPageMap;
+
+public:
+ WW8BinTableImpl(WW8Stream & rStream, sal_uInt32 nOffset,
+ sal_uInt32 nCount)
+ : mData(rStream, nOffset, nCount)
+
+ {
+ }
+
+ virtual sal_uInt32 getEntryCount() const
+ { return mData.getEntryCount(); }
+ virtual Fc getFc(sal_uInt32 nIndex) const
+ { return mData.getFc(nIndex); }
+ virtual sal_uInt32 getPageNumber(sal_uInt32 nIndex) const
+ { return mData.getEntry(nIndex)->get(); }
+ virtual sal_uInt32 getPageNumber(const Fc & rFc) const;
+ virtual string toString() const;
+};
+
+}}
+
+#endif // INCLUDED_WW8_BIN_TABLE_IMPL_HXX
diff --git a/writerfilter/source/doctok/WW8Clx.cxx b/writerfilter/source/doctok/WW8Clx.cxx
new file mode 100644
index 000000000000..d794afd3ce60
--- /dev/null
+++ b/writerfilter/source/doctok/WW8Clx.cxx
@@ -0,0 +1,84 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <com/sun/star/io/XSeekable.hpp>
+#include <WW8Clx.hxx>
+#include <resources.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+WW8Clx::WW8Clx(WW8Stream & rStream,
+ sal_uInt32 nOffset, sal_uInt32 nCount)
+: WW8StructBase(rStream, nOffset, nCount), nOffsetPieceTable(0)
+{
+ while (getU8(nOffsetPieceTable) != 2)
+ {
+ nOffsetPieceTable += getU16(nOffsetPieceTable + 1) + 3;
+ }
+}
+
+sal_uInt32 WW8Clx::getPieceCount() const
+{
+ return (getU32(nOffsetPieceTable + 1) - 4) / 12;
+}
+
+sal_uInt32 WW8Clx::getCp(sal_uInt32 nIndex) const
+{
+ return getU32(nOffsetPieceTable + 5 + nIndex * 4);
+}
+
+sal_uInt32 WW8Clx::getFc(sal_uInt32 nIndex) const
+{
+ sal_uInt32 nResult = getU32(nOffsetPieceTable + 5 +
+ (getPieceCount() + 1) * 4 +
+ nIndex * 8 + 2);
+
+ if (nResult & 0x40000000)
+ nResult = (nResult & ~0x40000000) / 2;
+
+ return nResult;
+}
+
+sal_Bool WW8Clx::isComplexFc(sal_uInt32 nIndex) const
+{
+ sal_Bool bResult = sal_False;
+ sal_uInt32 nTmp = getU32(nOffsetPieceTable + 5 +
+ (getPieceCount() + 1) * 4 +
+ nIndex * 8 + 2);
+ if (nTmp & 0x40000000)
+ bResult = sal_True;
+
+ return bResult;
+}
+
+void WW8Clx::dump(OutputWithDepth<string> & o) const
+{
+ WW8StructBase::dump(o);
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8Clx.hxx b/writerfilter/source/doctok/WW8Clx.hxx
new file mode 100644
index 000000000000..7085965a689a
--- /dev/null
+++ b/writerfilter/source/doctok/WW8Clx.hxx
@@ -0,0 +1,93 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_CLX_HXX
+#define INCLUDED_WW8_CLX_HXX
+
+#include <resources.hxx>
+
+#ifndef INCLUDED_WW8_OUTPUT_WITH_DEPTH_HXX
+#include <WW8OutputWithDepth.hxx>
+#endif
+
+namespace writerfilter {
+namespace doctok
+{
+
+/**
+ Piece table as stored in a Word file.
+
+ It contains character positions (CPs) and file character positions
+ (FCs). Each CP is correlated to one FC.
+ */
+class WW8Clx : public WW8StructBase
+{
+ /// Pointer to the file information block.
+ WW8Fib::Pointer_t pFib;
+
+ /// Offset where FCs begin
+ sal_uInt32 nOffsetPieceTable;
+
+public:
+ /// Pointer to Clx.
+ typedef boost::shared_ptr<WW8Clx> Pointer_t;
+
+ WW8Clx(WW8Stream & rStream,
+ sal_uInt32 nOffset, sal_uInt32 nCount);
+
+ virtual void dump(OutputWithDepth<string> & o) const;
+
+ /**
+ Return the number of pieces.
+ */
+ sal_uInt32 getPieceCount() const;
+
+ /**
+ Return a certain character position.
+
+ @param nIndex index of the character position
+ */
+ sal_uInt32 getCp(sal_uInt32 nIndex) const;
+
+ /**
+ Return a certain file character position.
+
+ @param nIndex index of the file character position
+ */
+ sal_uInt32 getFc(sal_uInt32 nIndex) const;
+
+ /**
+ Return if a certain FC is complex.
+
+ @nIndex index of the FC
+ */
+ sal_Bool isComplexFc(sal_uInt32 nIndex) const;
+
+};
+}}
+
+#endif
diff --git a/writerfilter/source/doctok/WW8CpAndFc.cxx b/writerfilter/source/doctok/WW8CpAndFc.cxx
new file mode 100644
index 000000000000..ecf5f895e91f
--- /dev/null
+++ b/writerfilter/source/doctok/WW8CpAndFc.cxx
@@ -0,0 +1,130 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <WW8CpAndFc.hxx>
+
+#include <iterator>
+#include <algorithm>
+#include <string>
+#include <map>
+
+namespace writerfilter {
+namespace doctok
+{
+using namespace ::std;
+
+bool operator < (const Cp & rA, const Cp & rB)
+{
+ return rA.nCp < rB.nCp;
+}
+
+bool operator == (const Cp & rA, const Cp & rB)
+{
+ return rA.nCp == rB.nCp;
+}
+
+string Cp::toString() const
+{
+ char sBuffer[256];
+
+ snprintf(sBuffer, 255, "%" SAL_PRIxUINT32 "", get());
+
+ return string(sBuffer);
+}
+
+ostream & operator << (ostream & o, const Cp & rCp)
+{
+ return o << rCp.toString();
+}
+
+bool operator < (const Fc & rA, const Fc & rB)
+{
+ return rA.mnFc < rB.mnFc;
+}
+
+bool operator == (const Fc & rA, const Fc & rB)
+{
+ return rA.mnFc == rB.mnFc;
+}
+
+string Fc::toString() const
+{
+ char sBuffer[256];
+
+ snprintf(sBuffer, 255, "(%" SAL_PRIxUINT32 ", %s)", static_cast<sal_uInt32>(get()),
+ isComplex() ? "true" : "false");
+
+ return string(sBuffer);
+}
+
+ostream & operator << (ostream & o, const Fc & rFc)
+{
+
+ return o << rFc.toString();
+}
+
+bool operator < (const CpAndFc & rA, const CpAndFc & rB)
+{
+ bool bResult = false;
+
+ if (rA.mCp < rB.mCp)
+ bResult = true;
+ else if (rA.mCp == rB.mCp && rA.mType < rB.mType)
+ bResult = true;
+
+ return bResult;
+}
+
+bool operator == (const CpAndFc & rA, const CpAndFc & rB)
+{
+ return rA.mCp == rB.mCp;
+}
+
+ostream & operator << (ostream & o, const CpAndFc & rCpAndFc)
+{
+ return o << rCpAndFc.toString();
+}
+
+ostream & operator << (ostream & o, const CpAndFcs & rCpAndFcs)
+{
+ copy(rCpAndFcs.begin(), rCpAndFcs.end(),
+ ostream_iterator<CpAndFc>(o, ", "));
+
+ char sBuffer[256];
+
+ snprintf(sBuffer, 255, "%" SAL_PRI_SIZET "u", rCpAndFcs.size());
+ o << sBuffer;
+
+ return o;
+}
+
+CpAndFc::CpAndFc(const Cp & rCp, const Fc & rFc, PropertyType eType_)
+: mCp(rCp), mFc(rFc), mType(eType_)
+{
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8CpAndFc.hxx b/writerfilter/source/doctok/WW8CpAndFc.hxx
new file mode 100644
index 000000000000..86a8b971a7d6
--- /dev/null
+++ b/writerfilter/source/doctok/WW8CpAndFc.hxx
@@ -0,0 +1,360 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_CP_AND_FC_HXX
+#define INCLUDED_WW8_CP_AND_FC_HXX
+
+#include <sal/types.h>
+#ifndef INCLUDED_DOCUMENT_HXX
+#include <doctok/WW8Document.hxx>
+#endif
+#include <set>
+#include <hash_map>
+#include <iostream>
+
+namespace writerfilter {
+namespace doctok
+{
+using namespace ::std;
+
+template <class T>
+bool operator <= (const T & rA, const T & rB)
+{
+ return ! ( rB < rA );
+}
+
+/**
+ A character position.
+
+ This is a wrapper to make the type for WW8 character position (CP)
+ distinct from WW8 file character positions (FC).
+*/
+struct Cp
+{
+ sal_uInt32 nCp; // the WW8 character position
+
+ Cp() : nCp(0) {}
+
+ Cp(sal_uInt32 nCp_) : nCp(nCp_) {}
+
+ /**
+ Returns the WW8 character position.
+
+ @return the WW8 character position
+ */
+ sal_uInt32 get() const { return nCp; }
+
+ /**
+ Sets the WW8 character position.
+
+ @param nCp_ the WW8 character position to set
+ */
+ void set(sal_uInt32 nCp_) { nCp = nCp_; }
+
+ /**
+ Calculate CP moved backward.
+
+ None of the involved CPs is changed.
+
+ @param n amount of movement
+
+ @return CP moved @n steps backward
+ */
+ sal_uInt32 operator - (const Cp & rCp) const
+ { return nCp - rCp.nCp; }
+
+ /**
+ Calculate CP moved forward.
+
+ None of the involved CPs is changed.
+
+ @param n amount of movement
+
+ @return CP moved @n steps forward
+ */
+ Cp operator + (sal_uInt32 n) const
+ { return Cp(nCp + n); }
+
+ /**
+ Advance CP forward.
+
+ @attention The CP is altered.
+
+ @param n amount of movement
+
+ @return CP moved @n steps forward
+ */
+ Cp & operator += (sal_uInt32 n)
+ {
+ nCp += n;
+
+ return *this;
+ }
+
+ /**
+ Return string representation of CP.
+ */
+ string toString() const;
+
+ friend bool operator < (const Cp & rA, const Cp & rB);
+ friend bool operator == (const Cp & rA, const Cp & rB);
+ friend ostream & operator << (ostream & o, const Cp & rCp);
+};
+
+/**
+ A file character position.
+
+ This is a wrapper to make the type for WW8 character position (CP)
+ distinct from WW8 file character positions (FC).
+
+ \see{Cp}
+*/
+struct Fc
+{
+ sal_uInt32 mnFc; // the WW8 character position
+ bool mbComplex;
+
+ Fc() : mnFc(0), mbComplex(false) {}
+
+ Fc(sal_uInt32 nFc, bool bComplex = true)
+ : mnFc(nFc), mbComplex(bComplex)
+ {}
+
+ sal_uInt32 complexFactor() const { return mbComplex ? 1 : 2; }
+
+ /**
+ Returns the WW8 character position.
+
+ @return the WW8 character position
+ */
+ sal_uInt32 get() const { return mnFc; }
+
+ /**
+ Sets the WW8 file character position.
+
+ @param nFc the WW8 file character position to set
+ */
+ void set(sal_uInt32 nFc) { mnFc = nFc; }
+
+ /**
+ Set if the FC is complex.
+
+ @param bComplex true if FC is set to be complex
+ */
+ void setComplex(bool bComplex) { mbComplex = bComplex; }
+
+ /**
+ Return if FC is complex.
+
+ @retval true FC is complex
+ @retval false else
+ */
+ bool isComplex() const { return mbComplex; }
+
+ /**
+ Distance of FCs.
+
+ None of the involved FCs is changed.
+
+ @param rFc FC to calculate distance to
+
+ @return Distance from @a rFc to this FC
+ */
+ sal_uInt32 operator - (const Fc & rFc) const
+ { return (mnFc - rFc.mnFc) / complexFactor(); }
+
+ /**
+ Calculate FC moved backward.
+
+ None of the involved FCs is changed.
+
+ @param n amount of movement
+
+ @return FC moved @n steps backward
+ */
+ Fc operator - (sal_uInt32 n) const
+ { return Fc(mnFc - n * complexFactor(), mbComplex); }
+
+ /**
+ Calculate FC moved forward.
+
+ None of the involved FCs is changed.
+
+ @param n amount of movement
+
+ @return FC moved @n steps Forward
+ */
+ Fc operator + (sal_uInt32 n) const
+ { return Fc(mnFc + n * complexFactor(), mbComplex); }
+
+ /**
+ Return string representation of FC.
+ */
+ string toString() const;
+
+ friend bool operator < (const Fc & rA, const Fc & rB);
+ friend bool operator == (const Fc & rA, const Fc & rB);
+ friend ostream & operator << (ostream & o, const Fc & rFc);
+};
+
+/**
+ A character position and a corresponding file character position
+ paired.
+ */
+class CpAndFc
+{
+private:
+ /**
+ character position
+ */
+ Cp mCp;
+
+ /**
+ file character position
+ */
+ Fc mFc;
+
+ /**
+ property type
+ */
+ PropertyType mType;
+
+public:
+ CpAndFc() {}
+ CpAndFc(const Cp & rCp, const Fc & rFc, PropertyType eType_);
+
+ /**
+ Return character position.
+ */
+ const Cp & getCp() const { return mCp; }
+
+ /**
+ Return file character position.
+ */
+ const Fc & getFc() const { return mFc; }
+
+ /**
+ Return property type.
+ */
+ PropertyType getType() const { return mType; }
+
+ /**
+ Return if FC is complex.
+
+ @retval true FC is complex
+ @retval false else
+ */
+ bool isComplex() const { return mFc.isComplex(); }
+
+ /**
+ Return the distance to other CpAndFc.
+
+ @param rCpAndFc the other CpAndFc
+
+ @return the distance from the CP in @a rCpAndFc to the CP in
+ CpAndFc.
+ */
+ sal_uInt32 operator-(const CpAndFc & rCpAndFc) const
+ { return mCp - rCpAndFc.mCp; }
+
+ /**
+ Return string representation of the CpAndFc.
+ */
+ string toString() const;
+
+ friend bool operator < (const CpAndFc & rA, const CpAndFc & rB);
+ friend bool operator == (const CpAndFc & rA, const CpAndFc & rB);
+ friend ostream & operator << (ostream & o, const CpAndFc & rCpAndFc);
+};
+
+struct CpAndFcLess
+{
+ CpAndFcLess()
+ {
+ }
+
+ bool operator()(const CpAndFc & rA, const CpAndFc & rB) const
+ {
+ return rA < rB;
+ }
+
+ bool operator()(const CpAndFc & rA, const Cp & rB) const
+ {
+ return rA.getCp() < rB;
+ }
+
+ bool operator()(const Cp & rA, const CpAndFc & rB) const
+ {
+ return rA < rB.getCp();
+ }
+};
+
+
+typedef set<CpAndFc, CpAndFcLess> CpAndFcs;
+
+ostream & operator << (ostream & o, const CpAndFcs & rCpAndFcs);
+
+struct CpHash
+{
+ size_t operator()(const Cp & rCp) const
+ {
+ return rCp.get();
+ }
+};
+
+struct FcHash
+{
+ size_t operator()(const Fc & rFc) const
+ {
+ return rFc.get();
+ }
+};
+
+struct CpEq
+{
+ bool operator() (const Cp & rA, const Cp &rB) const
+ {
+ return rA == rB;
+ }
+};
+
+struct CpAndFcHash
+{
+ size_t operator()(const CpAndFc & rCpAndFc) const
+ {
+ CpHash aHash;
+
+ return aHash(rCpAndFc.getCp());
+ }
+};
+
+typedef hash_map<Cp, Fc, CpHash, CpEq> Cp2FcHashMap_t;
+
+} // namespace doctok
+} // namespace writerfilter
+
+#endif // INCLUDED_WW8_CP_AND_FC_HXX
diff --git a/writerfilter/source/doctok/WW8DocumentImpl.cxx b/writerfilter/source/doctok/WW8DocumentImpl.cxx
new file mode 100644
index 000000000000..d314854836e9
--- /dev/null
+++ b/writerfilter/source/doctok/WW8DocumentImpl.cxx
@@ -0,0 +1,2277 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <resourcemodel/exceptions.hxx>
+#include <resourcemodel/QNameToString.hxx>
+#include <WW8DocumentImpl.hxx>
+#include <WW8FKPImpl.hxx>
+#include <WW8PieceTableImpl.hxx>
+#include <WW8BinTableImpl.hxx>
+#include <WW8StreamImpl.hxx>
+#include <WW8Sttbf.hxx>
+#include <Dff.hxx>
+#include <iterator>
+#include <XNoteHelperImpl.hxx>
+#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <doctokLoggers.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+
+using namespace ::std;
+
+template <class T>
+struct PLCFHelper
+{
+ static void processPLCFCpAndFcs(WW8DocumentImpl & rDoc,
+ WW8PieceTable::Pointer_t pPieceTable,
+ typename PLCF<T>::Pointer_t pPLCF,
+ PropertyType eType,
+ sal_uInt32 nOffset)
+ {
+ sal_uInt32 nCount = pPLCF->getEntryCount();
+ for (sal_uInt32 n = 0; n < nCount; ++n)
+ {
+ Cp aCp(pPLCF->getFc(n) + nOffset);
+ CpAndFc aCpAndFc = pPieceTable->createCpAndFc(aCp, eType);
+
+ rDoc.insertCpAndFc(aCpAndFc);
+ }
+ }
+};
+
+// WW8DocumentIteratorImpl
+bool operator == (const WW8DocumentIterator & rA,
+ const WW8DocumentIterator & rB)
+{
+ return rA.equal(rB);
+}
+
+WW8DocumentIterator::~WW8DocumentIterator()
+{
+}
+
+WW8DocumentIteratorImpl::~WW8DocumentIteratorImpl()
+{
+}
+
+WW8DocumentIterator & WW8DocumentIteratorImpl::operator++()
+{
+ mCpAndFc = mpDocument->getNextCp(mCpAndFc);
+
+ return *this;
+}
+
+WW8DocumentIterator & WW8DocumentIteratorImpl::operator--()
+{
+ mCpAndFc = mpDocument->getPrevCp(mCpAndFc);
+
+ return *this;
+}
+
+bool WW8DocumentIteratorImpl::equal(const WW8DocumentIterator & rIt_) const
+{
+ const WW8DocumentIteratorImpl & rIt =
+ dynamic_cast<const WW8DocumentIteratorImpl &>(rIt_);
+
+ return mCpAndFc == rIt.mCpAndFc && mpDocument == rIt.mpDocument;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8DocumentIteratorImpl::getProperties() const
+{
+ return mpDocument->getProperties(mCpAndFc);
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+WW8DocumentIteratorImpl::getSubDocument() const
+{
+ return mpDocument->getSubDocument(mCpAndFc);
+}
+
+WW8SED * WW8DocumentIteratorImpl::getSED() const
+{
+ return mpDocument->getSED(mCpAndFc);
+}
+
+WW8Stream::Sequence WW8DocumentIteratorImpl::getText()
+{
+ return mpDocument->getText(mCpAndFc);
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8DocumentIteratorImpl::getShape() const
+{
+ return mpDocument->getShape(mCpAndFc);
+}
+
+PropertyType WW8DocumentIteratorImpl::getPropertyType() const
+{
+ return mCpAndFc.getType();
+}
+
+bool WW8DocumentIteratorImpl::isComplex() const
+{
+ return mCpAndFc.isComplex();
+}
+
+void WW8DocumentIteratorImpl::dump(ostream & o) const
+{
+ o << mCpAndFc;
+}
+
+string WW8DocumentIteratorImpl::toString() const
+{
+ return mCpAndFc.toString();
+}
+
+// WW8DocumentImpl
+
+WW8Document::~WW8Document()
+{
+}
+
+class WW8IdToString : public IdToString
+{
+public:
+ WW8IdToString() : IdToString() {}
+ virtual ~WW8IdToString() {}
+
+ virtual string toString(const Id & rId) const
+ {
+ string s((*SprmIdToString::Instance())(rId));
+
+ if (s.size() == 0)
+ s = (*QNameToString::Instance())(rId);
+
+ return s;
+ }
+};
+
+WW8DocumentImpl::~WW8DocumentImpl()
+{
+}
+
+WW8DocumentImpl::WW8DocumentImpl(WW8Stream::Pointer_t rpStream)
+: bSubDocument(false), mfcPicLoc(0), mbPicIsData(false), mpStream(rpStream),
+mbInSection(false), mbInParagraphGroup(false), mbInCharacterGroup(false)
+{
+ mpDocStream = getSubStream(::rtl::OUString::createFromAscii
+ ("WordDocument"));
+
+ try
+ {
+ mpDataStream = getSubStream(::rtl::OUString::createFromAscii
+ ("Data"));
+ }
+ catch (ExceptionNotFound e)
+ {
+ }
+
+ try
+ {
+ mpCompObjStream = getSubStream(::rtl::OUString::createFromAscii
+ ("\1CompObj"));
+ }
+ catch (ExceptionNotFound e)
+ {
+ }
+
+ mpCHPFKPCache =
+ WW8FKPCache::Pointer_t(new WW8CHPFKPCacheImpl(mpDocStream, 5));
+ mpPAPFKPCache =
+ WW8FKPCache::Pointer_t(new WW8PAPFKPCacheImpl(mpDocStream, 5));
+
+ mpFib = WW8Fib::Pointer_t(new WW8Fib(*mpDocStream));
+
+ switch (mpFib->get_fWhichTblStm())
+ {
+ case 0:
+ mpTableStream = getSubStream(::rtl::OUString::createFromAscii
+ ("0Table"));
+
+ break;
+
+ case 1:
+ mpTableStream = getSubStream(::rtl::OUString::createFromAscii
+ ("1Table"));
+
+ break;
+
+ default:
+ break;
+ }
+
+ if (mpTableStream.get() == NULL)
+ throw ExceptionNotFound("Table stream not found.");
+
+ mpPieceTable =
+ WW8PieceTable::Pointer_t
+ (new WW8PieceTableImpl(*mpTableStream, mpFib->get_fcClx(),
+ mpFib->get_lcbClx()));
+
+ {
+ Cp aCp(mpPieceTable->getLastCp());
+ Fc aFc(mpPieceTable->getLastFc());
+ CpAndFc aCpAndFc(aCp, aFc, PROP_DOC);
+ mCpAndFcs.insert(aCpAndFc);
+ }
+
+ {
+ Cp aCp(mpFib->get_ccpText());
+
+ mDocumentEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
+ PROP_DOC);
+ mCpAndFcs.insert(mDocumentEndCpAndFc);
+
+ aCp += mpFib->get_ccpFtn();
+ mFootnoteEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
+ PROP_DOC);
+ mCpAndFcs.insert(mFootnoteEndCpAndFc);
+
+ aCp += mpFib->get_ccpHdd();
+ mHeaderEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
+ PROP_DOC);
+ mCpAndFcs.insert(mHeaderEndCpAndFc);
+
+ aCp += mpFib->get_ccpAtn();
+ mAnnotationEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
+ PROP_DOC);
+ mCpAndFcs.insert(mAnnotationEndCpAndFc);
+
+ aCp += mpFib->get_ccpEdn();
+ mEndnoteEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
+ PROP_DOC);
+ mCpAndFcs.insert(mEndnoteEndCpAndFc);
+
+ aCp += mpFib->get_ccpTxbx();
+ mTextboxEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
+ PROP_DOC);
+ mCpAndFcs.insert(mTextboxEndCpAndFc);
+
+ aCp += mpFib->get_ccpHdrTxbx();
+ mTextboxHeaderEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
+ PROP_DOC);
+ mCpAndFcs.insert(mTextboxHeaderEndCpAndFc);
+ }
+
+ mpBinTablePAPX =
+ WW8BinTable::Pointer_t(new WW8BinTableImpl
+ (*mpTableStream,
+ mpFib->get_fcPlcfbtePapx(),
+ mpFib->get_lcbPlcfbtePapx()));
+
+ //clog << "BinTable(PAP):" << mpBinTablePAPX->toString();
+
+ parseBinTableCpAndFcs(*mpBinTablePAPX, PROP_PAP);
+
+ mpBinTableCHPX =
+ WW8BinTable::Pointer_t(new WW8BinTableImpl
+ (*mpTableStream,
+ mpFib->get_fcPlcfbteChpx(),
+ mpFib->get_lcbPlcfbteChpx()));
+
+ //clog << "BinTable(CHP):" << mpBinTableCHPX->toString();
+
+ parseBinTableCpAndFcs(*mpBinTableCHPX, PROP_CHP);
+
+ mpSEDs = PLCF<WW8SED>::Pointer_t(new PLCF<WW8SED>
+ (*mpTableStream,
+ mpFib->get_fcPlcfsed(),
+ mpFib->get_lcbPlcfsed()));
+
+ //mpSEDs->dump(clog);
+
+ {
+ PLCFHelper<WW8SED>::processPLCFCpAndFcs
+ (*this, mpPieceTable, mpSEDs, PROP_SEC, 0);
+ }
+
+ sal_uInt32 nHeaders = getHeaderCount();
+
+ if (nHeaders > 0)
+ {
+ mpHeaderOffsets = WW8StructBase::Pointer_t
+ (new WW8StructBase(*mpTableStream,
+ mpFib->get_fcPlcfhdd(),
+ mpFib->get_lcbPlcfhdd()));
+
+ {
+ for (sal_uInt32 n = 0; n <= nHeaders; ++n)
+ {
+ CpAndFc aCpAndFc(getHeaderCpAndFc(n));
+
+ mCpAndFcs.insert(aCpAndFc);
+ }
+ }
+ }
+
+ if (mpFib->get_lcbPlcffndTxt() > 0)
+ {
+ WW8StructBase::Pointer_t pCps
+ (new WW8StructBase(*mpTableStream,
+ mpFib->get_fcPlcffndTxt(),
+ mpFib->get_lcbPlcffndTxt()));
+
+ PLCF<WW8FRD>::Pointer_t pRefs
+ (new PLCF<WW8FRD>(*mpTableStream,
+ mpFib->get_fcPlcffndRef(),
+ mpFib->get_lcbPlcffndRef()));
+
+ mpFootnoteHelper = XNoteHelper<WW8FRD>::Pointer_t
+ (new XNoteHelper<WW8FRD>(pCps, pRefs, mpPieceTable, this,
+ PROP_FOOTNOTE, getDocumentEndCp()));
+
+ mpFootnoteHelper->init();
+ }
+
+ if (mpFib->get_lcbPlcfendTxt() > 0)
+ {
+ WW8StructBase::Pointer_t pCps
+ (new WW8StructBase(*mpTableStream,
+ mpFib->get_fcPlcfendTxt(),
+ mpFib->get_lcbPlcfendTxt()));
+
+ PLCF<WW8FRD>::Pointer_t pRefs
+ (new PLCF<WW8FRD>(*mpTableStream,
+ mpFib->get_fcPlcfendRef(),
+ mpFib->get_lcbPlcfendRef()));
+
+ mpEndnoteHelper = XNoteHelper<WW8FRD>::Pointer_t
+ (new XNoteHelper<WW8FRD>(pCps, pRefs, mpPieceTable, this,
+ PROP_ENDNOTE, getAnnotationEndCp()));
+
+ mpEndnoteHelper->init();
+ }
+
+ if (mpFib->get_lcbPlcfandTxt() > 0)
+ {
+ WW8StructBase::Pointer_t pCps
+ (new WW8StructBase(*mpTableStream,
+ mpFib->get_fcPlcfandTxt(),
+ mpFib->get_lcbPlcfandTxt()));
+
+ PLCF<WW8ATRD>::Pointer_t pRefs
+ (new PLCF<WW8ATRD>(*mpTableStream,
+ mpFib->get_fcPlcfandRef(),
+ mpFib->get_lcbPlcfandRef()));
+
+ mpAnnotationHelper = XNoteHelper<WW8ATRD>::Pointer_t
+ (new XNoteHelper<WW8ATRD>(pCps, pRefs, mpPieceTable, this,
+ PROP_ANNOTATION, getHeaderEndCp()));
+
+ mpAnnotationHelper->init();
+ }
+
+ if (mpFib->get_lcbSttbfbkmk() > 0)
+ {
+ PLCF<WW8BKF>::Pointer_t pStartCps
+ (new PLCF<WW8BKF>(*mpTableStream, mpFib->get_fcPlcfbkf(),
+ mpFib->get_lcbPlcfbkf()));
+
+ WW8StructBase::Pointer_t pEndCps
+ (new WW8StructBase(*mpTableStream, mpFib->get_fcPlcfbkl(),
+ mpFib->get_lcbPlcfbkl()));
+
+ WW8Sttbf::Pointer_t pNames
+ (new WW8Sttbf(*mpTableStream, mpFib->get_fcSttbfbkmk(),
+ mpFib->get_lcbSttbfbkmk()));
+
+ mpBookmarkHelper = BookmarkHelper::Pointer_t
+ (new BookmarkHelper(pStartCps, pEndCps, pNames, mpPieceTable, this));
+
+ mpBookmarkHelper->init();
+ }
+
+ {
+ PLCF<WW8FLD>::Pointer_t pPlcffldMom;
+
+ if (mpFib->get_lcbPlcffldMom() > 0)
+ {
+ pPlcffldMom = PLCF<WW8FLD>::Pointer_t
+ (new PLCF<WW8FLD>(*mpTableStream,
+ mpFib->get_fcPlcffldMom(),
+ mpFib->get_lcbPlcffldMom()));
+
+ mpFieldHelper = FieldHelper::Pointer_t
+ (new FieldHelper(pPlcffldMom,
+ this));
+
+ mpFieldHelper->init();
+ }
+ }
+
+ PLCF<WW8FSPA>::Pointer_t pPlcspaMom;
+ if (mpFib->get_lcbPlcspaMom() > 0)
+ {
+ pPlcspaMom = PLCF<WW8FSPA>::Pointer_t
+ (new PLCF<WW8FSPA>
+ (*mpTableStream, mpFib->get_fcPlcspaMom(),
+ mpFib->get_lcbPlcspaMom()));
+ }
+
+ PLCF<WW8FSPA>::Pointer_t pPlcspaHdr;
+ if (mpFib->get_lcbPlcspaHdr() > 0)
+ {
+ pPlcspaHdr = PLCF<WW8FSPA>::Pointer_t
+ (new PLCF<WW8FSPA>
+ (*mpTableStream, mpFib->get_fcPlcspaHdr(),
+ mpFib->get_lcbPlcspaHdr()));
+ }
+
+ mpShapeHelper = ShapeHelper::Pointer_t
+ (new ShapeHelper(pPlcspaMom, pPlcspaHdr, this));
+
+ mpShapeHelper->init();
+
+ PLCF<WW8BKD>::Pointer_t pPlcbkdMother;
+ if (mpFib->get_fcBkdMother() > 0 && mpFib->get_lcbBkdMother() > 0)
+ {
+ pPlcbkdMother = PLCF<WW8BKD>::Pointer_t
+ (new PLCF<WW8BKD>
+ (*mpTableStream, mpFib->get_fcBkdMother(),
+ mpFib->get_lcbBkdMother()));
+ }
+
+ mpBreakHelper = BreakHelper::Pointer_t
+ (new BreakHelper(pPlcbkdMother, this));
+
+ mpBreakHelper->init();
+
+ if (mpFib->get_fcDggInfo() != 0 && mpFib->get_lcbDggInfo() > 0)
+ {
+ mpDffBlock = DffBlock::Pointer_t
+ (new DffBlock(*mpTableStream, mpFib->get_fcDggInfo(),
+ mpFib->get_lcbDggInfo(), 1));
+
+ mpDffBlock->setDocument(this);
+ }
+
+ if (mpFib->get_lcbPlcftxbxTxt() > 0)
+ {
+ mpTextBoxStories = PLCF<WW8FTXBXS>::Pointer_t
+ (new PLCF<WW8FTXBXS>(*mpTableStream,
+ mpFib->get_fcPlcftxbxTxt(),
+ mpFib->get_lcbPlcftxbxTxt()));
+
+ PLCFHelper<WW8FTXBXS>::processPLCFCpAndFcs
+ (*this, mpPieceTable, mpTextBoxStories, PROP_DOC,
+ mEndnoteEndCpAndFc.getCp().get());
+ }
+
+ if (mCpAndFcs.size() > 0)
+ {
+ mCpAndFcStart = *mCpAndFcs.begin();
+ mCpAndFcEnd = getDocumentEndCp();
+ }
+}
+
+bool WW8DocumentImpl::isSpecial(sal_uInt32 nChar)
+{
+ bool bResult = false;
+
+ if (nChar <= 8)
+ bResult = true;
+ else if (nChar >= 10)
+ {
+ if (nChar == 12)
+ bResult= true;
+ else if (nChar <= 16)
+ bResult = true;
+ else if (nChar >= 22)
+ {
+ if (nChar <= 30)
+ bResult = true;
+ else if (nChar >= 33)
+ {
+ if (nChar <= 39)
+ bResult = true;
+ else if (nChar == 41)
+ bResult = true;
+ }
+ }
+ }
+
+ return bResult;
+}
+
+WW8DocumentImpl::WW8DocumentImpl(const WW8DocumentImpl & rSrc,
+ const CpAndFc & rStart, const CpAndFc & rEnd)
+: bSubDocument(true), mfcPicLoc(0), mbPicIsData(false)
+{
+ Assign(rSrc);
+
+ mCpAndFcStart = rStart;
+ mCpAndFcEnd = rEnd;
+}
+
+WW8DocumentImpl & WW8DocumentImpl::Assign(const WW8DocumentImpl & rSrc)
+{
+ mCpAndFcs = rSrc.mCpAndFcs;
+
+ mpCHPFKPCache = rSrc.mpCHPFKPCache;
+ mpPAPFKPCache = rSrc.mpPAPFKPCache;
+
+ mpStream = rSrc.mpStream;
+ mpTableStream = rSrc.mpTableStream;
+ mpDataStream = rSrc.mpDataStream;
+ mpDocStream = rSrc.mpDocStream;
+ mpCompObjStream = rSrc.mpCompObjStream;
+
+ mpPieceTable = rSrc.mpPieceTable;
+
+ mpBinTableCHPX = rSrc.mpBinTableCHPX;
+ mpBinTablePAPX = rSrc.mpBinTablePAPX;
+
+ mpSEDs = rSrc.mpSEDs;
+
+ mpFib = rSrc.mpFib;
+
+ mpHeaderOffsets = rSrc.mpHeaderOffsets;
+ mpFootnoteHelper = rSrc.mpFootnoteHelper;
+ mpEndnoteHelper = rSrc.mpEndnoteHelper;
+ mpAnnotationHelper = rSrc.mpAnnotationHelper;
+ mpShapeHelper = rSrc.mpShapeHelper;
+ mpBreakHelper = rSrc.mpBreakHelper;
+
+ mpBookmarkHelper = rSrc.mpBookmarkHelper;
+
+ mpDffBlock = rSrc.mpDffBlock;
+ mpTextBoxStories = rSrc.mpTextBoxStories;
+
+ mDocumentEndCpAndFc = rSrc.mDocumentEndCpAndFc;
+ mFootnoteEndCpAndFc = rSrc.mFootnoteEndCpAndFc;
+
+ return *this;
+}
+
+string WW8DocumentImpl::getType() const
+{
+ return "WW8DocumentImpl";
+}
+
+void WW8DocumentImpl::parseBinTableCpAndFcs(WW8BinTable & rTable,
+ PropertyType eType_)
+{
+ //clog << "<bintable type=\"" << propertyTypeToString(eType_) << "\">" << endl;
+ for (sal_uInt32 i = 0; i < rTable.getEntryCount(); i++)
+ {
+#if 0
+ char sBuffer[255];
+ snprintf(sBuffer, 255, "%ld", i);
+ char sBufferPageNum[255];
+ snprintf(sBufferPageNum, 255, "%ld", rTable.getPageNumber(i));
+#endif
+ Fc aFcFromTable(rTable.getFc(i));
+
+ if (aFcFromTable < mpPieceTable->getFirstFc())
+ aFcFromTable = mpPieceTable->getFirstFc();
+
+ bool bComplex = mpPieceTable->isComplex(aFcFromTable);
+ aFcFromTable.setComplex(bComplex);
+
+ //clog << "<entry fc=\"" << aFcFromTable.toString() << "\">" << endl;
+
+ try
+ {
+ Cp aCpFromTable(mpPieceTable->fc2cp(aFcFromTable));
+ CpAndFc aCpAndFcFromTable(aCpFromTable, aFcFromTable, eType_);
+
+ mCpAndFcs.insert(aCpAndFcFromTable);
+
+ WW8FKP::Pointer_t pFKP;
+
+ switch (eType_)
+ {
+ case PROP_CHP:
+ pFKP = getFKPCHPX(rTable.getPageNumber(i),
+ aCpAndFcFromTable.isComplex());
+
+ break;
+
+ case PROP_PAP:
+ pFKP = getFKPPAPX(rTable.getPageNumber(i),
+ aCpAndFcFromTable.isComplex());
+
+ break;
+ default:
+ break;
+ }
+
+ for (sal_uInt32 n = 0; n < pFKP->getEntryCount(); n++)
+ {
+ Fc aFc = pFKP->getFc(n);
+
+ if (aFc < mpPieceTable->getFirstFc())
+ aFc = mpPieceTable->getFirstFc();
+
+ bool bComplexFKP = mpPieceTable->isComplex(aFc);
+ aFc.setComplex(bComplexFKP);
+
+ //clog << "<fkpentry fc=\"" << aFc.toString() << "\"/>" << endl;
+
+ try
+ {
+ Cp aCp = mpPieceTable->fc2cp(aFc);
+
+ CpAndFc aCpAndFc(aCp, aFc, eType_);
+
+ mCpAndFcs.insert(aCpAndFc);
+
+ //clog << aCpAndFc << endl;
+ }
+ catch (ExceptionNotFound e)
+ {
+ clog << e.getText() << endl;
+ }
+ }
+ }
+ catch (ExceptionNotFound e)
+ {
+ clog << e.getText() << endl;
+ }
+
+ //clog << "</entry>" << endl;
+ }
+
+ //clog << "</bintable>" << endl;
+}
+
+WW8Stream::Pointer_t WW8DocumentImpl::getSubStream
+(const ::rtl::OUString & sId) const
+{
+ return mpStream->getSubStream(sId);
+}
+
+WW8Document::Pointer_t WW8DocumentImpl::getSubDocument(SubDocumentId /*nId*/)
+{
+ return WW8Document::Pointer_t(new WW8DocumentImpl(*this));
+}
+
+WW8DocumentIterator::Pointer_t
+WW8DocumentImpl::getIterator(const CpAndFc & rCpAndFc)
+{
+ return WW8DocumentIterator::Pointer_t
+ (new WW8DocumentIteratorImpl(this, rCpAndFc));
+}
+
+WW8DocumentIterator::Pointer_t WW8DocumentImpl::begin()
+{
+ return getIterator(getFirstCp());
+}
+
+WW8DocumentIterator::Pointer_t WW8DocumentImpl::end()
+{
+ return getIterator(getLastCp());
+}
+
+WW8Stream::Pointer_t WW8DocumentImpl::getDocStream() const
+{
+ return mpDocStream;
+}
+
+WW8Stream::Pointer_t WW8DocumentImpl::getDataStream() const
+{
+ return mpDataStream;
+}
+
+sal_uInt32 WW8DocumentImpl::getByteLength(const CpAndFc & rCpAndFc) const
+{
+ CpAndFc aEnd = getNextCp(rCpAndFc);
+
+ sal_uInt32 nResult = 3;
+
+ if (rCpAndFc < aEnd)
+ nResult = (aEnd - rCpAndFc) *
+ (mpPieceTable->isComplex(rCpAndFc.getCp()) ? 1 : 2);
+
+ return nResult;
+}
+
+WW8Stream::Sequence
+WW8DocumentImpl::getText(const CpAndFc & rStart)
+{
+ return mpDocStream->get(rStart.getFc().get(), getByteLength(rStart));
+}
+
+const CpAndFc & WW8DocumentImpl::getFirstCp() const
+{
+ return mCpAndFcStart;
+}
+
+const CpAndFc & WW8DocumentImpl::getLastCp() const
+{
+ return mCpAndFcEnd;
+}
+
+CpAndFc WW8DocumentImpl::getDocumentEndCp() const
+{
+ return mDocumentEndCpAndFc;
+}
+
+CpAndFc WW8DocumentImpl::getFootnodeEndCp() const
+{
+ return mFootnoteEndCpAndFc;
+}
+
+CpAndFc WW8DocumentImpl::getHeaderEndCp() const
+{
+ return mHeaderEndCpAndFc;
+}
+
+CpAndFc WW8DocumentImpl::getAnnotationEndCp() const
+{
+ return mAnnotationEndCpAndFc;
+}
+
+CpAndFc WW8DocumentImpl::getEndnoteEndCp() const
+{
+ return mEndnoteEndCpAndFc;
+}
+
+CpAndFc WW8DocumentImpl::getTextboxEndCp() const
+{
+ return mTextboxEndCpAndFc;
+}
+
+CpAndFc WW8DocumentImpl::getTextboxHeaderEndCp() const
+{
+ return mTextboxHeaderEndCpAndFc;
+}
+
+CpAndFc WW8DocumentImpl::getNextCp(const CpAndFc & rCpAndFc) const
+{
+ CpAndFc aResult = mCpAndFcEnd;
+ CpAndFcs::const_iterator aIt = mCpAndFcs.find(rCpAndFc);
+
+ if (aIt != mCpAndFcs.end())
+ {
+ aIt++;
+
+ if (aIt != mCpAndFcs.end())
+ aResult = *aIt;
+ }
+ else
+ throw ExceptionNotFound("getNextCp: " + rCpAndFc.toString());
+
+ return aResult;
+}
+
+CpAndFc WW8DocumentImpl::getPrevCp(const CpAndFc & rCpAndFc) const
+{
+ CpAndFc aResult = mCpAndFcStart;
+
+ CpAndFcs::const_iterator aIt = mCpAndFcs.find(CpAndFc(rCpAndFc));
+
+ if (aIt != mCpAndFcs.end() && aIt != mCpAndFcs.begin())
+ {
+ aIt--;
+
+ aResult = *aIt;
+ }
+ else
+ throw ExceptionNotFound("getPrevCp: " + rCpAndFc.toString());
+
+ return aResult;
+}
+
+WW8FKP::Pointer_t WW8DocumentImpl::getFKP(const CpAndFc & rCpAndFc)
+{
+ WW8FKP::Pointer_t pResult;
+
+ sal_uInt32 nPageNumber = 0;
+
+ switch (rCpAndFc.getType())
+ {
+ case PROP_PAP:
+ {
+ nPageNumber =
+ mpBinTablePAPX->getPageNumber(rCpAndFc.getFc());
+
+ pResult = getFKPPAPX(nPageNumber, rCpAndFc.isComplex());
+ }
+ break;
+ case PROP_CHP:
+ {
+ nPageNumber =
+ mpBinTableCHPX->getPageNumber(rCpAndFc.getFc());
+
+ pResult = getFKPCHPX(nPageNumber, rCpAndFc.isComplex());
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (pResult.get() != NULL)
+ pResult->setDocument(this);
+
+ return pResult;
+}
+
+WW8FKP::Pointer_t WW8DocumentImpl::getFKPCHPX(sal_uInt32 nIndex,
+ bool bComplex)
+{
+ return mpCHPFKPCache->get(nIndex, bComplex);
+}
+
+WW8FKP::Pointer_t WW8DocumentImpl::getFKPPAPX(sal_uInt32 nIndex,
+ bool bComplex)
+{
+ return mpPAPFKPCache->get(nIndex, bComplex);
+}
+
+writerfilter::Reference<Properties>::Pointer_t WW8DocumentImpl::getProperties
+(const CpAndFc & rCpAndFc)
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ switch (rCpAndFc.getType())
+ {
+ case PROP_CHP:
+ case PROP_PAP:
+ {
+ try
+ {
+ WW8FKP::Pointer_t pFKP = getFKP(rCpAndFc);
+
+ pResult = pFKP->getProperties(rCpAndFc.getFc());
+ }
+ catch (ExceptionOutOfBounds e)
+ {
+ }
+ }
+
+ break;
+
+ case PROP_SEC:
+ {
+ pResult = writerfilter::Reference<Properties>::Pointer_t
+ (getSED(rCpAndFc));
+ }
+
+ break;
+
+ case PROP_FOOTNOTE:
+ {
+ pResult = writerfilter::Reference<Properties>::Pointer_t
+ (mpFootnoteHelper->getRef(rCpAndFc));
+ }
+ break;
+
+ case PROP_ENDNOTE:
+ {
+ pResult = writerfilter::Reference<Properties>::Pointer_t
+ (mpEndnoteHelper->getRef(rCpAndFc));
+ }
+ break;
+
+ case PROP_ANNOTATION:
+ {
+ pResult = writerfilter::Reference<Properties>::Pointer_t
+ (mpAnnotationHelper->getRef(rCpAndFc));
+ }
+ break;
+
+ case PROP_BOOKMARKSTART:
+ case PROP_BOOKMARKEND:
+ {
+ pResult = getBookmark(rCpAndFc);
+ }
+
+ break;
+ case PROP_FLD:
+ {
+ pResult = getField(rCpAndFc);
+
+ mpFLD = mpFieldHelper->getWW8FLD(rCpAndFc);
+ }
+
+ break;
+ case PROP_SHP:
+ {
+ pResult = getShape(rCpAndFc);
+ }
+ break;
+ case PROP_BRK:
+ {
+ pResult = getBreak(rCpAndFc);
+ }
+ break;
+ default:
+ break;
+ }
+
+ return pResult;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+WW8DocumentImpl::getSubDocument(const CpAndFc & rCpAndFc)
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ switch (rCpAndFc.getType())
+ {
+ case PROP_FOOTNOTE:
+ pResult = getFootnote(rCpAndFc);
+ break;
+
+ case PROP_ENDNOTE:
+ pResult = getEndnote(rCpAndFc);
+ break;
+
+ case PROP_ANNOTATION:
+ pResult = getAnnotation(rCpAndFc);
+ break;
+
+ default:
+ break;
+ }
+
+ return pResult;
+}
+
+WW8SED * WW8DocumentImpl::getSED(const CpAndFc & rCpAndFc) const
+{
+ WW8SED * pResult = mpSEDs->getEntryByFc(rCpAndFc.getCp().get());
+
+ pResult->setDoc(const_cast<const WW8DocumentImpl *>(this));
+
+ return pResult;
+}
+
+writerfilter::Reference<Table>::Pointer_t WW8DocumentImpl::getListTable() const
+{
+ writerfilter::Reference<Table>::Pointer_t pResult;
+
+ if (mpFib->get_fcPlcfLst() != 0 && mpFib->get_lcbPlcfLst() > 0)
+ {
+ WW8ListTable * pList = new WW8ListTable(*mpTableStream,
+ mpFib->get_fcPlcfLst(),
+ mpFib->get_fcPlfLfo() -
+ mpFib->get_fcPlcfLst());
+
+ pList->setPayloadOffset(mpFib->get_lcbPlcfLst());
+ pList->initPayload();
+
+ pResult = writerfilter::Reference<Table>::Pointer_t(pList);
+ }
+
+ return pResult;
+}
+
+writerfilter::Reference<Table>::Pointer_t WW8DocumentImpl::getLFOTable() const
+{
+ writerfilter::Reference<Table>::Pointer_t pResult;
+
+ if (mpFib->get_fcPlfLfo() != 0 && mpFib->get_lcbPlfLfo() > 0)
+ {
+ try
+ {
+ WW8LFOTable * pLFOs = new WW8LFOTable(*mpTableStream,
+ mpFib->get_fcPlfLfo(),
+ mpFib->get_lcbPlfLfo());
+
+ pLFOs->setPayloadOffset(mpFib->get_lcbPlcfLst());
+ pLFOs->initPayload();
+
+ pResult = writerfilter::Reference<Table>::Pointer_t(pLFOs);
+ }
+ catch (Exception e)
+ {
+ clog << e.getText() << endl;
+ }
+ }
+
+ return pResult;
+}
+
+writerfilter::Reference<Table>::Pointer_t WW8DocumentImpl::getFontTable() const
+{
+ writerfilter::Reference<Table>::Pointer_t pResult;
+
+ if (mpFib->get_fcSttbfffn() != 0 && mpFib->get_lcbSttbfffn() > 0)
+ {
+ WW8FontTable * pFonts = new WW8FontTable(*mpTableStream,
+ mpFib->get_fcSttbfffn(),
+ mpFib->get_lcbSttbfffn());
+
+ pFonts->initPayload();
+
+ pResult = writerfilter::Reference<Table>::Pointer_t(pFonts);
+ }
+
+ return pResult;
+}
+
+writerfilter::Reference<Table>::Pointer_t WW8DocumentImpl::getStyleSheet() const
+{
+ writerfilter::Reference<Table>::Pointer_t pResult;
+
+ if (mpFib->get_lcbStshf() > 0)
+ {
+ WW8StyleSheet * pStyles = new WW8StyleSheet(*mpTableStream,
+ mpFib->get_fcStshf(),
+ mpFib->get_lcbStshf());
+
+ pStyles->initPayload();
+
+ pResult = writerfilter::Reference<Table>::Pointer_t(pStyles);
+ }
+
+ return pResult;
+}
+
+sal_uInt32 WW8DocumentImpl::getHeaderCount() const
+{
+ sal_uInt32 nResult = 0;
+ sal_uInt32 nLcbPlcfhdd = mpFib->get_lcbPlcfhdd();
+
+ if (nLcbPlcfhdd > 4)
+ nResult = (nLcbPlcfhdd / 4) - 1;
+
+ return nResult;
+}
+
+CpAndFc WW8DocumentImpl::getHeaderCpAndFc(sal_uInt32 nPos)
+{
+ sal_uInt32 nCount = getHeaderCount();
+
+ // There are getHeaderCount() + 1 entries in mpHeaderOffsets => greater
+ if (nPos > nCount)
+ throw ExceptionNotFound("getHeaderCpAndFc");
+
+ if (nPos == nCount)
+ return mHeaderEndCpAndFc;
+ else
+ {
+ Cp aCp(getFootnodeEndCp().getCp() + mpHeaderOffsets->getU32(nPos * 4));
+ Fc aFc(mpPieceTable->cp2fc(aCp));
+ CpAndFc aCpAndFc(aCp, aFc, PROP_DOC);
+
+ return aCpAndFc;
+ }
+
+}
+
+writerfilter::Reference<Stream>::Pointer_t WW8DocumentImpl::getHeader(sal_uInt32 nPos)
+{
+ // There are getHeaderCount() headers => greater or equal
+ if (nPos >= getHeaderCount())
+ throw ExceptionNotFound("getHeader");
+
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ CpAndFc aCpAndFcStart(getHeaderCpAndFc(nPos));
+ CpAndFc aCpAndFcEnd(getHeaderCpAndFc(nPos + 1));
+
+#if 0
+ sal_uInt32 nEquals = 1;
+ while (aCpAndFcEnd == aCpAndFcStart && nPos + nEquals < getHeaderCount())
+ {
+ ++nEquals;
+
+ aCpAndFcEnd = getHeaderCpAndFc(nPos + nEquals);
+ }
+#endif
+
+ if (aCpAndFcStart < aCpAndFcEnd)
+ pResult = writerfilter::Reference<Stream>::Pointer_t
+ (new WW8DocumentImpl(*this, aCpAndFcStart, aCpAndFcEnd));
+
+ return pResult;
+}
+
+sal_uInt32 WW8DocumentImpl::getFootnoteCount() const
+{
+ return (mpFootnoteHelper.get() != NULL) ? mpFootnoteHelper->getCount() : 0;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+WW8DocumentImpl::getFootnote(sal_uInt32 nPos)
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ if (! bSubDocument)
+ pResult = mpFootnoteHelper->get(nPos);
+
+ return pResult;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+WW8DocumentImpl::getFootnote(const CpAndFc & rCpAndFc)
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ if (! bSubDocument)
+ pResult = mpFootnoteHelper->get(rCpAndFc);
+
+ return pResult;
+}
+
+sal_uInt32 WW8DocumentImpl::getEndnoteCount() const
+{
+ return mpEndnoteHelper.get() != NULL ? mpEndnoteHelper->getCount() : 0;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+WW8DocumentImpl::getEndnote(sal_uInt32 nPos)
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ if (! bSubDocument)
+ pResult = mpEndnoteHelper->get(nPos);
+
+ return pResult;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+WW8DocumentImpl::getEndnote(const CpAndFc & rCpAndFc)
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ if (! bSubDocument)
+ pResult = mpEndnoteHelper->get(rCpAndFc);
+
+ return pResult;
+}
+
+sal_uInt32 WW8DocumentImpl::getAnnotationCount() const
+{
+ return mpAnnotationHelper.get() != NULL ?
+ mpAnnotationHelper->getCount() : 0;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+WW8DocumentImpl::getAnnotation(sal_uInt32 nPos)
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ if (! bSubDocument)
+ pResult = mpAnnotationHelper->get(nPos);
+
+ return pResult;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+WW8DocumentImpl::getAnnotation(const CpAndFc & rCpAndFc)
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ if (! bSubDocument)
+ pResult = mpAnnotationHelper->get(rCpAndFc);
+
+ return pResult;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8DocumentImpl::getBookmark(const CpAndFc & rCpAndFc) const
+{
+ return mpBookmarkHelper->getBookmark(rCpAndFc);
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8DocumentImpl::getShape(const CpAndFc & rCpAndFc) const
+{
+ return mpShapeHelper->getShape(rCpAndFc);
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8DocumentImpl::getShape(sal_uInt32 nSpid)
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+ DffRecord::Pointer_t pShape = mpDffBlock->getShape(nSpid);
+
+ if (pShape.get() != NULL)
+ {
+ DffSpContainer * pTmp = new DffSpContainer(*pShape);
+ pTmp->setDocument(this);
+
+ pResult = writerfilter::Reference<Properties>::Pointer_t(pTmp);
+ }
+
+ return pResult;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8DocumentImpl::getBreak(const CpAndFc & rCpAndFc) const
+{
+ return mpBreakHelper->getBreak(rCpAndFc);
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8DocumentImpl::getBlip(sal_uInt32 nBid)
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ if (mpDffBlock != NULL)
+ {
+ DffRecord::Pointer_t pDffRecord(mpDffBlock->getBlip(nBid));
+
+ if (pDffRecord.get() != NULL)
+ {
+ DffBSE * pBlip = new DffBSE(*pDffRecord);
+
+ if (pBlip != NULL)
+ pResult = writerfilter::Reference<Properties>::Pointer_t(pBlip);
+ }
+ }
+
+ return pResult;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8DocumentImpl::getField(const CpAndFc & rCpAndFc) const
+{
+ return mpFieldHelper->getField(rCpAndFc);
+}
+
+WW8FLD::Pointer_t WW8DocumentImpl::getCurrentFLD() const
+{
+ return mpFLD;
+}
+
+sal_uInt32 WW8DocumentImpl::getPicLocation() const
+{
+ return mfcPicLoc;
+}
+
+void WW8DocumentImpl::setPicLocation(sal_uInt32 fcPicLoc)
+{
+ mfcPicLoc = fcPicLoc;
+}
+
+bool WW8DocumentImpl::isPicData()
+{
+ return mbPicIsData;
+}
+
+void WW8DocumentImpl::setPicIsData(bool bPicIsData)
+{
+ mbPicIsData = bPicIsData;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+WW8DocumentImpl::getTextboxText(sal_uInt32 nShpId) const
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ if (mpTextBoxStories.get() != NULL)
+ {
+ sal_uInt32 nCount = mpTextBoxStories->getEntryCount();
+
+ sal_uInt32 n = 0;
+ while (n < nCount)
+ {
+ WW8FTXBXS * pTextboxStory = mpTextBoxStories->getEntryPointer(n);
+
+ if (pTextboxStory->get_lid() == nShpId)
+ break;
+
+ ++n;
+ }
+
+ if (n < nCount)
+ {
+ Cp aCpStart(mpTextBoxStories->getFc(n));
+ aCpStart += getEndnoteEndCp().getCp().get();
+ CpAndFc aCpAndFcStart =
+ mpPieceTable->createCpAndFc(aCpStart, PROP_DOC);
+ Cp aCpEnd(mpTextBoxStories->getFc(n + 1));
+ aCpEnd += getEndnoteEndCp().getCp().get();
+ CpAndFc aCpAndFcEnd = mpPieceTable->createCpAndFc(aCpEnd, PROP_DOC);
+
+ pResult = writerfilter::Reference<Stream>::Pointer_t
+ (new WW8DocumentImpl(*this, aCpAndFcStart, aCpAndFcEnd));
+ }
+ }
+
+ return pResult;
+}
+
+Id lcl_headerQName(sal_uInt32 nIndex)
+{
+ Id qName = NS_rtf::LN_header;
+
+ if (nIndex > 5)
+ {
+ switch ((nIndex - 6) % 6)
+ {
+ case 0:
+ qName = NS_rtf::LN_headerl;
+
+ break;
+ case 1:
+ qName = NS_rtf::LN_headerr;
+
+ break;
+ case 2:
+ qName = NS_rtf::LN_footerl;
+
+ break;
+ case 3:
+ qName = NS_rtf::LN_footerr;
+
+ break;
+ case 4:
+ qName = NS_rtf::LN_headerf;
+
+ break;
+ case 5:
+ qName = NS_rtf::LN_footerf;
+
+ break;
+ }
+ }
+
+ return qName;
+}
+
+Fc WW8DocumentImpl::cp2fc(const Cp & cp) const
+{
+ return mpPieceTable->cp2fc(cp);
+}
+
+Cp WW8DocumentImpl::fc2cp(const Fc & fc) const
+{
+ return mpPieceTable->fc2cp(fc);
+}
+
+CpAndFc WW8DocumentImpl::getCpAndFc(const Cp & cp, PropertyType type) const
+{
+ Fc aFc = cp2fc(cp);
+
+ return CpAndFc(cp, aFc, type);
+}
+
+CpAndFc WW8DocumentImpl::getCpAndFc(const Fc & fc, PropertyType type) const
+{
+ Cp aCp = fc2cp(fc);
+
+ return CpAndFc(aCp, fc, type);
+}
+
+void WW8DocumentImpl::resolvePicture(Stream & rStream)
+{
+ WW8Stream::Pointer_t pStream = getDataStream();
+
+ if (pStream.get() != NULL)
+ {
+ WW8StructBase aStruct(*pStream, mfcPicLoc, 4);
+ sal_uInt32 nCount = aStruct.getU32(0);
+
+ {
+ WW8PICF * pPicf = new WW8PICF(*pStream, mfcPicLoc, nCount);
+ pPicf->setDocument(this);
+
+ writerfilter::Reference<Properties>::Pointer_t pProps(pPicf);
+
+ rStream.props(pProps);
+ }
+ }
+}
+
+void WW8DocumentImpl::resolveSpecialChar(sal_uInt32 nChar, Stream & rStream)
+{
+ switch (nChar)
+ {
+ case 0x1:
+ resolvePicture(rStream);
+ break;
+ default:
+ break;
+ }
+}
+
+void WW8DocumentImpl::text(Stream & rStream, const sal_uInt8 * data, size_t len)
+{
+#ifdef DEBUG_ELEMENT
+ ::rtl::OUString sText( (const sal_Char*) data, len, RTL_TEXTENCODING_MS_1252 );
+ debug_logger->startElement("text");
+ debug_logger->chars(OUStringToOString(sText, RTL_TEXTENCODING_ASCII_US).getStr());
+ debug_logger->endElement("text");
+#endif
+ rStream.text(data, len);
+}
+
+void WW8DocumentImpl::utext(Stream & rStream, const sal_uInt8 * data, size_t len)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("utext");
+
+ ::rtl::OUString sText;
+ ::rtl::OUStringBuffer aBuffer = ::rtl:: OUStringBuffer(len);
+ aBuffer.append( (const sal_Unicode *) data, len);
+ sText = aBuffer.makeStringAndClear();
+
+ debug_logger->chars(OUStringToOString(sText, RTL_TEXTENCODING_ASCII_US).getStr());
+ debug_logger->endElement("utext");
+#endif
+ rStream.text(data, len);
+}
+
+
+void WW8DocumentImpl::resolveText(WW8DocumentIterator::Pointer_t pIt,
+ Stream & rStream)
+{
+ WW8Stream::Sequence aSeq = pIt->getText();
+
+ sal_uInt32 nCount = aSeq.getCount();
+ bool bComplex = pIt->isComplex();
+
+ /*
+ Assumption: Special characters are always at the beginning or end of a
+ run.
+ */
+ if (nCount > 0)
+ {
+ if (nCount == 1)
+ bComplex = true;
+
+ if (bComplex)
+ {
+ sal_uInt32 nStartIndex = 0;
+ sal_uInt32 nEndIndex = nCount - 1;
+
+ sal_uInt32 nCharFirst = aSeq[0];
+ sal_uInt32 nCharLast = aSeq[nEndIndex];
+
+ if (isSpecial(nCharFirst))
+ {
+ nStartIndex += 1;
+ resolveSpecialChar(nCharFirst, rStream);
+ text(rStream, &aSeq[0], 1);
+ }
+
+ if (!isSpecial(nCharLast))
+ nEndIndex += 1;
+
+ if (nStartIndex < nEndIndex)
+ {
+ sal_uInt32 nChars = nEndIndex - nStartIndex;
+ text(rStream, &aSeq[nStartIndex], nChars);
+
+ if (isSpecial(nCharLast))
+ {
+ resolveSpecialChar(nCharLast, rStream);
+ text(rStream, &aSeq[nEndIndex], 1);
+ }
+ }
+ }
+ else
+ {
+ sal_uInt32 nStartIndex = 0;
+ sal_uInt32 nEndIndex = nCount - 2;
+
+ sal_uInt32 nCharFirst = aSeq[0] + (aSeq[1] << 8);
+ sal_uInt32 nCharLast = aSeq[nEndIndex] + (aSeq[nEndIndex + 1]);
+
+ if (isSpecial(nCharFirst))
+ {
+ nStartIndex += 2;
+ resolveSpecialChar(nCharFirst, rStream);
+ utext(rStream, &aSeq[0], 1);
+ }
+
+ if (!isSpecial(nCharLast))
+ nEndIndex += 2;
+
+ if (nStartIndex < nEndIndex)
+ {
+ sal_uInt32 nChars = (nEndIndex - nStartIndex) / 2;
+ utext(rStream, &aSeq[nStartIndex], nChars);
+
+ if (isSpecial(nCharLast))
+ {
+ resolveSpecialChar(nCharLast, rStream);
+ utext(rStream, &aSeq[nEndIndex], 1);
+ }
+ }
+ }
+ }
+}
+
+void WW8DocumentImpl::startCharacterGroup(Stream & rStream)
+{
+ if (mbInCharacterGroup)
+ endCharacterGroup(rStream);
+
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("charactergroup");
+#endif
+
+ rStream.startCharacterGroup();
+ mbInCharacterGroup = true;
+}
+
+void WW8DocumentImpl::endCharacterGroup(Stream & rStream)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->endElement("charactergroup");
+#endif
+
+ rStream.endCharacterGroup();
+ mbInCharacterGroup = false;
+}
+
+void WW8DocumentImpl::startParagraphGroup(Stream & rStream)
+{
+ if (mbInParagraphGroup)
+ endParagraphGroup(rStream);
+
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("paragraphgroup");
+#endif
+
+ rStream.startParagraphGroup();
+ mbInParagraphGroup = true;
+}
+
+void WW8DocumentImpl::endParagraphGroup(Stream & rStream)
+{
+ if (mbInCharacterGroup)
+ endCharacterGroup(rStream);
+
+#ifdef DEBUG_ELEMENT
+ debug_logger->endElement("paragraphgroup");
+#endif
+ rStream.endParagraphGroup();
+ mbInParagraphGroup = false;
+}
+
+void WW8DocumentImpl::startSectionGroup(Stream & rStream)
+{
+ if (mbInSection)
+ endSectionGroup(rStream);
+
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("sectiongroup");
+#endif
+
+ rStream.startSectionGroup();
+ mbInSection = true;
+}
+
+void WW8DocumentImpl::endSectionGroup(Stream & rStream)
+{
+ if (mbInParagraphGroup)
+ endParagraphGroup(rStream);
+
+#ifdef DEBUG_ELEMENT
+ debug_logger->endElement("sectiongroup");
+#endif
+ rStream.endSectionGroup();
+ mbInSection = false;
+}
+
+void WW8DocumentImpl::resolve(Stream & rStream)
+{
+ if (! bSubDocument)
+ {
+
+ //mpPieceTable->dump(clog);
+
+ //copy(mCpAndFcs.begin(), mCpAndFcs.end(), ostream_iterator<CpAndFc>(clog, ", "));
+
+ //mpDocStream->dump(output);
+
+ //output.addItem(mTextboxHeaderEndCpAndFc.toString());
+
+#if 0
+ output.addItem("<substream-names>");
+ output.addItem(mpStream->getSubStreamNames());
+ output.addItem("</substream-names>");
+
+ if (mpDocStream.get() != NULL)
+ {
+ mpDocStream->dump(output);
+ }
+#endif
+
+ writerfilter::Reference<Properties>::Pointer_t pFib
+ (new WW8Fib(*mpFib));
+ rStream.props(pFib);
+
+#if 0
+ if (mpTextBoxStories.get() != NULL)
+ {
+ output.addItem("<textbox.boxes>");
+ mpTextBoxStories->dump(output);
+ output.addItem("</textbox.boxes>");
+ }
+#endif
+ if (mpFib->get_lcbPlcftxbxBkd() > 0)
+ {
+ PLCF<WW8BKD> aPLCF(*mpTableStream,
+ mpFib->get_fcPlcftxbxBkd(),
+ mpFib->get_lcbPlcftxbxBkd());
+#if 0
+ output.addItem("<textbox.breaks>");
+ aPLCF.dump(output);
+ output.addItem("</textbox.breaks>");
+#endif
+ }
+
+ if (mpDffBlock.get() != NULL)
+ {
+ DffBlock * pTmp = new DffBlock(*mpDffBlock);
+ //pTmp->dump(clog);
+ writerfilter::Reference<Properties>::Pointer_t pDffBlock =
+ writerfilter::Reference<Properties>::Pointer_t(pTmp);
+
+ rStream.props(pDffBlock);
+ }
+
+ {
+ rStream.info("headers");
+ sal_uInt32 nHeaderCount = getHeaderCount();
+ for (sal_uInt32 n = 0; n < nHeaderCount; ++n)
+ {
+ rStream.info(getHeaderCpAndFc(n).toString());
+ }
+ rStream.info("/headers");
+ }
+
+#if 0
+ {
+ sal_uInt32 nFootnoteCount = getFootnoteCount();
+ for (sal_uInt32 n = 0; n < nFootnoteCount; ++n)
+ {
+ //clog << "<footnote num=\"" << n << "\"/>" << endl;
+
+ writerfilter::Reference<Stream>::Pointer_t pFootnote(getFootnote(n));
+
+ if (pFootnote.get() != NULL)
+ rStream.substream(NS_rtf::LN_footnote, pFootnote);
+ }
+ }
+ {
+ sal_uInt32 nEndnoteCount = getEndnoteCount();
+ for (sal_uInt32 n = 0; n < nEndnoteCount; ++n)
+ {
+ //clog << "<endnote num=\"" << n << "\"/>" << endl;
+
+ writerfilter::Reference<Stream>::Pointer_t pEndnote(getEndnote(n));
+
+ if (pEndnote.get() != NULL)
+ rStream.substream(NS_rtf::LN_endnote, pEndnote);
+ }
+ }
+#endif
+
+
+ writerfilter::Reference<Table>::Pointer_t pListTable = getListTable();
+
+ if (pListTable.get() != NULL)
+ rStream.table(NS_rtf::LN_LISTTABLE, pListTable);
+
+ writerfilter::Reference<Table>::Pointer_t pLFOTable = getLFOTable();
+
+ if (pLFOTable.get() != NULL)
+ rStream.table(NS_rtf::LN_LFOTABLE, pLFOTable);
+
+ writerfilter::Reference<Table>::Pointer_t pFontTable = getFontTable();
+
+ if (pFontTable.get() != NULL)
+ rStream.table(NS_rtf::LN_FONTTABLE, pFontTable);
+
+ try
+ {
+ writerfilter::Reference<Table>::Pointer_t pStyleSheet = getStyleSheet();
+
+ if (pStyleSheet.get() != NULL)
+ rStream.table(NS_rtf::LN_STYLESHEET, pStyleSheet);
+ }
+ catch (Exception e)
+ {
+ clog << e.getText() << endl;
+ }
+ }
+
+ WW8DocumentIterator::Pointer_t pIt = begin();
+ WW8DocumentIterator::Pointer_t pItEnd = end();
+
+ mbInParagraphGroup = false;
+ mbInCharacterGroup = false;
+ mbInSection = false;
+
+ sal_uInt32 nSectionIndex = 0;
+
+ rStream.info(pIt->toString());
+ rStream.info(pItEnd->toString());
+
+ while (! pIt->equal(*pItEnd))
+ {
+ writerfilter::Reference<Properties>::Pointer_t
+ pProperties(pIt->getProperties());
+
+ switch (pIt->getPropertyType())
+ {
+ case PROP_FOOTNOTE:
+ {
+ rStream.info(pIt->toString());
+ writerfilter::Reference<Stream>::Pointer_t
+ pFootnote(pIt->getSubDocument());
+
+ if (pFootnote.get() != NULL)
+ {
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("substream");
+#endif
+ rStream.substream(NS_rtf::LN_footnote, pFootnote);
+#ifdef DEBUG_ELEMENT
+ debug_logger->endElement("substream");
+#endif
+ }
+ }
+ break;
+ case PROP_ENDNOTE:
+ {
+ rStream.info(pIt->toString());
+ writerfilter::Reference<Stream>::Pointer_t
+ pEndnote(pIt->getSubDocument());
+
+ if (pEndnote.get() != NULL)
+ {
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("substream");
+#endif
+ rStream.substream(NS_rtf::LN_endnote, pEndnote);
+#ifdef DEBUG_ELEMENT
+ debug_logger->endElement("substream");
+#endif
+ }
+ }
+ break;
+ case PROP_ANNOTATION:
+ {
+ rStream.info(pIt->toString());
+ writerfilter::Reference<Stream>::Pointer_t
+ pAnnotation(pIt->getSubDocument());
+
+ if (pAnnotation.get() != NULL)
+ {
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("substream");
+#endif
+ rStream.substream(NS_rtf::LN_annotation, pAnnotation);
+#ifdef DEBUG_ELEMENT
+ debug_logger->endElement("substream");
+#endif
+ }
+ }
+ break;
+ case PROP_CHP:
+ {
+ startCharacterGroup(rStream);
+ }
+
+ break;
+ case PROP_PAP:
+ {
+ startParagraphGroup(rStream);
+ rStream.info(pIt->toString());
+ }
+
+ break;
+ case PROP_SEC:
+ {
+ startSectionGroup(rStream);
+ rStream.info(pIt->toString());
+
+ sal_uInt32 nHeaderStartIndex = 6 + nSectionIndex * 6;
+ sal_uInt32 nHeaderEndIndex = nHeaderStartIndex + 6;
+
+ if (nHeaderStartIndex >= getHeaderCount())
+ nHeaderStartIndex = getHeaderCount();
+
+ if (nHeaderEndIndex >= getHeaderCount())
+ nHeaderEndIndex = getHeaderCount();
+
+ for (sal_uInt32 n = nHeaderStartIndex; n < nHeaderEndIndex; ++n)
+ {
+ writerfilter::Reference<Stream>::Pointer_t
+ pHeader(getHeader(n));
+
+ Id qName = lcl_headerQName(n);
+
+ if (pHeader.get() != NULL)
+ rStream.substream(qName, pHeader);
+ }
+
+ ++nSectionIndex;
+ }
+
+ break;
+ default:
+ rStream.info(pIt->toString());
+ }
+
+ if (pProperties.get() != NULL)
+ {
+#ifdef DEBUG_PROPERTIES
+ PropertySetToTagHandler aHandler(IdToString::Pointer_t(new WW8IdToString()));
+ pProperties->resolve(aHandler);
+ debug_logger->addTag(aHandler.getTag());
+#endif
+
+ rStream.props(pProperties);
+ }
+
+ if (pIt->getPropertyType() == PROP_PAP)
+ {
+ startCharacterGroup(rStream);
+ }
+
+ resolveText(pIt, rStream);
+
+ ++(*pIt);
+ }
+
+ if (mbInCharacterGroup)
+ endCharacterGroup(rStream);
+
+ if (mbInParagraphGroup)
+ endParagraphGroup(rStream);
+
+ if (mbInSection)
+ endSectionGroup(rStream);
+
+}
+
+WW8Stream::Pointer_t
+WW8DocumentFactory::createStream(uno::Reference<uno::XComponentContext> rContext,
+ uno::Reference<io::XInputStream> rStream)
+{
+ return WW8Stream::Pointer_t(new WW8StreamImpl(rContext, rStream));
+}
+
+WW8Document *
+WW8DocumentFactory::createDocument(WW8Stream::Pointer_t rpStream)
+{
+ return new WW8DocumentImpl(rpStream);
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8SED::get_sepx()
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ if (get_fcSepx() != 0xffffffff)
+ {
+ WW8StructBase aTmp(*mpDoc->getDocStream(), get_fcSepx(), 2);
+ pResult = writerfilter::Reference<Properties>::Pointer_t
+ (new WW8PropertySetImpl
+ (*mpDoc->getDocStream(), get_fcSepx() + 2,
+ (sal_uInt32) aTmp.getU16(0), false));
+ }
+
+ return pResult;
+}
+
+void WW8DocumentImpl::insertCpAndFc(const CpAndFc & rCpAndFc)
+{
+ mCpAndFcs.insert(rCpAndFc);
+}
+
+string propertyTypeToString(PropertyType nType)
+{
+ string result;
+
+ switch (nType)
+ {
+ case PROP_SHP:
+ result = "SHP";
+
+ break;
+ case PROP_FLD:
+ result = "FLD";
+
+ break;
+ case PROP_BOOKMARKSTART:
+ result = "BOOKMARKSTART";
+
+ break;
+ case PROP_BOOKMARKEND:
+ result = "BOOKMARKEND";
+
+ break;
+ case PROP_ENDNOTE:
+ result = "ENDNOTE";
+
+ break;
+ case PROP_FOOTNOTE:
+ result = "FOOTNOTE";
+
+ break;
+ case PROP_ANNOTATION:
+ result = "ANNOTATION";
+
+ break;
+ case PROP_DOC:
+ result = "DOC";
+
+ break;
+
+ case PROP_SEC:
+ result = "SEC";
+
+ break;
+
+ case PROP_PAP:
+ result = "PAP";
+
+ break;
+
+ case PROP_CHP:
+ result = "CHP";
+
+ break;
+ default:
+ break;
+ }
+
+ return result;
+}
+
+string CpAndFc::toString() const
+{
+ string result;
+
+ result += "(";
+ result += getCp().toString();
+ result += ", ";
+ result += getFc().toString();
+ result += ", ";
+
+ result += propertyTypeToString(getType());
+
+ result += ")";
+
+ return result;
+}
+
+
+// Bookmark
+
+Bookmark::Bookmark(writerfilter::Reference<Properties>::Pointer_t pBKF,
+ rtl::OUString & rName)
+: mpBKF(pBKF), mName(rName)
+{
+}
+
+void Bookmark::resolve(Properties & rHandler)
+{
+ mpBKF->resolve(rHandler);
+
+ WW8Value::Pointer_t pValue = createValue(mName);
+ rHandler.attribute(NS_rtf::LN_BOOKMARKNAME, *pValue);
+}
+
+string Bookmark::getType() const
+{
+ return "Bookmark";
+}
+
+// BookmarkHelper
+
+CpAndFc BookmarkHelper::getStartCpAndFc(sal_uInt32 nPos)
+{
+ Cp aCp(mpStartCps->getFc(nPos));
+ Fc aFc(mpPieceTable->cp2fc(aCp));
+ CpAndFc aCpAndFc(aCp, aFc, PROP_BOOKMARKSTART);
+
+ return aCpAndFc;
+}
+
+CpAndFc BookmarkHelper::getEndCpAndFc(sal_uInt32 nPos)
+{
+ Cp aCp(mpEndCps->getU32(nPos * 4));
+ Fc aFc(mpPieceTable->cp2fc(aCp));
+ CpAndFc aCpAndFc(aCp, aFc, PROP_BOOKMARKEND);
+
+ return aCpAndFc;
+}
+
+rtl::OUString BookmarkHelper::getName(sal_uInt32 nPos)
+{
+ return mpNames->getEntry(nPos);
+}
+
+sal_uInt32 BookmarkHelper::getIndex(const CpAndFc & rCpAndFc)
+{
+ sal_uInt32 nResult = mpStartCps->getEntryCount();
+
+ sal_uInt32 nCp = rCpAndFc.getCp().get();
+
+ sal_uInt32 n;
+ switch (rCpAndFc.getType())
+ {
+ case PROP_BOOKMARKSTART:
+ {
+ sal_uInt32 nStartsCount = mpStartCps->getEntryCount();
+
+ for (n = 0; n < nStartsCount; ++n)
+ {
+ if (nCp == mpStartCps->getFc(n))
+ {
+ nResult = n;
+
+ break;
+ }
+ }
+
+ if (n == nStartsCount)
+ throw ExceptionNotFound("BookmarkHelper::getIndex");
+ }
+
+ break;
+
+ case PROP_BOOKMARKEND:
+ {
+ sal_uInt32 nEndsCount = mpEndCps->getCount() / 4;
+ sal_uInt32 nIndex = nEndsCount;
+
+ for (n = 0; n < nEndsCount; ++n)
+ {
+ if (nCp == mpEndCps->getU16(n * 4))
+ {
+ nIndex = n;
+
+ break;
+ }
+ }
+
+ if (n == nEndsCount)
+ throw ExceptionNotFound("BookmarkHelper::getIndex");
+
+ {
+ {
+ sal_uInt32 nStartsCount = mpStartCps->getEntryCount();
+ for (n = 0; n < nStartsCount; ++n)
+ {
+ WW8BKF::Pointer_t pBKF(mpStartCps->getEntry(n));
+
+ if (pBKF->get_ibkl() ==
+ sal::static_int_cast<sal_Int32>(nIndex))
+ {
+ nResult = n;
+
+ break;
+ }
+ }
+
+ if (n == nStartsCount)
+ throw ExceptionNotFound("BookmarkHelper::getIndex");
+ }
+ }
+ }
+
+ break;
+ default:
+ break;
+ }
+
+ return nResult;
+}
+
+void BookmarkHelper::init()
+{
+ {
+ sal_uInt32 nStartsCount = mpStartCps->getEntryCount();
+
+ for (sal_uInt32 n = 0; n < nStartsCount; ++n)
+ mpDoc->insertCpAndFc(getStartCpAndFc(n));
+ }
+
+ {
+ sal_uInt32 nEndsCount = mpEndCps->getCount() / 4;
+
+ for (sal_uInt32 n = 0; n < nEndsCount; ++n)
+ mpDoc->insertCpAndFc(getEndCpAndFc(n));
+ }
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+BookmarkHelper::getBKF(const CpAndFc & rCpAndFc)
+{
+ sal_uInt32 nIndex = getIndex(rCpAndFc);
+
+ return writerfilter::Reference<Properties>::Pointer_t
+ (mpStartCps->getEntryPointer(nIndex));
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+BookmarkHelper::getBookmark(const CpAndFc & rCpAndFc)
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ try
+ {
+ rtl::OUString aName = getName(rCpAndFc);
+
+ pResult = writerfilter::Reference<Properties>::Pointer_t
+ (new Bookmark(getBKF(rCpAndFc), aName));
+ }
+ catch (ExceptionNotFound e)
+ {
+ clog << e.getText() << endl;
+ }
+
+ return pResult;
+}
+
+rtl::OUString BookmarkHelper::getName(const CpAndFc & rCpAndFc)
+{
+ rtl::OUString sResult;
+
+ sal_uInt32 nIndex = getIndex(rCpAndFc);
+
+ sResult = getName(nIndex);
+
+ return sResult;
+}
+
+template <class T, class Helper>
+struct ProcessPLCF2Map
+{
+ void process(typename PLCF<T>::Pointer_t pPlcf,
+ typename Helper::Map_t & rMap,
+ PropertyType type,
+ WW8DocumentImpl * pDoc)
+ {
+ if (pPlcf.get() != NULL)
+ {
+ sal_uInt32 nCount = pPlcf->getEntryCount();
+
+ for (sal_uInt32 n = 0; n < nCount; n++)
+ {
+ Cp aCp(pPlcf->getFc(n));
+ CpAndFc aCpAndFc(pDoc->getCpAndFc(aCp, type));
+ typename T::Pointer_t pT = pPlcf->getEntry(n);
+
+ rMap[aCpAndFc] = pT;
+ }
+ }
+ }
+};
+
+FieldHelper::FieldHelper(PLCF<WW8FLD>::Pointer_t pPlcffldMom,
+ WW8DocumentImpl * pDoc)
+: mpDoc(pDoc)
+{
+ ProcessPLCF2Map<WW8FLD, FieldHelper> process;
+ process.process(pPlcffldMom, mMap, PROP_FLD, pDoc);
+}
+
+void FieldHelper::init()
+{
+ Map_t::iterator aIt;
+
+ for (aIt = mMap.begin(); aIt != mMap.end(); aIt++)
+ {
+ mpDoc->insertCpAndFc(aIt->first);
+ }
+}
+
+WW8FLD::Pointer_t FieldHelper::getWW8FLD(const CpAndFc & rCpAndFc)
+{
+ WW8FLD::Pointer_t pFld = mMap[rCpAndFc];
+
+ return pFld;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+FieldHelper::getField(const CpAndFc & rCpAndFc)
+{
+ WW8FLD::Pointer_t pFLD = getWW8FLD(rCpAndFc);
+
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8FLD(*pFLD));
+}
+
+ShapeHelper::ShapeHelper(PLCF<WW8FSPA>::Pointer_t pPlcspaMom,
+ PLCF<WW8FSPA>::Pointer_t pPlcspaHdr,
+ WW8DocumentImpl * pDoc)
+: mpDoc(pDoc)
+{
+ ProcessPLCF2Map<WW8FSPA, ShapeHelper> process;
+ process.process(pPlcspaMom, mMap, PROP_SHP, pDoc);
+ process.process(pPlcspaHdr, mMap, PROP_SHP, pDoc);
+}
+
+void ShapeHelper::init()
+{
+ Map_t::iterator aIt;
+
+ for (aIt = mMap.begin(); aIt != mMap.end(); aIt++)
+ {
+ mpDoc->insertCpAndFc(aIt->first);
+ aIt->second->setDocument(mpDoc);
+ }
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+ShapeHelper::getShape(const CpAndFc & rCpAndFc)
+{
+ WW8FSPA::Pointer_t pFSPA = mMap[rCpAndFc];
+
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8FSPA(*pFSPA));
+}
+
+BreakHelper::BreakHelper(PLCF<WW8BKD>::Pointer_t pPlcfbkdMom,
+ WW8DocumentImpl * pDoc)
+: mpDoc(pDoc)
+{
+ ProcessPLCF2Map<WW8BKD, BreakHelper> process;
+ process.process(pPlcfbkdMom, mMap, PROP_BRK, pDoc);
+}
+
+void BreakHelper::init()
+{
+ Map_t::iterator aIt;
+
+ for (aIt = mMap.begin(); aIt != mMap.end(); aIt++)
+ {
+ mpDoc->insertCpAndFc(aIt->first);
+ }
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+BreakHelper::getBreak(const CpAndFc & rCpAndFc)
+{
+ WW8BKD::Pointer_t pBKD = mMap[rCpAndFc];
+
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8BKD(*pBKD));
+}
+
+
+}}
diff --git a/writerfilter/source/doctok/WW8DocumentImpl.hxx b/writerfilter/source/doctok/WW8DocumentImpl.hxx
new file mode 100644
index 000000000000..65c24e913b37
--- /dev/null
+++ b/writerfilter/source/doctok/WW8DocumentImpl.hxx
@@ -0,0 +1,827 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_DOCUMENT_IMPL_HXX
+#define INCLUDED_WW8_DOCUMENT_IMPL_HXX
+
+#include <set>
+#include <WW8PieceTable.hxx>
+#include <WW8BinTable.hxx>
+#include <resources.hxx>
+#ifndef INCLUDED_WW8_RESOURCE_MODEL_HXX
+#include <resourcemodel/WW8ResourceModel.hxx>
+#endif
+#include <PLCF.hxx>
+#include <WW8Sttbf.hxx>
+#include <XNoteHelper.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+
+class WW8DocumentImpl;
+
+/**
+ A bookmark.
+*/
+class Bookmark : public writerfilter::Reference<Properties>
+{
+ /// bookmark first descriptor
+ writerfilter::Reference<Properties>::Pointer_t mpBKF;
+
+ /// name of bookmark
+ rtl::OUString mName;
+
+public:
+ Bookmark(writerfilter::Reference<Properties>::Pointer_t pBKF,
+ rtl::OUString & rName);
+
+ /**
+ Resolve bookmark to handler.
+
+ @param rHandler handler to send events to
+ */
+ virtual void resolve(Properties & rHandler);
+
+ virtual string getType() const;
+};
+
+/**
+ A helper for bookmarks.
+ */
+class BookmarkHelper
+{
+ /// PLCF containing Cps and BKFs for the bookmarks
+ PLCF<WW8BKF>::Pointer_t mpStartCps;
+
+ /// Cps of the ends of bookmarks
+ WW8StructBase::Pointer_t mpEndCps;
+
+ /// STTBF containing the names of bookmarks
+ WW8Sttbf::Pointer_t mpNames;
+
+ /// piece table for converting CPs to FCs
+ WW8PieceTable::Pointer_t mpPieceTable;
+
+ /// document to insert CpAndFcs to
+ WW8DocumentImpl * mpDoc;
+
+ /**
+ Return start CpAndFc for a bookmark.
+
+ @param nPos index of the bookmark
+ */
+ CpAndFc getStartCpAndFc(sal_uInt32 nPos);
+
+ /**
+ Return end CpAndFc for a bookmark.
+
+ @param nPos index of the bookmark
+ */
+ CpAndFc getEndCpAndFc(sal_uInt32 nPos);
+
+ /**
+ Return the name of a bookmark.
+
+ @param nPos index of the bookmark
+ */
+ rtl::OUString getName(sal_uInt32 nPos);
+
+ /**
+ Return index of a bookmark.
+
+ @param rCpAndFc CpAndFc of the bookmark
+ */
+ sal_uInt32 getIndex(const CpAndFc & rCpAndFc);
+
+public:
+ typedef boost::shared_ptr<BookmarkHelper> Pointer_t;
+
+ BookmarkHelper(PLCF<WW8BKF>::Pointer_t pStartCps,
+ WW8StructBase::Pointer_t pEndCps,
+ WW8Sttbf::Pointer_t pNames,
+ WW8PieceTable::Pointer_t pPieceTable,
+ WW8DocumentImpl * pDoc)
+ : mpStartCps(pStartCps), mpEndCps(pEndCps), mpNames(pNames),
+ mpPieceTable(pPieceTable), mpDoc(pDoc)
+ {
+ }
+
+ /**
+ Initialize.
+
+ Inserts CpAndFcs for the bookmark starts and ends into the
+ document.
+ */
+ void init();
+
+ /**
+ Return BKF of a bookmark.
+
+ @param rCpAndFc CpAndFc of the bookmark
+ */
+ writerfilter::Reference<Properties>::Pointer_t getBKF
+ (const CpAndFc & rCpAndFc);
+
+ /**
+ Return the name of a bookmark.
+
+ @param rCpAndFc CpAndFc of the bookmark
+ */
+ rtl::OUString getName(const CpAndFc & rCp);
+
+ /**
+ Return bookmark.
+ @param rCpAndFc CpAndFc of the bookmark
+ */
+ writerfilter::Reference<Properties>::Pointer_t
+ getBookmark(const CpAndFc & rCpAndFc);
+};
+
+/**
+ Helper for shapes.
+ */
+class ShapeHelper
+{
+public:
+ typedef hash_map<CpAndFc, WW8FSPA::Pointer_t, CpAndFcHash> Map_t;
+
+private:
+ WW8DocumentImpl * mpDoc;
+ Map_t mMap;
+
+public:
+ typedef boost::shared_ptr<ShapeHelper> Pointer_t;
+ ShapeHelper(PLCF<WW8FSPA>::Pointer_t pPlcspaMom,
+ PLCF<WW8FSPA>::Pointer_t pPlcspaHdr,
+ WW8DocumentImpl * pDoc);
+
+ void init();
+
+ writerfilter::Reference<Properties>::Pointer_t
+ getShape(const CpAndFc & rCpAndFc);
+
+};
+
+/**
+ Helper for fields.
+ */
+class FieldHelper
+{
+public:
+ typedef hash_map<CpAndFc, WW8FLD::Pointer_t,
+ CpAndFcHash> Map_t;
+
+private:
+ WW8DocumentImpl * mpDoc;
+ Map_t mMap;
+public:
+
+ typedef boost::shared_ptr<FieldHelper> Pointer_t;
+ FieldHelper(PLCF<WW8FLD>::Pointer_t pPlcffldMom,
+ WW8DocumentImpl * pDoc);
+
+ void init();
+
+ writerfilter::Reference<Properties>::Pointer_t
+ getField(const CpAndFc & rCpAndFc);
+
+ WW8FLD::Pointer_t getWW8FLD(const CpAndFc & rCpAndFc);
+};
+
+/**
+ Helper for Breaks.
+*/
+class BreakHelper
+{
+public:
+ typedef hash_map<CpAndFc, WW8BKD::Pointer_t,
+ CpAndFcHash> Map_t;
+private:
+ WW8DocumentImpl * mpDoc;
+ Map_t mMap;
+public:
+ typedef boost::shared_ptr<BreakHelper> Pointer_t;
+ BreakHelper(PLCF<WW8BKD>::Pointer_t pPlcfbkdMom,
+ WW8DocumentImpl * pDoc);
+
+ void init();
+
+ writerfilter::Reference<Properties>::Pointer_t
+ getBreak(const CpAndFc & rCpAndFc);
+};
+
+/**
+ Implementation class for document.
+ */
+class WW8DocumentImpl : public WW8Document
+{
+ /// true if the document is contained in another document
+ bool bSubDocument;
+
+ /// picture location
+ sal_uInt32 mfcPicLoc;
+
+ /// true if FFDATA structure is found at offset mfcPicLoc in data stream
+ bool mbPicIsData;
+
+ /// current field descriptor
+ WW8FLD::Pointer_t mpFLD;
+
+ /// CpAndFcs in the document where properties change
+ CpAndFcs mCpAndFcs;
+
+ /// CpAndFc pointing to the start of the document
+ CpAndFc mCpAndFcStart;
+
+ /// CpAndFc pointing to the end of the document
+ CpAndFc mCpAndFcEnd;
+
+ /// pointer to the cache of FKPs containing character properties
+ WW8FKPCache::Pointer_t mpCHPFKPCache;
+
+ /// pointer to the cache of FPKs containing paragraph properties
+ WW8FKPCache::Pointer_t mpPAPFKPCache;
+
+ /// pointer to the stream containing the whole document
+ WW8Stream::Pointer_t mpStream;
+
+ /// pointer to the substream of the document containing table like
+ /// structures
+ WW8Stream::Pointer_t mpTableStream;
+
+ /// pointer to the substream of the document containing the
+ /// document contents and formatting information
+ WW8Stream::Pointer_t mpDocStream;
+
+ /// pointer to the data stream of the document
+ WW8Stream::Pointer_t mpDataStream;
+
+ /// pointer to the compound object stream of the document
+ WW8Stream::Pointer_t mpCompObjStream;
+
+ /// pointer to the piece table
+ WW8PieceTable::Pointer_t mpPieceTable;
+
+ /// pointer to the bin table for paragraph properties
+ WW8BinTable::Pointer_t mpBinTablePAPX;
+
+ /// pointer to the bin table for character properties
+ WW8BinTable::Pointer_t mpBinTableCHPX;
+
+ /// PLCF containing the section descriptions
+ PLCF<WW8SED>::Pointer_t mpSEDs;
+
+ /// pointer to the file information block
+ WW8Fib::Pointer_t mpFib;
+
+ /// pointer to the offsets of headers/footers
+ WW8StructBase::Pointer_t mpHeaderOffsets;
+
+ /// pointer to the helper for footnotes
+ XNoteHelper<WW8FRD>::Pointer_t mpFootnoteHelper;
+
+ /// pointer to the helper for endnotes
+ XNoteHelper<WW8FRD>::Pointer_t mpEndnoteHelper;
+
+ /// pointer to the helper for annotations
+ XNoteHelper<WW8ATRD>::Pointer_t mpAnnotationHelper;
+
+ /// pointer to the helper for bookmarks
+ BookmarkHelper::Pointer_t mpBookmarkHelper;
+
+ /// pointer to the helper for fields
+ FieldHelper::Pointer_t mpFieldHelper;
+
+ /// pointer to the helper for shapes
+ ShapeHelper::Pointer_t mpShapeHelper;
+
+ /// pointer to the helper for breaks
+ BreakHelper::Pointer_t mpBreakHelper;
+
+
+ /// cache for the Cp where main text flow end
+ CpAndFc mDocumentEndCpAndFc;
+
+ /// cache for the Cp where footnotes section ends
+ CpAndFc mFootnoteEndCpAndFc;
+
+ /// cache for the Cp where header section ends
+ CpAndFc mHeaderEndCpAndFc;
+
+ /// cache for the Cp where annotation section ends
+ CpAndFc mAnnotationEndCpAndFc;
+
+ /// cache for the Cp where endnote section ends
+ CpAndFc mEndnoteEndCpAndFc;
+
+ /// cache for the Cp where textbox section ends
+ CpAndFc mTextboxEndCpAndFc;
+
+ /// cache for the Cp where textbox in header section ends
+ CpAndFc mTextboxHeaderEndCpAndFc;
+
+ /// DffBlock of document
+ DffBlock::Pointer_t mpDffBlock;
+
+ /// Textbox stories
+ PLCF<WW8FTXBXS>::Pointer_t mpTextBoxStories;
+
+ bool mbInSection;
+ bool mbInParagraphGroup;
+ bool mbInCharacterGroup;
+
+ bool isSpecial(sal_uInt32 nChar);
+
+ WW8Stream::Pointer_t getSubStream(const ::rtl::OUString & sId) const;
+
+ /**
+ Parse bin table and create CpAndFcs for all points in the
+ document where properties of the given type change.
+
+ @param rTable bin table to parse
+ @param eType_ type of CpAndFcs to create
+ */
+ void parseBinTableCpAndFcs(WW8BinTable & rTable, PropertyType eType_);
+
+ void startCharacterGroup(Stream & rStream);
+ void endCharacterGroup(Stream & rStream);
+ void startParagraphGroup(Stream & rStream);
+ void endParagraphGroup(Stream & rStream);
+ void startSectionGroup(Stream & rStream);
+ void endSectionGroup(Stream & rStream);
+ void text(Stream & rStream, const sal_uInt8 * data, size_t len);
+ void utext(Stream & rStream, const sal_uInt8 * data, size_t len);
+
+public:
+ WW8DocumentImpl(WW8Stream::Pointer_t rpStream);
+ WW8DocumentImpl(const WW8DocumentImpl & rSrc,
+ const CpAndFc & rStart, const CpAndFc & rEnd);
+ virtual ~WW8DocumentImpl();
+
+ virtual WW8DocumentImpl & Assign(const WW8DocumentImpl & rSrc);
+
+ virtual string getType() const;
+
+ virtual WW8Document::Pointer_t getSubDocument(SubDocumentId nId);
+ virtual WW8DocumentIterator::Pointer_t getIterator
+ (const CpAndFc & rCpAndFc);
+ virtual WW8DocumentIterator::Pointer_t begin();
+ virtual WW8DocumentIterator::Pointer_t end();
+
+ virtual WW8Stream::Sequence getText(const CpAndFc & rStart);
+
+ WW8Fib::Pointer_t getFib() const;
+
+ /**
+ Returns the document stream.
+ */
+
+ WW8Stream::Pointer_t getDocStream() const;
+
+ /**
+ Returns the data stream.
+ */
+ WW8Stream::Pointer_t getDataStream() const;
+
+ /**
+ Returns distance in bytes to next CpAndFc.
+
+ @param rCpAndFc CpAndFc to start at
+ */
+ sal_uInt32 getByteLength(const CpAndFc & rCpAndFc) const;
+
+ /**
+ Returns first character position in document.
+ */
+ const CpAndFc & getFirstCp() const;
+
+ /**
+ Returns last character position in document.
+ */
+ const CpAndFc & getLastCp() const;
+
+ /**
+ Returns next character position with change in properties.
+
+ @param rCpAndFc position to start at
+ */
+ CpAndFc getNextCp(const CpAndFc & rCpAndFc) const;
+
+ /**
+ Returns previous character position with change in properties.
+
+ @param rCpAndFc position to start at
+ */
+ CpAndFc getPrevCp(const CpAndFc & rCpAndFc) const;
+
+ /**
+ Returns character position where main text flow ends.
+ */
+ CpAndFc getDocumentEndCp() const;
+
+ /**
+ Returns character position where footnotes end.
+ */
+ CpAndFc getFootnodeEndCp() const;
+
+ /**
+ Returns character position where headers end.
+ */
+ CpAndFc getHeaderEndCp() const;
+
+ /**
+ Returns character position where annatations end.
+ */
+ CpAndFc getAnnotationEndCp() const;
+
+ /**
+ Returns character position where endnotes end.
+ */
+ CpAndFc getEndnoteEndCp() const;
+
+ /**
+ Returns character position where textboxes end.
+ */
+ CpAndFc getTextboxEndCp() const;
+
+ /**
+ Returns character positoion where textboxes in headers end.
+ */
+ CpAndFc getTextboxHeaderEndCp() const;
+
+ /**
+ Insert CpAndFc to set of CpAndFcs.
+
+ @param rCpAndFc CpAndFc to insert
+ */
+ void insertCpAndFc(const CpAndFc & rCpAndFc);
+
+ /**
+ Return FKP for certain CpAndFc.
+
+ @param rCpAndFc CpAndFc for which the FKP is looked for
+ */
+ WW8FKP::Pointer_t getFKP(const CpAndFc & rCpAndFc);
+
+ /**
+ Return FKP containing character properties.
+
+ @param nIndex index of FKP to return
+ @param bComplex true if FKP contains complex FCs
+ */
+ WW8FKP::Pointer_t getFKPCHPX(sal_uInt32 nIndex, bool bComplex);
+
+ /**
+ Return FKP containing paragraph properties.
+
+ @param nIndex index of FKP to return
+ @param bComplex true if FKP contains complex FCs
+ */
+ WW8FKP::Pointer_t getFKPPAPX(sal_uInt32 nIndex, bool bComplex);
+
+ /**
+ Return property set valid at a certain CpAndFc.
+
+ @param rCpAndFc CpAndFc to look at
+ */
+ writerfilter::Reference<Properties>::Pointer_t
+ getProperties(const CpAndFc & rCpAndFc);
+
+ /**
+ Return subdocument referenced at a certain point in document.
+
+ @param rCpAndFc CpAndFc where subdocument is referenced
+ */
+ writerfilter::Reference<Stream>::Pointer_t
+ getSubDocument(const CpAndFc & rCpAndFc);
+
+ /**
+ Return section description at a certain CpAndFc.
+
+ @param rCpAndFc CpAndFc to look at
+ */
+ WW8SED * getSED(const CpAndFc & rCpAndFc) const;
+
+ /**
+ Return reference to list table.
+ */
+ writerfilter::Reference<Table>::Pointer_t getListTable() const;
+
+ /**
+ Return reference to table of list level overrides.
+ */
+ writerfilter::Reference<Table>::Pointer_t getLFOTable() const;
+
+ /**
+ Return reference to font table.
+ */
+ writerfilter::Reference<Table>::Pointer_t getFontTable() const;
+
+ /**
+ Return reference to style sheet.
+ */
+ writerfilter::Reference<Table>::Pointer_t getStyleSheet() const;
+
+ /**
+ Return count of headers/footers.
+ */
+ sal_uInt32 getHeaderCount() const;
+
+ /**
+ Return CpAndFc for a header or footer.
+
+ @param nPos index in the list of headers and footers
+ */
+ CpAndFc getHeaderCpAndFc(sal_uInt32 nPos);
+
+ /**
+ Return subdocument for header/footer.
+
+ @param nPos index in the list of headers and footers
+ */
+ writerfilter::Reference<Stream>::Pointer_t getHeader(sal_uInt32 nPos);
+
+ /**
+ Return count of footnotes.
+ */
+ sal_uInt32 getFootnoteCount() const;
+
+ /**
+ Return subdocument for footnote.
+
+ @param nPos index of the footnote
+ */
+ writerfilter::Reference<Stream>::Pointer_t getFootnote(sal_uInt32 nPos);
+
+ /**
+ Return subdocument for footnote at a certain position in document.
+
+ @param rCpAndFc position in document
+ */
+ writerfilter::Reference<Stream>::Pointer_t getFootnote
+ (const CpAndFc & rCpAndFc);
+
+ /**
+ Return count of endnotes.
+ */
+ sal_uInt32 getEndnoteCount() const;
+
+ /**
+ Return subdocument for an endnote.
+
+ @param nPos index of the endnote
+ */
+ writerfilter::Reference<Stream>::Pointer_t getEndnote(sal_uInt32 nPos);
+
+ /**
+ Return subdocument for an endnote.
+
+ @param rCpAndFc CpAndFc where endnote is referenced
+ */
+ writerfilter::Reference<Stream>::Pointer_t getEndnote
+ (const CpAndFc & rCpAndFc);
+
+ /**
+ Return count of annotations.
+ */
+ sal_uInt32 getAnnotationCount() const;
+
+ /**
+ Return subdocument for an annotation.
+
+ @param nPos index of the annotation
+ */
+ writerfilter::Reference<Stream>::Pointer_t getAnnotation(sal_uInt32 nPos);
+
+ /**
+ Return subdocument for an annotation.
+
+ @param rCpAndFc CpAndFc where annotation is referenced
+ */
+ writerfilter::Reference<Stream>::Pointer_t getAnnotation
+ (const CpAndFc & rCpAndFc);
+
+ /**
+ Return bookmark.
+
+ @param rCpAndFc CpAndFc where bookmark begins or ends
+ */
+ writerfilter::Reference<Properties>::Pointer_t
+ getBookmark(const CpAndFc & rCpAndFc) const;
+
+ /**
+ Return shape.
+
+ @param rCpAndFc CpAndFc of the shape
+ */
+ writerfilter::Reference<Properties>::Pointer_t
+ getShape(const CpAndFc & rCpAndFc) const;
+
+ writerfilter::Reference<Properties>::Pointer_t
+ getShape(sal_uInt32 nSpid);
+
+ /**
+ Return blip.
+
+ @param nBlib number of the blip to return
+ */
+ writerfilter::Reference<Properties>::Pointer_t
+ getBlip(sal_uInt32 nBlib);
+
+ /**
+ Return break descriptor.
+
+ @param rCpAndFc CpAndFc of the break
+ */
+ writerfilter::Reference<Properties>::Pointer_t
+ getBreak(const CpAndFc & rCpAndFc) const;
+
+
+ /**
+ Return field.
+
+ @param rCpAndFc CpAndFc of the field
+ */
+ writerfilter::Reference<Properties>::Pointer_t
+ getField(const CpAndFc & rCpAndFc) const;
+
+ /**
+ Return current field descriptor.
+ */
+ WW8FLD::Pointer_t getCurrentFLD() const;
+
+ /**
+ Return stream of text box.
+
+ @param nShpId shape id of text box
+ */
+ writerfilter::Reference<Stream>::Pointer_t
+ getTextboxText(sal_uInt32 nShpId) const;
+
+ /**
+ Return file character position according to a character
+ position.
+
+ @param cp the character position
+ */
+ Fc cp2fc(const Cp & cp) const;
+
+ /**
+ Return the character position according to file character
+ position.
+
+ @param fc the file character position
+ */
+ Cp fc2cp(const Fc & fc) const;
+
+ /**
+ Return CpAndFc related to character position.
+
+ @param cp the character position
+ */
+ CpAndFc getCpAndFc(const Cp & cp, PropertyType type = PROP_DOC) const;
+
+ /**
+ Return CpAndFc related to file character position.
+
+ @param fc the file character position
+ */
+ CpAndFc getCpAndFc(const Fc & fc, PropertyType type = PROP_DOC) const;
+
+ sal_uInt32 getPicLocation() const;
+ void setPicLocation(sal_uInt32 fcPicLoc);
+
+ bool isPicData();
+ void setPicIsData(bool bPicIsData);
+
+ /**
+ Create events for the document.
+
+ @param rHandler handler to send the events to
+ */
+ void resolve(Stream & rHandler);
+
+ /**
+ Resolve text.
+
+ The text of the given iterator is split at special
+ characters. Each run of non-special characters is send as one
+ event. Each run of special characters is send as one event.
+
+ @param pIt iterator whose text is to be resolved
+ @param rStream handler for the events
+ */
+ void resolveText(WW8DocumentIterator::Pointer_t pIt, Stream & rStream);
+
+ /**
+ Resolve the picture at mfcPicLoc.
+
+ @param rStream
+ */
+ void resolvePicture(Stream & rStream);
+
+ /**
+ Resolve special char.
+
+ @param nChar the special char
+ @param rStream the stream handler to resolve the special char to
+ */
+ void resolveSpecialChar(sal_uInt32 nChar, Stream & rStream);
+};
+
+/**
+ Implentation class for an iterator in a document.
+ */
+class WW8DocumentIteratorImpl : public WW8DocumentIterator
+{
+ /// pointer to the document
+ WW8DocumentImpl * mpDocument;
+
+ /// CpAndFc the iterator is pointing to
+ CpAndFc mCpAndFc;
+
+public:
+ WW8DocumentIteratorImpl(WW8DocumentImpl * pDocument,
+ const CpAndFc & rCpAndFc)
+ : mpDocument(pDocument), mCpAndFc(rCpAndFc)
+ {
+ }
+
+ virtual ~WW8DocumentIteratorImpl();
+
+ /**
+ Increase the iterator to the next character position.
+ */
+ WW8DocumentIterator & operator++();
+
+ /**
+ Decrease the iterator to the previous character position.
+ */
+ WW8DocumentIterator & operator--();
+
+ virtual writerfilter::Reference<Properties>::Pointer_t getProperties()
+ const;
+ //void setAttributes(const IAttributeSet & aAttributeSet);
+
+ virtual writerfilter::Reference<Stream>::Pointer_t getSubDocument() const;
+
+ /** Return if the text the iterator points to is complex.
+
+ @attention The definition of a complex run of text in Word is
+ counter-intuitive: Complex runs use 8-bit encoding for characters,
+ non-complex ones use 16 bits.
+ */
+ bool isComplex() const;
+ virtual PropertyType getPropertyType() const;
+
+ virtual WW8Stream::Sequence getText();
+ virtual bool equal(const WW8DocumentIterator & rIt) const;
+
+ virtual string toString() const;
+ virtual void dump(ostream & o) const;
+
+ /**
+ Return pointer to the shape at character position the iterator
+ is pointing to.
+ */
+ virtual writerfilter::Reference<Properties>::Pointer_t getShape() const;
+
+ /**
+ Return pointer to section description at character position the
+ iterator points to.
+ */
+ WW8SED * getSED() const;
+};
+
+/**
+ Return string for property type.
+ */
+string propertyTypeToString(PropertyType nType);
+
+}}
+#endif // INCLUDED_WW8_DOCUMENT_IMPL_HXX
diff --git a/writerfilter/source/doctok/WW8FKP.hxx b/writerfilter/source/doctok/WW8FKP.hxx
new file mode 100644
index 000000000000..af0af1b8e303
--- /dev/null
+++ b/writerfilter/source/doctok/WW8FKP.hxx
@@ -0,0 +1,133 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_FKP_HXX
+#define INCLUDED_WW8_FKP_HXX
+
+#ifndef INCLUDES_WW8_CP_AND_FC_HXX
+#include <WW8CpAndFc.hxx>
+#endif
+#ifndef INCLUDE_WW8_STRUCT_BASE_HXX
+#include <WW8StructBase.hxx>
+#endif
+
+namespace writerfilter {
+namespace doctok
+{
+
+/**
+ A formated diskpage (FKP).
+
+ Formatted diskpages are used by Word to store runs of SPRMs (single
+ property modifier). A FKP contains a list of file character
+ positions (FC). For each FC there is an entry containing the run of
+ SPRMs stored for that FC.
+ */
+class WW8FKP : public WW8StructBase
+{
+public:
+ /**
+ Shared pointer to an FKP.
+ */
+ typedef boost::shared_ptr<WW8FKP> Pointer_t;
+
+ /**
+ Create FKP from stream.
+
+ @param rStream stream to create FKP from
+ @param nOffset offset in stream where the FKP starts.
+ */
+ WW8FKP(WW8Stream & rStream, sal_uInt32 nOffset)
+ : WW8StructBase(rStream, nOffset, 512)
+ {
+ }
+
+ /**
+ Return count of entries.
+ */
+ virtual sal_uInt32 getEntryCount() const = 0;
+
+ /**
+ Return an FC.
+
+ @param nIndex index of the FC to return
+ */
+ virtual Fc getFc(sal_uInt32 nIndex) const = 0;
+
+ /**
+ Returns the first FC of the FKP.
+ */
+ virtual Fc getFirstFc() const = 0;
+
+ /**
+ Returns the last FC of the FKP.
+ */
+ virtual Fc getLastFc() const = 0;
+
+ /**
+ Check if an FKP contains an FC.
+
+ @param rFc FC to look for
+
+ @retval true FKP contains FC
+ @retval false else
+ */
+ virtual bool contains(const Fc & rFc) const = 0;
+
+ /**
+ Return properties stored in an FKP for a FC.
+
+ @param rFc FC to look for
+ */
+ virtual writerfilter::Reference<Properties>::Pointer_t
+ getProperties(const Fc & rFc)
+ const = 0;
+};
+
+/**
+ Cache providing FKPs.
+ */
+class WW8FKPCache
+{
+public:
+ /**
+ Shared pointer to cache.
+ */
+ typedef boost::shared_ptr<WW8FKPCache> Pointer_t;
+
+ virtual ~WW8FKPCache();
+
+ /**
+ Return FKP.
+
+ @param nPageNumber number of page to return
+ */
+ virtual WW8FKP::Pointer_t get(sal_uInt32 nPageNumber, bool bComplex) = 0;
+};
+}}
+
+#endif // INCLUDED_WW8_FKP_HXX
diff --git a/writerfilter/source/doctok/WW8FKPImpl.cxx b/writerfilter/source/doctok/WW8FKPImpl.cxx
new file mode 100644
index 000000000000..354159bced0c
--- /dev/null
+++ b/writerfilter/source/doctok/WW8FKPImpl.cxx
@@ -0,0 +1,240 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "WW8FKPImpl.hxx"
+#include "WW8PropertySetImpl.hxx"
+
+namespace writerfilter {
+namespace doctok
+{
+#if 0
+sal_uInt32 WW8FKPImpl::getIndex(const Fc & rFc) const
+{
+ sal_uInt32 nLeft = 0;
+ sal_uInt32 nRight = getEntryCount();
+
+ while (nRight - nLeft > 1)
+ {
+ sal_uInt32 nMiddle = (nLeft + nRight) / 2;
+ Fc aFcMiddle = getFc(nMiddle);
+
+ if (! (rFc < aFcMiddle))
+ {
+ nLeft = nMiddle;
+ }
+ else
+ {
+ nRight = nMiddle;
+ }
+ }
+
+ return nLeft;
+}
+#else
+sal_uInt32 WW8FKPImpl::getIndex(const Fc & rFc) const
+{
+ sal_uInt32 nResult = getEntryCount();
+
+ while (rFc < getFc(nResult))
+ nResult--;
+
+ return nResult;
+}
+#endif
+
+
+writerfilter::Reference<Properties>::Pointer_t WW8CHPFKPImpl::getProperties(const Fc & rFc) const
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ sal_uInt32 n = getIndex(rFc);
+
+ sal_uInt16 nOffset = 2 * getU8(getRgb() + n);
+
+ if (nOffset > getRgb() + getEntryCount())
+ {
+ sal_uInt16 nCbChpx = getU8(nOffset);
+
+ if (nCbChpx > 1 && nOffset + nCbChpx + 1 <= 511)
+ {
+ pResult = writerfilter::Reference<Properties>::Pointer_t
+ (new WW8PropertySetImpl(*this, nOffset + 1, nCbChpx));
+ }
+ }
+#if 0
+ else
+ {
+ clog << "outsider!!!" << endl;
+ }
+#endif
+
+ return pResult;
+}
+
+void WW8CHPFKPImpl::dump(OutputWithDepth<string> & o) const
+{
+ o.addItem("<fkp type='CHP'>");
+
+ sal_uInt32 nCount = getEntryCount();
+ for (sal_uInt32 n = 0; n < nCount; ++n)
+ {
+ char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer),
+ "<fkpentry fc='%" SAL_PRIxUINT32 "' offsetInFkp='%x'/>",
+ getFc(n).get(), 2 * getU8(getRgb() + n));
+
+ o.addItem(sBuffer);
+ }
+
+ WW8StructBase::dump(o);
+ o.addItem("</fkp>");
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8PAPFKPImpl::getProperties(const Fc & rFc) const
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ sal_uInt32 n = getIndex(rFc);
+
+ sal_uInt16 nOffset = 2 * getU8(getRgb() + n * 13);
+
+ if (nOffset != 0)
+ {
+ if (nOffset > getRgb() + getEntryCount() * 13)
+ {
+ sal_uInt32 nOffsetIStd = nOffset + 1;
+ sal_uInt16 nCbPapx = getU8(nOffset) * 2;
+
+ if (nCbPapx == 0)
+ {
+ nOffsetIStd = nOffset + 2;
+ nCbPapx = getU8(nOffset + 1) * 2 + 2;
+ }
+
+ sal_uInt32 nOffsetEnd = nOffset + nCbPapx;
+ //sal_uInt32 nOffsetSprms = nOffsetIStd + 2;
+
+ if (nCbPapx > 1 && nOffset + nCbPapx <= 511)
+ {
+ pResult = writerfilter::Reference<Properties>::Pointer_t
+ (new WW8PropertySetImpl(*this, nOffsetIStd,
+ nOffsetEnd - nOffsetIStd,
+ true));
+ }
+ }
+#if 0
+ else
+ {
+ clog << "outsider!!!" << endl;
+ }
+#endif
+ }
+
+ return pResult;
+}
+
+void WW8PAPFKPImpl::dump(OutputWithDepth<string> & o) const
+{
+ o.addItem("<fkp type='PAP'>");
+
+ sal_uInt32 nCount = getEntryCount();
+ for (sal_uInt32 n = 0; n < nCount; ++n)
+ {
+ char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer),
+ "<fkpentry fc='%" SAL_PRIxUINT32 "' offsetInFKP='%x'/>",
+ getFc(n).get(), 2 * getU8(getRgb() + n * 13));
+
+ o.addItem(sBuffer);
+ }
+
+ WW8StructBase::dump(o);
+
+ o.addItem("</fkp>");
+}
+
+bool operator < (const PageNumberAndFKP & rA,
+ const PageNumberAndFKP & rB)
+{
+ return rA.mnPageNumber < rB.mnPageNumber;
+}
+
+WW8FKPCache::~WW8FKPCache()
+{
+}
+
+WW8FKP::Pointer_t WW8FKPCacheImpl::get(sal_uInt32 nPageNumber,
+ bool bComplex)
+{
+ WW8FKP::Pointer_t pResult;
+
+ PageNumbersAndFKPs::iterator aIt;
+ aIt = mPageNumbersAndFKPs.find
+ (PageNumberAndFKP(nPageNumber, WW8FKP::Pointer_t()));
+
+ if (aIt != mPageNumbersAndFKPs.end())
+ pResult = aIt->getFKP();
+ else
+ {
+ if (mPageNumbersAndFKPs.size() > mnCacheSize)
+ {
+ PageNumbersAndFKPs::iterator aItDel =
+ mPageNumbersAndFKPs.find
+ (PageNumberAndFKP(mPageNumbers.front(),
+ WW8FKP::Pointer_t()));
+
+ mPageNumbersAndFKPs.erase(aItDel);
+ mPageNumbers.pop_front();
+ }
+
+ pResult = createFKP(nPageNumber, bComplex);
+
+ PageNumberAndFKP aPageNumberAndFKP(nPageNumber, pResult);
+ mPageNumbersAndFKPs.insert(aPageNumberAndFKP);
+ mPageNumbers.push_back(nPageNumber);
+ }
+
+ return pResult;
+}
+
+WW8FKP::Pointer_t WW8CHPFKPCacheImpl::createFKP(sal_uInt32 nPageNumber,
+ bool bComplex)
+{
+ return WW8FKP::Pointer_t(new WW8CHPFKPImpl
+ (*mpStream, nPageNumber, bComplex));
+}
+
+WW8FKP::Pointer_t WW8PAPFKPCacheImpl::createFKP(sal_uInt32 nPageNumber,
+ bool bComplex)
+{
+ return WW8FKP::Pointer_t(new WW8PAPFKPImpl
+ (*mpStream, nPageNumber, bComplex));
+}
+}}
diff --git a/writerfilter/source/doctok/WW8FKPImpl.hxx b/writerfilter/source/doctok/WW8FKPImpl.hxx
new file mode 100644
index 000000000000..a7e59a33b1b2
--- /dev/null
+++ b/writerfilter/source/doctok/WW8FKPImpl.hxx
@@ -0,0 +1,214 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_FKP_IMPL_HXX
+#define INCLUDED_WW8_FKP_IMPL_HXX
+
+#include <set>
+#include <deque>
+#include <WW8FKP.hxx>
+
+#ifndef INCLUDED_OUTPUT_WITH_DEPTH_HXX
+#include <resourcemodel/OutputWithDepth.hxx>
+#endif
+
+namespace writerfilter {
+namespace doctok
+{
+/**
+ Implementation class for formatted disk pages.
+ */
+class WW8FKPImpl : public WW8FKP
+{
+ sal_uInt32 mnPageNumber;
+ bool mbComplex;
+
+public:
+ WW8FKPImpl(WW8Stream & rStream, sal_uInt32 nPageNumber, bool bComplex)
+ : WW8FKP(rStream, nPageNumber * 512), mnPageNumber(nPageNumber),
+ mbComplex(bComplex)
+ {
+ }
+
+ virtual sal_uInt32 getPageNumber() const { return mnPageNumber; }
+
+ virtual sal_uInt32 getEntryCount() const { return getU8(511); }
+ virtual sal_uInt32 getRgb() const { return 4 * (getEntryCount() + 1); }
+ virtual Fc getFc(sal_uInt32 nIndex) const
+ { return Fc(getU32(nIndex * 4), mbComplex); }
+ virtual Fc getFirstFc() const { return getFc(0); }
+ virtual Fc getLastFc() const { return getFc(getEntryCount()); }
+
+ virtual bool contains(const Fc & rFc) const
+ { return getFirstFc() <= rFc && rFc < getLastFc(); }
+
+ virtual sal_uInt32 getIndex(const Fc & rFc) const;
+
+ friend bool operator < (const WW8FKPImpl & rA,
+ const WW8FKPImpl & rB);
+};
+
+/**
+ Implementation class for formatted disk pages containing character
+ properties.
+ */
+class WW8CHPFKPImpl : public WW8FKPImpl
+{
+public:
+ WW8CHPFKPImpl(WW8Stream & rStream, sal_uInt32 nPageNumber,
+ bool bComplex)
+ : WW8FKPImpl(rStream, nPageNumber, bComplex)
+ {
+ }
+
+ virtual writerfilter::Reference<Properties>::Pointer_t
+ getProperties(const Fc & rFc) const;
+
+ virtual void dump(OutputWithDepth<string> & o) const;
+};
+
+/**
+ Implementation class for formatted disk pages containing paragraph
+ properties.
+ */
+class WW8PAPFKPImpl : public WW8FKPImpl
+{
+public:
+ WW8PAPFKPImpl(WW8Stream & rStream, sal_uInt32 nPageNumber,
+ bool bComplex)
+ : WW8FKPImpl(rStream, nPageNumber, bComplex)
+ {
+ }
+
+ virtual writerfilter::Reference<Properties>::Pointer_t
+ getProperties(const Fc & rFc) const;
+
+ virtual void dump(OutputWithDepth<string> & o) const;
+};
+
+/**
+ Tuple of page number and formattet disk page.
+ */
+class PageNumberAndFKP
+{
+ /// page number
+ sal_uInt32 mnPageNumber;
+
+ /// pointer to formatted disk page
+ WW8FKP::Pointer_t mpFKP;
+
+public:
+ PageNumberAndFKP(sal_uInt32 nPageNumber, WW8FKP::Pointer_t pFKP)
+ : mnPageNumber(nPageNumber), mpFKP(pFKP)
+ {
+ }
+
+ /**
+ Return page number.
+ */
+ sal_uInt32 getPageNumber() const { return mnPageNumber; }
+
+ /**
+ Return formatted disk page.
+ */
+ const WW8FKP::Pointer_t getFKP() const { return mpFKP; }
+
+ friend bool operator < (const PageNumberAndFKP & rA,
+ const PageNumberAndFKP & rB);
+};
+
+/**
+ Cache for formatted disk pages.
+ */
+class WW8FKPCacheImpl : public WW8FKPCache
+{
+ /// size of the cache
+ sal_uInt32 mnCacheSize;
+
+ /// set of tuples of page number and FKP
+ typedef set<PageNumberAndFKP> PageNumbersAndFKPs;
+
+ ///
+ typedef deque<sal_uInt32> PageNumbers;
+
+ PageNumbers mPageNumbers;
+ PageNumbersAndFKPs mPageNumbersAndFKPs;
+
+protected:
+ WW8Stream::Pointer_t mpStream;
+ virtual WW8FKP::Pointer_t createFKP(sal_uInt32 nPageNumber,
+ bool bComplex) = 0;
+
+public:
+ WW8FKPCacheImpl(WW8Stream::Pointer_t rpStream, sal_uInt32 nCacheSize)
+ : mnCacheSize(nCacheSize), mpStream(rpStream)
+ {
+ }
+
+ virtual ~WW8FKPCacheImpl()
+ {
+ }
+
+ WW8FKP::Pointer_t get(sal_uInt32 nPageNumber, bool bComplex);
+};
+
+class WW8CHPFKPCacheImpl : public WW8FKPCacheImpl
+{
+ virtual WW8FKP::Pointer_t createFKP(sal_uInt32 nPageNumber,
+ bool bComplex);
+
+public:
+ WW8CHPFKPCacheImpl(WW8Stream::Pointer_t rpStream,
+ sal_uInt32 nCacheSize)
+ : WW8FKPCacheImpl(rpStream, nCacheSize)
+ {
+ }
+
+ virtual ~WW8CHPFKPCacheImpl()
+ {
+ }
+};
+
+class WW8PAPFKPCacheImpl : public WW8FKPCacheImpl
+{
+ virtual WW8FKP::Pointer_t createFKP(sal_uInt32 nPageNumber,
+ bool bComplex);
+
+public:
+ WW8PAPFKPCacheImpl(WW8Stream::Pointer_t rpStream,
+ sal_uInt32 nCacheSize)
+ : WW8FKPCacheImpl(rpStream, nCacheSize)
+ {
+ }
+
+ virtual ~WW8PAPFKPCacheImpl()
+ {
+ }
+};
+}}
+
+#endif // INCLUDED_WW8_FKP_IMPL_HXX
diff --git a/writerfilter/source/doctok/WW8FontTable.cxx b/writerfilter/source/doctok/WW8FontTable.cxx
new file mode 100644
index 000000000000..f29d2ea4a343
--- /dev/null
+++ b/writerfilter/source/doctok/WW8FontTable.cxx
@@ -0,0 +1,118 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <resources.hxx>
+
+namespace writerfilter {
+namespace doctok {
+
+void WW8FontTable::initPayload()
+{
+ sal_uInt32 nCount = getU8(0);
+
+ sal_uInt32 nOffset = 1;
+
+ while (nCount > 0)
+ {
+ entryOffsets.push_back(nOffset);
+
+ sal_uInt32 nFFNSize = getU8(nOffset) + 1;
+
+ if (nFFNSize > 1)
+ nCount--;
+
+ nOffset += nFFNSize;
+ }
+
+ entryOffsets.push_back(nOffset);
+ mnPlcfPayloadOffset = nOffset;
+}
+
+sal_uInt32 WW8FontTable::calcPayloadOffset()
+{
+ return 0;
+}
+
+sal_uInt32 WW8FontTable::getEntryCount()
+{
+ return entryOffsets.size() - 1;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8FontTable::getEntry(sal_uInt32 nIndex)
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ sal_uInt32 nCount = entryOffsets[nIndex + 1] - entryOffsets[nIndex];
+
+ if (nCount > 1)
+ {
+ WW8Font * pFont = new WW8Font(this,
+ entryOffsets[nIndex], nCount);
+
+ pFont->setIndex(nIndex);
+
+ pResult = writerfilter::Reference<Properties>::Pointer_t(pFont);
+ }
+
+ return pResult;
+}
+
+sal_uInt32 WW8Font::get_f()
+{
+ return mnIndex;
+}
+
+rtl::OUString WW8Font::get_xszFfn()
+{
+ sal_uInt32 nOffset = 0x28;
+ sal_uInt32 nCount = get_cbFfnM1() - nOffset;
+
+ Sequence aSeq(mSequence, nOffset, nCount);
+
+ rtl_uString * pNew = 0;
+ rtl_uString_newFromStr
+ (&pNew, reinterpret_cast<const sal_Unicode *>(&aSeq[0]));
+
+ return rtl::OUString(pNew);
+}
+
+rtl::OUString WW8Font::get_altName()
+{
+ sal_uInt32 nOffset = 0x28 + get_ixchSzAlt();
+ sal_uInt32 nCount = get_cbFfnM1() - nOffset;
+
+ Sequence aSeq(mSequence, nOffset, nCount);
+
+ rtl_uString * pNew = 0;
+ rtl_uString_newFromStr
+ (&pNew, reinterpret_cast<const sal_Unicode *>(&aSeq[0]));
+
+ return rtl::OUString(pNew);
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8LFOLevel.cxx b/writerfilter/source/doctok/WW8LFOLevel.cxx
new file mode 100644
index 000000000000..b0a1d8c2c59d
--- /dev/null
+++ b/writerfilter/source/doctok/WW8LFOLevel.cxx
@@ -0,0 +1,45 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "resources.hxx"
+
+sal_uInt32 doctok::WW8LFOLevel::calcSize()
+{
+ sal_uInt32 nResult = doctok::WW8LFOLevel::getSize();
+
+ if (get_fFormatting())
+ {
+ doctok::WW8ListLevel aLevel(parent, mnOffsetInParent + nResult)
+ nResult += aLevel.calcSize();
+
+ sal_uInt32 nXstSize = parent->getU16(nOffset);
+
+ nResult += (nXstSize + 1) * 2;
+ }
+
+ return nResult;
+}
diff --git a/writerfilter/source/doctok/WW8LFOTable.cxx b/writerfilter/source/doctok/WW8LFOTable.cxx
new file mode 100644
index 000000000000..e0bf6d793d64
--- /dev/null
+++ b/writerfilter/source/doctok/WW8LFOTable.cxx
@@ -0,0 +1,129 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "resources.hxx"
+
+namespace writerfilter {
+namespace doctok {
+
+void WW8LFOTable::initPayload()
+{
+ sal_uInt32 nCount = getEntryCount();
+
+ sal_uInt32 nOffset = 4;
+ sal_uInt32 nOffsetLevel = mnPlcfPayloadOffset;
+
+ for (sal_uInt32 n = 0; n < nCount; ++n)
+ {
+ WW8LFO aLFO(this, nOffset);
+
+ entryOffsets.push_back(nOffset);
+ payloadIndices.push_back(payloadOffsets.size());
+ nOffset += WW8LFO::getSize();
+
+ sal_uInt32 nLvlCount = aLFO.get_lfolevel_count();
+
+ for (sal_uInt32 i = 0; i < nLvlCount; ++i)
+ {
+ WW8LFOLevel aLevel(this, nOffsetLevel);
+
+ payloadOffsets.push_back(nOffsetLevel);
+
+ nOffsetLevel += aLevel.calcSize();
+ }
+ }
+
+ entryOffsets.push_back(nOffset);
+ payloadOffsets.push_back(nOffsetLevel);
+}
+
+sal_uInt32 WW8LFOTable::calcPayloadOffset()
+{
+ sal_uInt32 nResult = 4 + getEntryCount() * WW8LFO::getSize();
+
+ while (getU32(nResult) == 0xffffffff)
+ nResult += 4;
+
+ return nResult;
+}
+
+sal_uInt32 WW8LFOTable::getEntryCount()
+{
+ return getU32(0);
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8LFOTable::getEntry(sal_uInt32 nIndex)
+{
+ WW8LFO * pLFO = new WW8LFO(this, entryOffsets[nIndex]);
+
+ pLFO->setIndex(nIndex);
+
+ return writerfilter::Reference<Properties>::Pointer_t(pLFO);
+}
+
+sal_uInt32 WW8LFO::get_lfolevel_count()
+{
+ return get_clfolvl();
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8LFO::get_lfolevel(sal_uInt32 nIndex)
+{
+ WW8LFOTable * pLFOTable = dynamic_cast<WW8LFOTable *>(mpParent);
+ sal_uInt32 nPayloadIndex = pLFOTable->getPayloadIndex(mnIndex) + nIndex;
+ sal_uInt32 nPayloadOffset = pLFOTable->getPayloadOffset(nPayloadIndex);
+ sal_uInt32 nPayloadSize = pLFOTable->getPayloadSize(nPayloadIndex);
+
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8LFOLevel(mpParent, nPayloadOffset, nPayloadSize));
+}
+
+void WW8LFOLevel::resolveNoAuto(Properties & /*rHandler*/)
+{
+
+}
+
+sal_uInt32 WW8LFOLevel::calcSize()
+{
+ sal_uInt32 nResult = WW8LFOLevel::getSize();
+
+ if (get_fFormatting())
+ {
+ WW8ListLevel aLevel(mpParent, mnOffsetInParent + nResult);
+
+ nResult += aLevel.calcSize();
+
+ sal_uInt32 nXstSize = mpParent->getU16(mnOffsetInParent + nResult);
+
+ nResult += (nXstSize + 1) * 2;
+ }
+
+ return nResult;
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8ListTable.cxx b/writerfilter/source/doctok/WW8ListTable.cxx
new file mode 100644
index 000000000000..4e2e476f08e2
--- /dev/null
+++ b/writerfilter/source/doctok/WW8ListTable.cxx
@@ -0,0 +1,153 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <resources.hxx>
+
+namespace writerfilter {
+namespace doctok {
+
+void WW8ListTable::initPayload()
+{
+ sal_uInt32 nCount = getEntryCount();
+
+ sal_uInt32 nOffset = 2;
+ sal_uInt32 nOffsetLevel = mnPlcfPayloadOffset;
+ for (sal_uInt32 n = 0; n < nCount; ++n)
+ {
+ WW8List aList(this, nOffset);
+
+ entryOffsets.push_back(nOffset);
+ payloadIndices.push_back(payloadOffsets.size());
+ nOffset += WW8List::getSize();
+
+ sal_uInt32 nLvlCount = aList.get_fSimpleList() ? 1 : 9;
+
+ for (sal_uInt32 i = 0; i < nLvlCount; ++i)
+ {
+ WW8ListLevel aLevel(this, nOffsetLevel);
+
+ payloadOffsets.push_back(nOffsetLevel);
+
+ nOffsetLevel += aLevel.calcSize();
+
+ sal_uInt32 nXstSize = getU16(nOffsetLevel);
+
+ nOffsetLevel += 2 + nXstSize * 2;
+ }
+
+ if (nOffsetLevel > getCount())
+ {
+ nOffsetLevel = getCount();
+
+ break;
+ }
+ }
+
+ payloadOffsets.push_back(nOffsetLevel);
+ entryOffsets.push_back(nOffset);
+}
+
+sal_uInt32 WW8ListTable::calcPayloadOffset()
+{
+ return 0;
+}
+
+sal_uInt32 WW8ListTable::getEntryCount()
+{
+ return getU16(0);
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8ListTable::getEntry(sal_uInt32 nIndex)
+{
+ WW8List * pList = new WW8List(this, entryOffsets[nIndex]);
+
+ pList->setIndex(nIndex);
+
+ return writerfilter::Reference<Properties>::Pointer_t
+ (pList);
+}
+
+sal_uInt32 WW8List::get_listlevel_count()
+{
+ if (get_fSimpleList())
+ return 1;
+
+ return 9;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8List::get_listlevel(sal_uInt32 nIndex)
+{
+ WW8ListTable * pListTable = dynamic_cast<WW8ListTable *>(mpParent);
+ sal_uInt32 nPayloadIndex = pListTable->getPayloadIndex(mnIndex) + nIndex;
+ sal_uInt32 nPayloadOffset = pListTable->getPayloadOffset(nPayloadIndex);
+ sal_uInt32 nPayloadSize = pListTable->getPayloadSize(nPayloadIndex);
+
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8ListLevel(mpParent, nPayloadOffset, nPayloadSize));
+}
+
+void WW8ListLevel::resolveNoAuto(Properties & rHandler)
+{
+ sal_uInt32 nOffset = getSize();
+
+ {
+ WW8PropertySet::Pointer_t pSet
+ (new WW8PropertySetImpl(*this, nOffset, get_cbGrpprlPapx()));
+
+ WW8PropertiesReference aRef(pSet);
+ aRef.resolve(rHandler);
+ }
+
+ nOffset += get_cbGrpprlPapx();
+
+ {
+ WW8PropertySet::Pointer_t pSet
+ (new WW8PropertySetImpl(*this, nOffset, get_cbGrpprlChpx()));
+
+ WW8PropertiesReference aRef(pSet);
+ aRef.resolve(rHandler);
+ }
+
+ nOffset += get_cbGrpprlChpx();
+
+ WW8StringValue aVal(getString(nOffset));
+
+ rHandler.attribute(0, aVal);
+}
+
+sal_uInt32 WW8ListLevel::calcSize()
+{
+ sal_uInt32 nResult = WW8ListLevel::getSize();
+
+ nResult += get_cbGrpprlPapx();
+ nResult += get_cbGrpprlChpx();
+
+ return nResult;
+}
+}}
diff --git a/writerfilter/source/doctok/WW8OutputWithDepth.cxx b/writerfilter/source/doctok/WW8OutputWithDepth.cxx
new file mode 100644
index 000000000000..c795ec11bb56
--- /dev/null
+++ b/writerfilter/source/doctok/WW8OutputWithDepth.cxx
@@ -0,0 +1,49 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <iostream>
+#include "WW8OutputWithDepth.hxx"
+
+namespace writerfilter {
+namespace doctok
+{
+
+using namespace ::std;
+
+WW8OutputWithDepth::WW8OutputWithDepth()
+: OutputWithDepth<string>("<tablegroup>", "</tablegroup>")
+{
+}
+
+void WW8OutputWithDepth::output(const string & str) const
+{
+ cout << str << endl;
+}
+
+WW8OutputWithDepth output;
+
+}}
diff --git a/writerfilter/source/doctok/WW8OutputWithDepth.hxx b/writerfilter/source/doctok/WW8OutputWithDepth.hxx
new file mode 100644
index 000000000000..2165abab4a65
--- /dev/null
+++ b/writerfilter/source/doctok/WW8OutputWithDepth.hxx
@@ -0,0 +1,53 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_OUTPUT_WITH_DEPTH
+#define INCLUDED_WW8_OUTPUT_WITH_DEPTH
+
+#include <resourcemodel/OutputWithDepth.hxx>
+
+#include <string>
+
+using namespace ::std;
+
+namespace writerfilter {
+namespace doctok
+{
+class WW8OutputWithDepth : public OutputWithDepth<string>
+{
+protected:
+ void output(const string & output) const;
+public:
+ WW8OutputWithDepth();
+ virtual ~WW8OutputWithDepth() { finalize(); }
+};
+
+extern WW8OutputWithDepth output;
+
+}}
+
+#endif // INCLUDED_WW8_OUTPUT_WITH_DEPTH
diff --git a/writerfilter/source/doctok/WW8Picture.cxx b/writerfilter/source/doctok/WW8Picture.cxx
new file mode 100644
index 000000000000..3e2f6d1ced25
--- /dev/null
+++ b/writerfilter/source/doctok/WW8Picture.cxx
@@ -0,0 +1,208 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <resources.hxx>
+#include <WW8DocumentImpl.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+
+void WW8PICF::resolveNoAuto(Properties & rHandler)
+{
+ WW8Stream::Pointer_t pStream = getDocument()->getDataStream();
+
+ {
+ writerfilter::Reference<Properties>::Pointer_t pContent;
+ if (getDocument()->isPicData())
+ {
+ WW8Value::Pointer_t pValue = createValue(get_ffdata());
+ rHandler.attribute(NS_rtf::LN_ffdata, *pValue);
+ }
+ else
+ {
+ WW8Value::Pointer_t pValue = createValue(get_DffRecord());
+ rHandler.attribute(NS_rtf::LN_DffRecord, *pValue);
+ }
+ }
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8PICF::get_DffRecord()
+{
+ writerfilter::Reference<Properties>::Pointer_t
+ pRet(new DffBlock(this, get_cbHeader(), getCount() - get_cbHeader(),
+ 0));
+ return pRet;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8PICF::get_ffdata()
+{
+ writerfilter::Reference<Properties>::Pointer_t
+ pRet(new WW8FFDATA(this, get_cbHeader(), getCount() - get_cbHeader()));
+
+ WW8StructBase::Pointer_t pStruct
+ (new WW8StructBase(this, get_cbHeader(),
+ getCount() - get_cbHeader()));
+
+ pStruct->dump(output);
+
+ return pRet;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8FSPA::get_shape()
+{
+ return getDocument()->getShape(get_spid());
+}
+
+void WW8FFDATA::resolveNoAuto(Properties & rHandler)
+{
+ WW8DocumentImpl * pDocument = getDocument();
+
+ if (pDocument != NULL)
+ {
+ WW8FLD::Pointer_t pFLD = pDocument->getCurrentFLD();
+ WW8Value::Pointer_t pValue = createValue(pFLD->get_flt());
+
+ rHandler.attribute(NS_rtf::LN_FLT, *pValue);
+
+ }
+}
+
+sal_uInt32 WW8FFDATA::get_FLT()
+{
+ sal_uInt32 nResult = 0;
+
+ WW8DocumentImpl * pDocument = getDocument();
+
+ if (pDocument != NULL)
+ {
+ WW8FLD::Pointer_t pFLD = pDocument->getCurrentFLD();
+
+ if (pFLD.get() != NULL)
+ nResult = pFLD->get_flt();
+ }
+
+ return nResult;
+}
+
+static sal_uInt32 lcl_FFDATA_default_offset(WW8FFDATA & rRef)
+{
+ return 0xa + (rRef.getU16(0xa) + 2) * 2;
+}
+
+static sal_uInt32 lcl_FFDATA_formatting_offset(WW8FFDATA & rRef)
+{
+ sal_uInt32 nResult = lcl_FFDATA_default_offset(rRef);
+
+ switch (rRef.get_FLT())
+ {
+ case 71: // forms checkbox
+ case 83: // forms listbox
+ nResult += 2;
+ break;
+ default:
+ nResult += (rRef.getU16(nResult) + 2) * 2;
+ break;
+ }
+
+ return nResult;;
+}
+
+static sal_uInt32 lcl_FFDATA_help_offset(WW8FFDATA & rRef)
+{
+ sal_uInt32 nResult = lcl_FFDATA_formatting_offset(rRef);
+
+ nResult += (rRef.getU16(nResult) + 2) * 2;
+
+ return nResult;;
+}
+
+static sal_uInt32 lcl_FFDATA_tooltip_offset(WW8FFDATA & rRef)
+{
+ sal_uInt32 nResult = lcl_FFDATA_help_offset(rRef);
+
+ nResult += (rRef.getU16(nResult) + 2) * 2;
+
+ return nResult;;
+}
+
+rtl::OUString WW8FFDATA::get_default()
+{
+ rtl::OUString sResult;
+
+ sal_uInt32 nOffset = lcl_FFDATA_default_offset(*this);
+ switch (get_FLT())
+ {
+ case 70:
+ sResult = getString(nOffset);
+
+ break;
+ default:
+ break;
+ }
+
+ return sResult;
+}
+
+rtl::OUString WW8FFDATA::get_formatting()
+{
+ return getString(lcl_FFDATA_formatting_offset(*this));
+}
+
+rtl::OUString WW8FFDATA::get_help()
+{
+ return getString(lcl_FFDATA_help_offset(*this));
+}
+
+rtl::OUString WW8FFDATA::get_tooltip()
+{
+ rtl::OUString sResult;
+
+ sResult = getString(lcl_FFDATA_tooltip_offset(*this));
+
+ return sResult;
+}
+
+sal_uInt16 WW8FFDATA::get_checked()
+{
+ sal_uInt16 nResult = 0;
+
+ switch (get_FLT())
+ {
+ case 71:
+ nResult = getU16(lcl_FFDATA_default_offset(*this));
+ break;
+ default:
+ break;
+ }
+
+ return nResult;
+}
+}}
diff --git a/writerfilter/source/doctok/WW8PieceTable.hxx b/writerfilter/source/doctok/WW8PieceTable.hxx
new file mode 100644
index 000000000000..9e09dd448f88
--- /dev/null
+++ b/writerfilter/source/doctok/WW8PieceTable.hxx
@@ -0,0 +1,175 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_PIECE_TABLE_HXX
+#define INCLUDED_WW8_PIECE_TABLE_HXX
+
+#include <sal/types.h>
+#include <doctok/WW8Document.hxx>
+
+#include <boost/shared_ptr.hpp>
+#include <iostream>
+
+namespace writerfilter {
+namespace doctok {
+
+using namespace ::std;
+
+struct Cp;
+struct Fc;
+class CpAndFc;
+
+/**
+ The piece table of a Word document.
+
+ The piece table associates character positions (CP) and File
+ character positions (FC). In a FC based view the piece table
+ defines intervals of FCs that contain consecutive text.
+
+ CPs and FCs can be complex, i.e. the associated text is stored in
+ bytes. Otherwise the text encoding is UTF-16.
+ */
+class WW8PieceTable
+{
+public:
+ virtual ~WW8PieceTable() {}
+ /**
+ Shared pointer to piece table
+ */
+ typedef boost::shared_ptr<WW8PieceTable> Pointer_t;
+
+ /**
+ Convert CP to FC.
+
+ @param aCpIn CP to convert
+
+ @return FC associated with CP
+ */
+ virtual Fc cp2fc(const Cp & aCpIn) const = 0;
+
+ /**
+ Convert FC to CP.
+
+ @param aFcIn FC to convert
+
+ @return CP associated with FC
+ */
+ virtual Cp fc2cp(const Fc & aFcIn) const = 0;
+
+ /**
+ Check if CP is complex.
+
+ @param aCp CP to check
+ @retval true CP is complex
+ @retval false else
+ */
+ virtual bool isComplex(const Cp & aCp) const = 0;
+
+ /**
+ Check if FC is complex.
+
+ @param aFc FC to check
+ @retval true FC is complex
+ @retval false else
+ */
+ virtual bool isComplex(const Fc & aFc) const = 0;
+
+ /**
+ Return number of entries.
+ */
+ virtual sal_uInt32 getCount() const = 0;
+
+ /**
+ Return first CP.
+ */
+ virtual Cp getFirstCp() const = 0;
+
+ /**
+ Return first FC.
+ */
+ virtual Fc getFirstFc() const = 0;
+
+ /**
+ Return last CP.
+ */
+ virtual Cp getLastCp() const = 0;
+
+ /**
+ Return last FC.
+ */
+ virtual Fc getLastFc() const = 0;
+
+ /**
+ Return CP at index.
+
+ @param nIndex index of CP to return
+ */
+ virtual Cp getCp(sal_uInt32 nIndex) const = 0;
+
+ /**
+ Return FC at index.
+
+ @param nIndex index of FC to return
+ */
+ virtual Fc getFc(sal_uInt32 nIndex) const = 0;
+
+ /**
+ Create CpAndFc from Cp.
+
+ @param rCp the Cp
+
+ @return CpAndFc containing rCp and corresponding Fc
+ */
+ virtual CpAndFc createCpAndFc(const Cp & rCp, PropertyType eType) const = 0;
+
+ /**
+ Create CpAndFc from Fc.
+
+ @param rFc the Fc
+
+ @return CpAndFc containing rFc and corresponding Cp
+ */
+ virtual CpAndFc createCpAndFc(const Fc & rFc, PropertyType eType) const = 0;
+
+ /**
+ Dump piece table.
+
+ @param o stream to dump to
+ */
+ virtual void dump(ostream & o) const = 0;
+};
+
+/**
+ Dump piece table.
+
+ @param o stream to dump to
+ @param rPieceTable piece table to dump
+*/
+ostream & operator << (ostream & o, const WW8PieceTable & rPieceTable);
+}}
+
+#endif // INCLUDED_WW8_PIECE_TABLE_HXX
diff --git a/writerfilter/source/doctok/WW8PieceTableImpl.cxx b/writerfilter/source/doctok/WW8PieceTableImpl.cxx
new file mode 100644
index 000000000000..869964aac67e
--- /dev/null
+++ b/writerfilter/source/doctok/WW8PieceTableImpl.cxx
@@ -0,0 +1,299 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <algorithm>
+#include <iterator>
+
+#ifndef INCLUDED_DOCTOK_EXCEPTIONS
+#include <resourcemodel/exceptions.hxx>
+#endif
+#include <WW8PieceTableImpl.hxx>
+#include <WW8Clx.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+using namespace ::std;
+
+ostream & operator << (ostream & o, const WW8PieceTable & rPieceTable)
+{
+ rPieceTable.dump(o);
+
+ return o;
+}
+
+WW8PieceTableImpl::WW8PieceTableImpl(WW8Stream & rStream,
+ sal_uInt32 nOffset,
+ sal_uInt32 nCount)
+{
+ WW8Clx aClx(rStream, nOffset, nCount);
+
+ sal_uInt32 nPieceCount = aClx.getPieceCount();
+
+ if (nPieceCount > 0)
+ {
+ for (sal_uInt32 n = 0; n < nPieceCount; n++)
+ {
+ Cp aCp(aClx.getCp(n));
+ Fc aFc(aClx.getFc(n), aClx.isComplexFc(n));
+
+ CpAndFc aCpAndFc(aCp, aFc, PROP_DOC);
+
+ mEntries.push_back(aCpAndFc);
+ }
+
+ CpAndFc aBack = mEntries.back();
+ Cp aCp(aClx.getCp(aClx.getPieceCount()));
+ Fc aFc(aBack.getFc() + (aCp - aBack.getCp()));
+
+ CpAndFc aCpAndFc(aCp, aFc, PROP_DOC);
+
+ mEntries.push_back(aCpAndFc);
+ }
+}
+
+sal_uInt32 WW8PieceTableImpl::getCount() const
+{
+ return mEntries.size();
+}
+
+WW8PieceTableImpl::tEntries::const_iterator
+WW8PieceTableImpl::findCp(const Cp & rCp) const
+{
+ tEntries::const_iterator aResult = mEntries.end();
+ tEntries::const_iterator aEnd = mEntries.end();
+
+ for (tEntries::const_iterator aIt = mEntries.begin(); aIt != aEnd;
+ aIt++)
+ {
+ if (aIt->getCp() <= rCp)
+ {
+ aResult = aIt;
+
+ //break;
+ }
+ }
+
+ return aResult;
+}
+
+WW8PieceTableImpl::tEntries::const_iterator
+WW8PieceTableImpl::findFc(const Fc & rFc) const
+{
+ tEntries::const_iterator aResult = mEntries.end();
+ tEntries::const_iterator aEnd = mEntries.end();
+
+ if (mEntries.size() > 0)
+ {
+ if (rFc < mEntries.begin()->getFc())
+ aResult = mEntries.begin();
+ else
+ {
+ for (tEntries::const_iterator aIt = mEntries.begin();
+ aIt != aEnd; aIt++)
+ {
+ if (aIt->getFc() <= rFc)
+ {
+ tEntries::const_iterator aItNext = aIt;
+ aItNext++;
+
+ if (aItNext != aEnd)
+ {
+ sal_uInt32 nOffset = rFc.get() - aIt->getFc().get();
+ sal_uInt32 nLength = aItNext->getCp() - aIt->getCp();
+
+ if (! aIt->isComplex())
+ nLength *= 2;
+
+ if (nOffset < nLength)
+ {
+ aResult = aIt;
+
+ break;
+ }
+ }
+
+ }
+ }
+ }
+ }
+
+ return aResult;
+}
+
+Cp WW8PieceTableImpl::getFirstCp() const
+{
+ Cp aResult;
+
+ if (getCount() > 0)
+ aResult = getCp(0);
+ else
+ throw ExceptionNotFound("WW8PieceTableImpl::getFirstCp");
+
+ return aResult;
+}
+
+Fc WW8PieceTableImpl::getFirstFc() const
+{
+ Fc aResult;
+
+ if (getCount() > 0)
+ aResult = getFc(0);
+ else
+ throw ExceptionNotFound(" WW8PieceTableImpl::getFirstFc");
+
+ return aResult;
+}
+
+Cp WW8PieceTableImpl::getLastCp() const
+{
+ Cp aResult;
+
+ if (getCount() > 0)
+ aResult = getCp(getCount() - 1);
+ else
+ throw ExceptionNotFound("WW8PieceTableImpl::getLastCp");
+
+ return aResult;
+}
+
+Fc WW8PieceTableImpl::getLastFc() const
+{
+ Fc aResult;
+
+ if (getCount() > 0)
+ aResult = getFc(getCount() - 1);
+ else
+ throw ExceptionNotFound("WW8PieceTableImpl::getLastFc");
+
+ return aResult;
+}
+
+Cp WW8PieceTableImpl::getCp(sal_uInt32 nIndex) const
+{
+ return mEntries[nIndex].getCp();
+}
+
+Fc WW8PieceTableImpl::getFc(sal_uInt32 nIndex) const
+{
+ return mEntries[nIndex].getFc();
+}
+
+Cp WW8PieceTableImpl::fc2cp(const Fc & rFc) const
+{
+ Cp cpResult;
+
+ if (mEntries.size() > 0)
+ {
+ Fc aFc;
+
+ if (rFc < mEntries.begin()->getFc())
+ aFc = mEntries.begin()->getFc();
+ else
+ aFc = rFc;
+
+ tEntries::const_iterator aIt = findFc(aFc);
+
+ if (aIt != mEntries.end())
+ {
+ cpResult = aIt->getCp() + (aFc - aIt->getFc());
+ }
+ else
+ throw ExceptionNotFound("WW8PieceTableImpl::fc2cp: " + aFc.toString());
+ }
+
+ return cpResult;
+}
+
+Fc WW8PieceTableImpl::cp2fc(const Cp & rCp) const
+{
+ Fc aResult;
+
+ Cp2FcHashMap_t::iterator aItCp = mCp2FcCache.find(rCp);
+
+ if (aItCp == mCp2FcCache.end())
+ {
+ tEntries::const_iterator aIt = findCp(rCp);
+
+ if (aIt != mEntries.end())
+ {
+ aResult = aIt->getFc() + (rCp - aIt->getCp());
+ mCp2FcCache[rCp] = aResult;
+ }
+ else
+ throw ExceptionNotFound
+ ("WW8PieceTableImpl::cp2fc: " + rCp.toString());
+ }
+ else
+ aResult = mCp2FcCache[rCp];
+
+ return aResult;
+}
+
+bool WW8PieceTableImpl::isComplex(const Cp & rCp) const
+{
+ bool bResult = false;
+
+ tEntries::const_iterator aIt = findCp(rCp);
+
+ if (aIt != mEntries.end())
+ bResult = aIt->isComplex();
+
+ return bResult;
+}
+
+bool WW8PieceTableImpl::isComplex(const Fc & rFc) const
+{
+ bool bResult = false;
+
+ tEntries::const_iterator aIt = findFc(rFc);
+
+ if (aIt != mEntries.end())
+ bResult = aIt->isComplex();
+
+ return bResult;
+}
+
+CpAndFc WW8PieceTableImpl::createCpAndFc
+(const Cp & rCp, PropertyType eType) const
+{
+ return CpAndFc(rCp, cp2fc(rCp), eType);
+}
+
+CpAndFc WW8PieceTableImpl::createCpAndFc
+(const Fc & rFc, PropertyType eType) const
+{
+ return CpAndFc(fc2cp(rFc), rFc, eType);
+}
+
+void WW8PieceTableImpl::dump(ostream & o) const
+{
+ o << "<piecetable>" << endl;
+ copy(mEntries.begin(), mEntries.end(), ostream_iterator<CpAndFc>(o, "\n"));
+ o << "</piecetable>" << endl;
+}
+}}
diff --git a/writerfilter/source/doctok/WW8PieceTableImpl.hxx b/writerfilter/source/doctok/WW8PieceTableImpl.hxx
new file mode 100644
index 000000000000..3d7a5e9ede79
--- /dev/null
+++ b/writerfilter/source/doctok/WW8PieceTableImpl.hxx
@@ -0,0 +1,75 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_PIECE_TABLE_IMPL_HXX
+#define INCLUDED_WW8_PIECE_TABLE_IMPL_HXX
+
+#include <vector>
+#include <WW8CpAndFc.hxx>
+#ifndef INCLUDE_WW8_PIECE_TABLE_HXX
+#include <WW8PieceTable.hxx>
+#endif
+
+namespace writerfilter {
+namespace doctok
+{
+using namespace ::std;
+
+class WW8PieceTableImpl : public WW8PieceTable
+{
+ typedef std::vector<CpAndFc> tEntries;
+ tEntries mEntries;
+
+ tEntries::const_iterator findCp(const Cp & rCp) const;
+ tEntries::const_iterator findFc(const Fc & rFc) const;
+
+ mutable Cp2FcHashMap_t mCp2FcCache;
+
+public:
+ WW8PieceTableImpl(WW8Stream & rStream, sal_uInt32 nOffset,
+ sal_uInt32 nCount);
+
+ virtual Fc cp2fc(const Cp & aCpIn) const;
+ virtual Cp fc2cp(const Fc & aFcIn) const;
+ virtual bool isComplex(const Cp & aCp) const;
+ virtual bool isComplex(const Fc & aFc) const;
+
+ virtual sal_uInt32 getCount() const;
+ virtual Cp getFirstCp() const;
+ virtual Fc getFirstFc() const;
+ virtual Cp getLastCp() const;
+ virtual Fc getLastFc() const;
+ virtual Cp getCp(sal_uInt32 nIndex) const;
+ virtual Fc getFc(sal_uInt32 nIndex) const;
+ virtual CpAndFc createCpAndFc(const Cp & rCp, PropertyType eType) const;
+ virtual CpAndFc createCpAndFc(const Fc & rFc, PropertyType eType) const;
+
+ virtual void dump(ostream & o) const;
+};
+}}
+
+#endif // INCLUDED_WW8_PIECE_TABLE_IMPL_HXX
diff --git a/writerfilter/source/doctok/WW8PropertySetImpl.cxx b/writerfilter/source/doctok/WW8PropertySetImpl.cxx
new file mode 100644
index 000000000000..88633102e940
--- /dev/null
+++ b/writerfilter/source/doctok/WW8PropertySetImpl.cxx
@@ -0,0 +1,403 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "WW8DocumentImpl.hxx"
+#include "WW8ResourceModelImpl.hxx"
+#include <doctok/resourceids.hxx>
+#include <resourcemodel/QNameToString.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+
+
+bool operator != (const WW8PropertySetIterator & rA,
+ const WW8PropertySetIterator & rB)
+{
+ return ! (rA.equal(rB));
+}
+
+WW8Property::~WW8Property()
+{
+}
+
+WW8PropertySet::~WW8PropertySet()
+{
+}
+
+WW8PropertySetIterator::~WW8PropertySetIterator()
+{
+}
+
+WW8PropertyImpl::WW8PropertyImpl(WW8Stream & rStream,
+ sal_uInt32 nOffset, sal_uInt32 nCount)
+: WW8StructBase(rStream, nOffset, nCount)
+{
+}
+
+WW8PropertyImpl::WW8PropertyImpl(const WW8StructBase & rBase,
+ sal_uInt32 nOffset,
+ sal_uInt32 nCount)
+: WW8StructBase(rBase, nOffset, nCount)
+{
+}
+
+WW8PropertyImpl::WW8PropertyImpl(WW8StructBase * pBase,
+ sal_uInt32 nOffset,
+ sal_uInt32 nCount)
+: WW8StructBase(pBase, nOffset, nCount)
+{
+}
+
+WW8PropertyImpl::~WW8PropertyImpl()
+{
+}
+
+sal_uInt32 WW8PropertyImpl::getParam() const
+{
+ sal_uInt32 nResult = 0;
+
+ switch (get_spra())
+ {
+ case 0:
+ case 1:
+ nResult = getU8(2);
+
+ break;
+
+ case 2:
+ case 4:
+ case 5:
+ nResult = getU16(2);
+
+ break;
+
+ case 3:
+ nResult = getU32(2);
+
+ break;
+
+ case 7:
+ nResult = getU16(2) + (getU8(4) << 16);
+
+ break;
+
+ default:
+ break;
+ }
+
+ return nResult;
+}
+
+WW8Stream::Sequence WW8PropertyImpl::getParams() const
+{
+ return WW8Stream::Sequence(mSequence, 2, getCount() - 2);
+}
+
+sal_uInt32 WW8PropertyImpl::getByteLength() const
+{
+ sal_uInt32 nParamSize = 0;
+
+ switch (get_spra())
+ {
+ case 0:
+ case 1:
+ nParamSize = 1;
+
+ break;
+
+ case 2:
+ case 4:
+ case 5:
+ nParamSize = 2;
+
+ break;
+
+ case 3:
+ nParamSize = 4;
+
+ break;
+
+ case 7:
+ nParamSize = 3;
+
+ break;
+ default:
+ nParamSize = getU8(2) + 1;
+
+ break;
+ }
+
+ return nParamSize + 2;
+}
+
+sal_uInt32 WW8PropertyImpl::getParamOffset() const
+{
+ sal_uInt32 nReturn = 0;
+
+ if (get_spra() == 6)
+ nReturn = 1;
+
+ switch (getId())
+ {
+ case 0xd608:
+ case 0xd609:
+ nReturn = 3;
+
+ break;
+
+ default:
+ break;
+ }
+
+ return nReturn;
+}
+
+void WW8PropertyImpl::dump(OutputWithDepth<string> & o) const
+{
+ o.addItem(toString());
+}
+
+string WW8PropertyImpl::toString() const
+{
+ string aResult;
+
+ aResult += "<sprmcommon";
+
+ char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), " id=\"%" SAL_PRIuUINT32 "\"", getId());
+ aResult += sBuffer;
+ aResult += " name=\"";
+ aResult += (*SprmIdToString::Instance())(getId());
+ aResult += "\"";
+ snprintf(sBuffer, sizeof(sBuffer), " sgc=\"%x\"", get_sgc());
+ aResult += sBuffer;
+ snprintf(sBuffer, sizeof(sBuffer), " spra=\"%x\"", get_spra());
+ aResult += sBuffer;
+ snprintf(sBuffer, sizeof(sBuffer), " size=\"%" SAL_PRIxUINT32 "\"", getByteLength());
+ aResult += sBuffer;
+ snprintf(sBuffer, sizeof(sBuffer), " param=\"%" SAL_PRIxUINT32 "\"", getParam());
+ aResult += sBuffer;
+ aResult += ">\n";
+
+ aResult += mSequence.toString();
+
+ aResult += "</sprmcommon>";
+
+ return aResult;
+}
+
+WW8PropertySetImpl::WW8PropertySetImpl(WW8Stream & rStream,
+ sal_uInt32 nOffset,
+ sal_uInt32 nCount,
+ bool bPap)
+: WW8StructBase(rStream, nOffset, nCount), mbPap(bPap)
+{
+}
+
+WW8PropertySetImpl::WW8PropertySetImpl(const WW8StructBase & rBase,
+ sal_uInt32 nOffset,
+ sal_uInt32 nCount,
+ bool bPap)
+: WW8StructBase(rBase, nOffset, nCount), mbPap(bPap)
+{
+}
+
+WW8PropertySetImpl::~WW8PropertySetImpl()
+{
+}
+
+bool WW8PropertySetImpl::isPap() const
+{
+ return mbPap;
+}
+
+sal_uInt32 WW8PropertySetImpl::get_istd() const
+{
+ sal_uInt32 nResult = 0;
+
+ if (mbPap)
+ nResult = getU16(0);
+
+ return nResult;
+}
+
+WW8PropertySetIterator::Pointer_t WW8PropertySetImpl::begin()
+{
+ return WW8PropertySetIterator::Pointer_t
+ (new WW8PropertySetIteratorImpl(this, mbPap ? 2 : 0));
+}
+
+WW8PropertySetIterator::Pointer_t WW8PropertySetImpl::end()
+{
+ return WW8PropertySetIterator::Pointer_t
+ (new WW8PropertySetIteratorImpl(this, getCount()));
+}
+
+WW8PropertySetIteratorImpl::~WW8PropertySetIteratorImpl()
+{
+}
+
+WW8Property::Pointer_t
+WW8PropertySetImpl::getAttribute(sal_uInt32 nOffset) const
+{
+ WW8PropertyImpl aTmpAttr(*this, nOffset, 3);
+
+ sal_uInt32 nLength = aTmpAttr.getByteLength();
+
+ if (nOffset + nLength > getCount())
+ nLength = getCount() - nOffset;
+
+ return WW8Property::Pointer_t
+ (new WW8PropertyImpl(*this, nOffset, nLength));
+}
+
+void WW8PropertySetImpl::dump(OutputWithDepth<string> & o) const
+{
+ WW8StructBase::dump(o);
+
+ WW8PropertySetIterator::Pointer_t pIt =
+ const_cast<WW8PropertySetImpl *>(this)->begin();
+ WW8PropertySetIterator::Pointer_t pItEnd =
+ const_cast<WW8PropertySetImpl *>(this)->end();
+
+ while((*pIt) != (*pItEnd))
+ {
+ WW8Property::Pointer_t pAttr = pIt->get();
+
+ pAttr->dump(o);
+ ++(*pIt);
+ }
+}
+
+void WW8PropertySetImpl::dots(ostream & o)
+{
+ WW8PropertySetIterator::Pointer_t pIt = begin();
+ WW8PropertySetIterator::Pointer_t pItEnd = end();
+
+ while((*pIt) != (*pItEnd))
+ {
+ WW8Property::Pointer_t pAttr = pIt->get();
+
+ o << "." << endl;
+
+ ++(*pIt);
+ }
+}
+
+string WW8PropertySetImpl::getType() const
+{
+ return "WW8PropertySetImpl";
+}
+
+void WW8PropertySetImpl::resolveLocal(Sprm & sprm)
+{
+ switch (sprm.getId())
+ {
+ case 0x6a03:
+ {
+ Value::Pointer_t pValue = sprm.getValue();
+ getDocument()->setPicLocation(pValue->getInt());
+ getDocument()->setPicIsData(false);
+ }
+ break;
+ case 0x806:
+ {
+ getDocument()->setPicIsData(true);
+ }
+ default:
+ break;
+ }
+}
+
+void WW8PropertySetImpl::resolve(Properties & rHandler)
+{
+ if (getCount() >= (isPap() ? 5U : 3U))
+ {
+ WW8PropertySetIterator::Pointer_t pIt = begin();
+ WW8PropertySetIterator::Pointer_t pItEnd = end();
+
+ if (isPap())
+ {
+ WW8Value::Pointer_t pValue = createValue(getU16(0));
+ rHandler.attribute(NS_rtf::LN_ISTD, *pValue);
+ }
+
+ while((*pIt) != (*pItEnd))
+ {
+ WW8Sprm aSprm(pIt->get());
+
+ rHandler.sprm(aSprm);
+
+ resolveLocal(aSprm);
+
+ ++(*pIt);
+ }
+ }
+}
+
+WW8PropertySetIterator & WW8PropertySetIteratorImpl::operator++ ()
+{
+ WW8Property::Pointer_t pTmpAttr = mpAttrSet->getAttribute(mnOffset);
+
+ mnOffset += dynamic_cast<WW8PropertyImpl *>(pTmpAttr.get())->
+ getByteLength();
+
+ if (mnOffset > mpAttrSet->getCount() ||
+ mpAttrSet->getCount() - mnOffset < 3)
+ mnOffset = mpAttrSet->getCount();
+
+ return *this;
+}
+
+WW8Property::Pointer_t WW8PropertySetIteratorImpl::get() const
+{
+ return mpAttrSet->getAttribute(mnOffset);
+}
+
+bool WW8PropertySetIteratorImpl::equal
+(const WW8PropertySetIterator & rIt) const
+{
+ const WW8PropertySetIteratorImpl & rMyIt =
+ dynamic_cast<const WW8PropertySetIteratorImpl &>(rIt);
+
+ return mpAttrSet == rMyIt.mpAttrSet && mnOffset == rMyIt.mnOffset;
+}
+
+string WW8PropertySetIteratorImpl::toString() const
+{
+ string sResult = "";
+
+ char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer), "(%" SAL_PRIuUINT32 ")", mnOffset);
+ sResult += sBuffer;
+
+ return sResult;
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8PropertySetImpl.hxx b/writerfilter/source/doctok/WW8PropertySetImpl.hxx
new file mode 100644
index 000000000000..5c5c42b73a15
--- /dev/null
+++ b/writerfilter/source/doctok/WW8PropertySetImpl.hxx
@@ -0,0 +1,144 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_PROPERTY_SET_IMPL_HXX
+#define INCLUDED_WW8_PROEPRTY_SET_IMPL_HXX
+
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <doctok/WW8Document.hxx>
+#include <WW8StructBase.hxx>
+#include <WW8OutputWithDepth.hxx>
+
+#include <map>
+
+namespace writerfilter {
+namespace doctok
+{
+
+class WW8PropertyImpl : public WW8Property, public WW8StructBase
+{
+ sal_uInt8 get_ispmd() const
+ { return sal::static_int_cast<sal_uInt8>(getId() & 0xff); }
+ bool get_fSpec() const { return (getId() & 0x100) != 0; }
+ sal_uInt8 get_sgc() const
+ { return sal::static_int_cast<sal_uInt8>((getId() >> 10) & 0x7); }
+ sal_uInt8 get_spra() const
+ { return sal::static_int_cast<sal_uInt8>((getId() >> 13) & 0x7); }
+
+public:
+ WW8PropertyImpl(WW8Stream & rStream, sal_uInt32 nOffset, sal_uInt32 nCount);
+ WW8PropertyImpl(const WW8StructBase & rBase, sal_uInt32 nOffset,
+ sal_uInt32 nCount);
+
+ WW8PropertyImpl(WW8StructBase * pBase, sal_uInt32 nOffset,
+ sal_uInt32 nCount);
+
+ virtual ~WW8PropertyImpl();
+
+ sal_uInt32 getId() const { return getU16(0); }
+ sal_uInt32 getParam() const;
+ WW8Stream::Sequence getParams() const;
+
+ sal_uInt32 getByteLength() const;
+ sal_uInt32 getParamOffset() const;
+
+ virtual void dump(OutputWithDepth<string> & o) const;
+ string toString() const;
+};
+
+class WW8PropertySetImpl : public WW8PropertySet, public WW8StructBase,
+ public ::writerfilter::Reference<Properties>
+{
+ bool mbPap;
+
+public:
+ typedef boost::shared_ptr<WW8PropertySet> Pointer_t;
+
+ WW8PropertySetImpl(WW8Stream & rStream, sal_uInt32 nOffset,
+ sal_uInt32 nCount, bool bPap = false);
+
+ WW8PropertySetImpl(const WW8StructBase & rBase, sal_uInt32 nOffset,
+ sal_uInt32 nCount, bool bPap = false);
+
+ virtual ~WW8PropertySetImpl();
+
+ virtual WW8PropertySetIterator::Pointer_t begin();
+ virtual WW8PropertySetIterator::Pointer_t end();
+
+ virtual void dump(OutputWithDepth<string> & o) const;
+ virtual void dots(ostream & o);
+
+ virtual string getType() const;
+
+ virtual WW8Property::Pointer_t getAttribute(sal_uInt32 nOffset) const;
+
+ virtual bool isPap() const;
+ virtual sal_uInt32 get_istd() const;
+
+ virtual void insert(const WW8PropertySet::Pointer_t /*pSet*/) {}
+
+ virtual void resolve(Properties & rHandler);
+
+ /**
+ Get and distribute information from sprm that is used
+ internally by the document.
+
+ @param rSprm sprm to process
+ */
+ virtual void resolveLocal(Sprm & rSprm);
+};
+
+class WW8PropertySetIteratorImpl : public WW8PropertySetIterator
+{
+ WW8PropertySetImpl * mpAttrSet;
+ sal_uInt32 mnOffset;
+
+public:
+ WW8PropertySetIteratorImpl(WW8PropertySetImpl * pAttrSet,
+ sal_uInt32 nOffset)
+ : mpAttrSet(pAttrSet), mnOffset(nOffset)
+ {
+ }
+
+ virtual ~WW8PropertySetIteratorImpl();
+
+ virtual WW8PropertySetIterator & operator++();
+
+ virtual WW8Property::Pointer_t get() const;
+
+ virtual bool equal(const WW8PropertySetIterator & rIt) const;
+
+ virtual string toString() const;
+};
+
+::writerfilter::Reference<Properties>::Pointer_t createSprmProps
+(WW8PropertyImpl & rProp);
+::writerfilter::Reference<BinaryObj>::Pointer_t createSprmBinary
+(WW8PropertyImpl & rProp);
+}}
+
+#endif // INCLUDED_WW8_PROPERTY_SET_IMPL_HXX
diff --git a/writerfilter/source/doctok/WW8ResourceModelImpl.cxx b/writerfilter/source/doctok/WW8ResourceModelImpl.cxx
new file mode 100644
index 000000000000..a576640905ce
--- /dev/null
+++ b/writerfilter/source/doctok/WW8ResourceModelImpl.cxx
@@ -0,0 +1,501 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <WW8ResourceModelImpl.hxx>
+#include <resources.hxx>
+#include <util.hxx>
+#include <WW8OutputWithDepth.hxx>
+#include <resourcemodel/TableManager.hxx>
+#include <rtl/string.hxx>
+#include <resourcemodel/QNameToString.hxx>
+
+namespace writerfilter {
+
+namespace doctok
+{
+using namespace ::std;
+
+
+// ------- WW8TableDataHandler ---------
+
+typedef WW8PropertySet::Pointer_t TablePropsPointer_t;
+
+class WW8TableDataHandler : public TableDataHandler<string,
+ TablePropsPointer_t>
+{
+public:
+ typedef boost::shared_ptr<WW8TableDataHandler> Pointer_t;
+ virtual void startTable(unsigned int nRows, unsigned int nDepth,
+ TablePropsPointer_t pProps);
+ virtual void endTable();
+ virtual void startRow(unsigned int nCols,
+ TablePropsPointer_t pProps);
+ virtual void endRow();
+ virtual void startCell(const string & start, TablePropsPointer_t pProps);
+ virtual void endCell(const string & end);
+};
+
+void WW8TableDataHandler::startTable(unsigned int nRows, unsigned int nDepth,
+ TablePropsPointer_t /*pProps*/)
+{
+ char sBuffer[256];
+
+ string tmpStr = "<tabledata.table rows=\"";
+ snprintf(sBuffer, sizeof(sBuffer), "%d", nRows);
+ tmpStr += sBuffer;
+ tmpStr += "\" depth=\"";
+ snprintf(sBuffer, sizeof(sBuffer), "%d", nDepth);
+ tmpStr += sBuffer;
+ tmpStr += "\">";
+
+ output.addItem(tmpStr);
+}
+
+void WW8TableDataHandler::endTable()
+{
+ output.addItem("</tabledata.table>");
+}
+
+void WW8TableDataHandler::startRow
+(unsigned int nCols, TablePropsPointer_t /*pProps*/)
+{
+ char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer), "%d", nCols);
+ string tmpStr = "<tabledata.row cells=\"";
+ tmpStr += sBuffer;
+ tmpStr += "\">";
+ output.addItem(tmpStr);
+}
+
+void WW8TableDataHandler::endRow()
+{
+ output.addItem("</tabledata.row>");
+}
+
+void WW8TableDataHandler::startCell(const string & start,
+ TablePropsPointer_t /*pProps*/)
+{
+ output.addItem("<tabledata.cell>");
+ output.addItem(start);
+ output.addItem(", ");
+}
+
+void WW8TableDataHandler::endCell(const string & end)
+{
+ output.addItem(end);
+ output.addItem("</tabledata.cell>");
+}
+
+// ----- WW8TableDataManager -------------------------------
+
+class WW8TableManager :
+ public TableManager<string, TablePropsPointer_t>
+{
+ typedef TableDataHandler<string, TablePropsPointer_t>
+ TableDataHandlerPointer_t;
+
+public:
+ WW8TableManager();
+ virtual ~WW8TableManager() {}
+ virtual void endParagraphGroup();
+ virtual bool sprm(Sprm & rSprm);
+};
+
+WW8TableManager::WW8TableManager()
+{
+ TableDataHandler<string, TablePropsPointer_t>::Pointer_t pHandler(new WW8TableDataHandler());
+ setHandler(pHandler);
+}
+
+bool WW8TableManager::sprm(Sprm & rSprm)
+{
+ TableManager<string, TablePropsPointer_t>::sprm(rSprm);
+ output.setDepth(getTableDepthNew());
+ return true;
+}
+
+void WW8TableManager::endParagraphGroup()
+{
+ string tmpStr = "<tabledepth depth=\"";
+ char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), "%" SAL_PRIdINT32, getTableDepthNew());
+ tmpStr += sBuffer;
+ tmpStr += "\"/>";
+ output.addItem(tmpStr);
+ TableManager<string, TablePropsPointer_t>::endParagraphGroup();
+}
+
+WW8TableManager gTableManager;
+
+
+//-------- WW8TableReference -----------------------------------
+
+void WW8TableReference::resolve(Table & /*rHandler*/)
+{
+ output.addItem("<table/>");
+}
+
+string WW8TableReference::getType() const
+{
+ return "WW8TableReference";
+}
+
+void WW8PropertiesReference::resolve(Properties & rHandler)
+{
+ if (mpPropSet != NULL)
+ {
+ //mpPropSet->dump(clog);
+
+ if (mpPropSet->isPap())
+ {
+ WW8IntValue aValue(mpPropSet->get_istd());
+
+ rHandler.attribute(NS_rtf::LN_ISTD, aValue);
+ }
+
+ WW8PropertySetIterator::Pointer_t pIt = mpPropSet->begin();
+ WW8PropertySetIterator::Pointer_t pItEnd = mpPropSet->end();
+
+ try
+ {
+ while (! pIt->equal(*pItEnd))
+ {
+ WW8Sprm aSprm(pIt->get());
+ rHandler.sprm(aSprm);
+
+ ++(*pIt);
+ }
+ }
+ catch (ExceptionOutOfBounds e)
+ {
+ }
+ }
+}
+
+string WW8PropertiesReference::getType() const
+{
+ return "WW8PropertiesReference";
+}
+
+WW8BinaryObjReference::WW8BinaryObjReference
+(WW8StructBase & rParent, sal_uInt32 nOffset, sal_uInt32 nCount)
+: WW8StructBase(rParent, nOffset, nCount)
+{
+}
+
+WW8BinaryObjReference::WW8BinaryObjReference
+(WW8StructBase * pParent, sal_uInt32 nOffset, sal_uInt32 nCount)
+: WW8StructBase(pParent, nOffset, nCount)
+{
+}
+
+WW8BinaryObjReference::WW8BinaryObjReference
+(WW8StructBase * pParent)
+: WW8StructBase(pParent, 0x0, pParent->getCount())
+{
+}
+
+WW8BinaryObjReference::WW8BinaryObjReference
+(WW8Stream & rStream, sal_uInt32 nOffset, sal_uInt32 nCount)
+: WW8StructBase(rStream, nOffset, nCount)
+{
+}
+
+writerfilter::Reference<BinaryObj>::Pointer_t
+WW8BinaryObjReference::getBinary()
+{
+ return writerfilter::Reference<BinaryObj>::Pointer_t
+ (new WW8BinaryObjReference(*this));
+}
+
+void WW8BinaryObjReference::resolve(BinaryObj & rHandler)
+{
+ writerfilter::Reference<Properties>::Pointer_t pRef =
+ writerfilter::Reference<Properties>::Pointer_t();
+
+ if (getCount() > 0)
+ rHandler.data(get(0), getCount(), pRef);
+}
+
+string WW8BinaryObjReference::getType() const
+{
+ return "WW8BinaryObjReference";
+}
+
+sal_uInt32 WW8Sprm::getId() const
+{
+ sal_uInt32 nResult = 0;
+
+ if (mpProperty.get() != NULL)
+ nResult = mpProperty->getId();
+ else if (mpBinary.get() != NULL)
+ nResult = NS_rtf::LN_blob;
+
+ return nResult;
+}
+
+string WW8Sprm::toString() const
+{
+ string sResult = "";
+
+ if (mpProperty.get() != NULL)
+ sResult = mpProperty->toString();
+
+ return sResult;
+}
+
+Value::Pointer_t WW8Sprm::getValue()
+{
+ Value::Pointer_t pResult;
+
+ if (mpProperty.get() != NULL)
+ pResult = Value::Pointer_t(createValue(mpProperty->getParam()));
+
+ return pResult;
+}
+
+writerfilter::Reference<BinaryObj>::Pointer_t WW8Sprm::getBinary()
+{
+ writerfilter::Reference<BinaryObj>::Pointer_t pResult;
+
+ if (mpBinary.get() != NULL)
+ pResult = writerfilter::Reference<BinaryObj>::Pointer_t
+ (mpBinary->clone());
+ else if (mpProperty.get() != NULL)
+ pResult = createSprmBinary
+ (dynamic_cast<WW8PropertyImpl &>(*(mpProperty.get())));
+
+ return pResult;
+}
+
+writerfilter::Reference<Stream>::Pointer_t WW8Sprm::getStream()
+{
+ return writerfilter::Reference<Stream>::Pointer_t();
+}
+
+writerfilter::Reference<Properties>::Pointer_t WW8Sprm::getProps()
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ if (mpProperty.get() != NULL)
+ {
+ pResult = createSprmProps
+ (dynamic_cast<WW8PropertyImpl &>(*(mpProperty.get())));
+ }
+
+ return pResult;
+}
+
+Sprm::Kind WW8Sprm::getKind()
+{
+ return SprmKind(getId());
+}
+
+string WW8Sprm::getName() const
+{
+ return (*SprmIdToString::Instance())(getId());
+}
+
+int WW8Value::getInt() const
+{
+ return 0;
+}
+
+uno::Any WW8Value::getAny() const
+{
+ return uno::Any();
+}
+
+::rtl::OUString WW8Value::getString() const
+{
+ return ::rtl::OUString();
+}
+
+string WW8Value::toString() const
+{
+ return string();
+}
+
+writerfilter::Reference<Properties>::Pointer_t WW8Value::getProperties()
+{
+ return writerfilter::Reference<Properties>::Pointer_t();
+}
+
+writerfilter::Reference<Stream>::Pointer_t WW8Value::getStream()
+{
+ return writerfilter::Reference<Stream>::Pointer_t();
+}
+
+writerfilter::Reference<BinaryObj>::Pointer_t WW8Value::getBinary()
+{
+ return writerfilter::Reference<BinaryObj>::Pointer_t();
+}
+
+int WW8IntValue::getInt() const
+{
+ return mValue;
+}
+
+::rtl::OUString WW8IntValue::getString() const
+{
+ return ::rtl::OUString::valueOf(static_cast<sal_Int32>(mValue));
+}
+
+uno::Any WW8IntValue::getAny() const
+{
+ uno::Any aResult;
+
+ aResult <<= static_cast<sal_uInt32>(mValue);
+
+ return aResult;
+}
+
+string WW8IntValue::toString() const
+{
+ char sBuffer[255];
+
+ snprintf(sBuffer, sizeof(sBuffer), "%x", mValue);
+
+ return string(sBuffer);
+}
+
+WW8Value::Pointer_t createValue(int value)
+{
+ return WW8Value::Pointer_t(new WW8IntValue(value));
+}
+
+WW8Value::Pointer_t createValue(WW8Value::Pointer_t value)
+{
+ return value;
+}
+
+int WW8StringValue::getInt() const
+{
+ return 0;
+}
+
+::rtl::OUString WW8StringValue::getString() const
+{
+ return mString;
+}
+
+uno::Any WW8StringValue::getAny() const
+{
+ uno::Any aResult;
+
+ aResult <<= mString;
+
+ return aResult;
+}
+
+string WW8StringValue::toString() const
+{
+ string result;
+
+ sal_uInt32 nCount = mString.getLength();
+ for (sal_uInt32 n = 0; n < nCount; ++n)
+ {
+ if (mString[n] <= 0xff && isprint(mString[n]))
+ {
+ sal_Unicode nC = mString[n];
+
+ if (nC < 256)
+ result += sal::static_int_cast<char>(nC);
+ else
+ result += ".";
+ }
+ else
+ {
+ char sBuffer[64];
+
+ snprintf(sBuffer, sizeof(sBuffer), "\\u%04x", mString[n]);
+ result += sBuffer;
+ }
+ }
+
+ return result;
+}
+
+WW8Value::Pointer_t createValue(const rtl::OUString & rStr)
+{
+ return WW8Value::Pointer_t(new WW8StringValue(rStr));
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8PropertiesValue::getProperties()
+{
+ return mRef;
+}
+
+string WW8PropertiesValue::toString() const
+{
+ return "properties";
+}
+
+writerfilter::Reference<Stream>::Pointer_t WW8StreamValue::getStream()
+{
+ return mRef;
+}
+
+string WW8StreamValue::toString() const
+{
+ return "stream";
+}
+
+writerfilter::Reference<BinaryObj>::Pointer_t WW8BinaryObjValue::getBinary()
+{
+ return mRef;
+}
+
+string WW8BinaryObjValue::toString() const
+{
+ return "binaryObj";
+}
+
+WW8Value::Pointer_t createValue
+(writerfilter::Reference<Properties>::Pointer_t rRef)
+{
+ return WW8Value::Pointer_t(new WW8PropertiesValue(rRef));
+}
+
+WW8Value::Pointer_t createValue(writerfilter::Reference<Stream>::Pointer_t rRef)
+{
+ return WW8Value::Pointer_t(new WW8StreamValue(rRef));
+}
+
+WW8Value::Pointer_t createValue
+(writerfilter::Reference<BinaryObj>::Pointer_t rRef)
+{
+ return WW8Value::Pointer_t(new WW8BinaryObjValue(rRef));
+}
+
+
+}
+
+}
+
diff --git a/writerfilter/source/doctok/WW8ResourceModelImpl.hxx b/writerfilter/source/doctok/WW8ResourceModelImpl.hxx
new file mode 100644
index 000000000000..d7eba5ba67a2
--- /dev/null
+++ b/writerfilter/source/doctok/WW8ResourceModelImpl.hxx
@@ -0,0 +1,318 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_RESOURCE_MODEL_IMPL_HXX
+#define INCLUDED_WW8_RESOURCE_MODEL_IMPL_HXX
+
+#include <doctok/WW8Document.hxx>
+
+#ifndef INCLUDED_WW8_RESOURCE_MODEL_HXX
+#include <resourcemodel/WW8ResourceModel.hxx>
+#endif
+#include <WW8StructBase.hxx>
+
+#ifndef INCLUDED_OUTPUT_WITH_DEPTH_HXX
+#include <resourcemodel/OutputWithDepth.hxx>
+#endif
+
+#include <map>
+
+namespace writerfilter {
+namespace doctok
+{
+using namespace ::std;
+
+class WW8PropertiesReference : public writerfilter::Reference<Properties>
+{
+ WW8PropertySet::Pointer_t mpPropSet;
+
+public:
+
+ WW8PropertiesReference(WW8PropertySet::Pointer_t pPropSet)
+ : mpPropSet(pPropSet)
+ {
+ }
+
+ ~WW8PropertiesReference()
+ {
+ }
+
+ virtual void resolve(Properties & rHandler);
+
+ virtual string getType() const;
+};
+
+class WW8TableReference : public writerfilter::Reference<Table>
+{
+public:
+ WW8TableReference()
+ {
+ }
+
+ ~WW8TableReference()
+ {
+ }
+
+ virtual void resolve(Table & rHandler);
+
+ virtual string getType() const;
+};
+
+class WW8BinaryObjReference : public writerfilter::Reference<BinaryObj>,
+ public WW8StructBase
+{
+public:
+ typedef boost::shared_ptr<WW8BinaryObjReference> Pointer_t;
+ WW8BinaryObjReference(WW8Stream & rStream, sal_uInt32 nOffset,
+ sal_uInt32 nCount);
+ WW8BinaryObjReference(WW8StructBase & rParent, sal_uInt32 nOffset,
+ sal_uInt32 nCount);
+ WW8BinaryObjReference(WW8StructBase * pParent, sal_uInt32 nOffset,
+ sal_uInt32 nCount);
+ WW8BinaryObjReference(WW8StructBase * pParent);
+
+ WW8BinaryObjReference()
+ : WW8StructBase(WW8StructBase::Sequence())
+ {
+ }
+
+ ~WW8BinaryObjReference()
+ {
+ }
+
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary();
+
+ virtual void resolve(BinaryObj & rHandler);
+
+ virtual string getType() const;
+
+ virtual WW8BinaryObjReference * clone() { return new WW8BinaryObjReference(*this); }
+};
+
+class WW8Sprm : public Sprm
+{
+ WW8Property::Pointer_t mpProperty;
+ WW8BinaryObjReference::Pointer_t mpBinary;
+
+public:
+ WW8Sprm(WW8Property::Pointer_t pProperty)
+ : mpProperty(pProperty)
+ {
+ }
+
+ WW8Sprm(WW8BinaryObjReference::Pointer_t pBinary)
+ : mpBinary(pBinary)
+ {
+ }
+
+ WW8Sprm()
+ {
+ }
+
+ WW8Sprm(const WW8Sprm & rSprm)
+ : Sprm(rSprm), mpProperty(rSprm.mpProperty), mpBinary(rSprm.mpBinary)
+ {
+ }
+
+ virtual ~WW8Sprm()
+ {
+ }
+
+ virtual Value::Pointer_t getValue();
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary();
+ virtual writerfilter::Reference<Stream>::Pointer_t getStream();
+ virtual writerfilter::Reference<Properties>::Pointer_t getProps();
+ virtual Kind getKind();
+
+ virtual sal_uInt32 getId() const;
+ virtual string toString() const;
+ virtual string getName() const;
+
+ virtual WW8Sprm * clone() const { return new WW8Sprm(*this); }
+};
+
+class WW8Value : public Value
+{
+public:
+ WW8Value() {}
+ virtual ~WW8Value() {}
+
+ virtual string toString() const;
+ virtual int getInt() const;
+ virtual ::rtl::OUString getString() const;
+ virtual uno::Any getAny() const;
+ virtual writerfilter::Reference<Properties>::Pointer_t getProperties();
+ virtual writerfilter::Reference<Stream>::Pointer_t getStream();
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary();
+ virtual WW8Value * clone() const = 0;
+};
+
+class WW8IntValue : public WW8Value
+{
+ int mValue;
+public:
+ WW8IntValue(int value) : mValue(value) {}
+ virtual ~WW8IntValue() {}
+
+ virtual int getInt() const;
+ virtual ::rtl::OUString getString() const;
+ virtual uno::Any getAny() const;
+
+ virtual string toString() const;
+
+ virtual WW8Value * clone() const { return new WW8IntValue(*this); }
+};
+
+/**
+ Creates value from an integer.
+
+ @param value integer to create value from.
+*/
+WW8Value::Pointer_t createValue(int value);
+
+ostream & operator << (ostream & o, const WW8Value & rValue);
+
+class WW8StringValue : public WW8Value
+{
+ ::rtl::OUString mString;
+
+public:
+ WW8StringValue(::rtl::OUString string_) : mString(string_) {}
+ virtual ~WW8StringValue() {}
+
+ virtual int getInt() const;
+ virtual ::rtl::OUString getString() const;
+ virtual uno::Any getAny() const;
+
+ virtual string toString() const;
+
+ virtual WW8Value * clone() const { return new WW8StringValue(*this); }
+};
+
+/**
+ Creates value from a string.
+
+ @param rStr string to create value from.
+*/
+WW8Value::Pointer_t createValue(const rtl::OUString & rStr);
+
+class WW8PropertiesValue : public WW8Value
+{
+ mutable writerfilter::Reference<Properties>::Pointer_t mRef;
+
+public:
+ WW8PropertiesValue(writerfilter::Reference<Properties>::Pointer_t rRef)
+ : mRef(rRef)
+ {
+ }
+
+ virtual ~WW8PropertiesValue()
+ {
+ }
+
+ virtual writerfilter::Reference<Properties>::Pointer_t getProperties();
+
+ virtual string toString() const;
+
+ virtual WW8Value * clone() const { return new WW8PropertiesValue(mRef); }
+};
+
+class WW8StreamValue : public WW8Value
+{
+ mutable writerfilter::Reference<Stream>::Pointer_t mRef;
+
+public:
+ WW8StreamValue(writerfilter::Reference<Stream>::Pointer_t rRef)
+ : mRef(rRef)
+ {
+ }
+
+ virtual ~WW8StreamValue()
+ {
+ }
+
+ virtual writerfilter::Reference<Stream>::Pointer_t getStream();
+
+ virtual string toString() const;
+
+ virtual WW8Value * clone() const { return new WW8StreamValue(mRef); }
+};
+
+/**
+ Creates value from a properties reference.
+
+ @param rRef reference to create value from.
+*/
+WW8Value::Pointer_t createValue(writerfilter::Reference<Properties>::Pointer_t rRef);
+
+/**
+ Creates value from another value.
+
+ @param value the value to copy
+*/
+WW8Value::Pointer_t createValue(WW8Value::Pointer_t value);
+
+/**
+ Creates value from a stream reference.
+
+ @param rRef reference to the stream
+ */
+WW8Value::Pointer_t createValue(writerfilter::Reference<Stream>::Pointer_t rRef);
+
+class WW8BinaryObjValue : public WW8Value
+{
+ mutable writerfilter::Reference<BinaryObj>::Pointer_t mRef;
+
+public:
+ WW8BinaryObjValue(writerfilter::Reference<BinaryObj>::Pointer_t rRef)
+ : mRef(rRef)
+ {
+ }
+
+ virtual ~WW8BinaryObjValue()
+ {
+ }
+
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary();
+
+ virtual string toString() const;
+
+ virtual WW8Value * clone() const { return new WW8BinaryObjValue(mRef); }
+};
+
+/**
+ Creates value from a binary object reference.
+
+ @param rRef reference to the stream
+ */
+WW8Value::Pointer_t createValue(writerfilter::Reference<BinaryObj>::Pointer_t rRef);
+
+Sprm::Kind SprmKind(sal_uInt32 sprmCode);
+
+}}
+
+#endif // INCLUDED_WW8_RESOURCE_MODEL_IMPL_HXX
diff --git a/writerfilter/source/doctok/WW8StreamImpl.cxx b/writerfilter/source/doctok/WW8StreamImpl.cxx
new file mode 100644
index 000000000000..4418839919d4
--- /dev/null
+++ b/writerfilter/source/doctok/WW8StreamImpl.cxx
@@ -0,0 +1,205 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <WW8StreamImpl.hxx>
+
+#include <com/sun/star/uno/Reference.h>
+#include <com/sun/star/io/XSeekable.hpp>
+#include <com/sun/star/io/XStream.hpp>
+#include <com/sun/star/lang/XMultiComponentFactory.hpp>
+
+#include <doctokLoggers.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+using namespace ::com::sun::star;
+
+ TagLogger::Pointer_t debug_logger(TagLogger::getInstance("DEBUG"));
+
+WW8Stream::~WW8Stream()
+{
+}
+
+WW8StreamImpl::WW8StreamImpl(uno::Reference<uno::XComponentContext> rContext,
+ uno::Reference<io::XInputStream> rStream)
+: mrComponentContext(rContext), mrStream(rStream)
+{
+ xFactory = uno::Reference<lang::XMultiComponentFactory>
+ (mrComponentContext->getServiceManager());
+
+ uno::Sequence<uno::Any> aArgs( 1 );
+ aArgs[0] <<= mrStream;
+
+ xOLESimpleStorage = uno::Reference<container::XNameContainer>
+ (xFactory->createInstanceWithArgumentsAndContext
+ (::rtl::OUString::createFromAscii
+ ("com.sun.star.embed.OLESimpleStorage"),
+ aArgs, mrComponentContext ),
+ uno::UNO_QUERY );
+
+}
+
+WW8StreamImpl::~WW8StreamImpl()
+{
+}
+
+WW8Stream::Sequence WW8StreamImpl::get(sal_uInt32 nOffset,
+ sal_uInt32 nCount) const
+{
+ uno::Sequence<sal_Int8> aSequence;
+
+ if (nCount > 0)
+ {
+ uno::Reference< io::XSeekable > xSeek( mrStream, uno::UNO_QUERY_THROW );
+
+ xSeek->seek(nOffset);
+
+ sal_Int32 nRead = mrStream->readBytes(aSequence, nCount);
+
+ Sequence aReturnSequence(const_cast<const sal_uInt8 *>
+ (reinterpret_cast<sal_uInt8 *>
+ (&(aSequence[0]))), nRead);
+
+ return aReturnSequence;
+ }
+
+ return WW8Stream::Sequence();
+}
+
+WW8Stream::Pointer_t WW8StreamImpl::getSubStream(const ::rtl::OUString & sId)
+{
+ WW8Stream::Pointer_t pResult;
+
+ try
+ {
+ if (xOLESimpleStorage.is())
+ {
+ if (xOLESimpleStorage->hasByName(sId))
+ {
+ uno::Reference<io::XStream> xNewStream;
+ {
+ uno::Any aValue = xOLESimpleStorage->getByName(sId);
+ aValue >>= xNewStream;
+ }
+
+ if (xNewStream.is())
+ {
+ WW8Stream::Pointer_t
+ pNew(new WW8StreamImpl(mrComponentContext,
+ xNewStream->getInputStream()));
+
+ pResult = pNew;
+ }
+ }
+ }
+ }
+ catch (...)
+ {
+ }
+
+ if (pResult.get() == NULL)
+ throw ExceptionNotFound("Stream not found");
+
+ return pResult;
+}
+
+string WW8StreamImpl::getSubStreamNames() const
+{
+ string sResult;
+
+ if (xOLESimpleStorage.is())
+ {
+ uno::Sequence<rtl::OUString> aSeq = xOLESimpleStorage->getElementNames();
+
+ for (sal_uInt32 n = 0;
+ n < sal::static_int_cast<sal_uInt32>(aSeq.getLength()); ++n)
+ {
+ rtl::OUString aOUStr = aSeq[n];
+
+ if (n > 0)
+ sResult += ", ";
+
+#if 0
+ rtl::OString aOStr;
+ aOUStr.convertToString(&aOStr, RTL_TEXTENCODING_ASCII_US,
+ OUSTRING_TO_OSTRING_CVTFLAGS);
+
+
+ sResult += aOStr.getStr();
+#endif
+ char sBuffer[256];
+ for (sal_uInt32 j = 0;
+ j < sal::static_int_cast<sal_uInt32>(aOUStr.getLength()); ++j)
+ {
+ if (isprint(aOUStr[j]))
+ {
+ sal_Unicode nC = aOUStr[j];
+
+ if (nC < 255)
+ sResult += sal::static_int_cast<char>(nC);
+ else
+ sResult += ".";
+ }
+ else
+ {
+ snprintf(sBuffer, sizeof(sBuffer), "\\u%x", aOUStr[j]);
+ sResult += sBuffer;
+ }
+ }
+ }
+ }
+
+ return sResult;
+}
+
+uno::Sequence<rtl::OUString> WW8StreamImpl::getSubStreamUNames() const
+{
+ return xOLESimpleStorage->getElementNames();
+}
+
+void WW8StreamImpl::dump(OutputWithDepth<string> & o) const
+{
+ o.addItem("<stream>");
+
+ Sequence aSeq;
+ sal_uInt32 nOffset = 0;
+ sal_uInt32 nStep = 16;
+
+ do
+ {
+ aSeq = get(nOffset, nStep);
+ dumpLine(o, aSeq, nOffset, nStep);
+
+ nOffset += nStep;
+ }
+ while (aSeq.getCount() == nStep);
+
+ o.addItem("</stream>");
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8StreamImpl.hxx b/writerfilter/source/doctok/WW8StreamImpl.hxx
new file mode 100644
index 000000000000..2f1a0b0b234e
--- /dev/null
+++ b/writerfilter/source/doctok/WW8StreamImpl.hxx
@@ -0,0 +1,65 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <doctok/WW8Document.hxx>
+#ifndef INCLUDED_OUTPUT_WITH_DEPTH_HXX
+#include <resourcemodel/OutputWithDepth.hxx>
+#endif
+
+namespace writerfilter {
+namespace doctok
+{
+using namespace ::com::sun::star;
+
+class WW8StreamImpl : public WW8Stream
+{
+ uno::Reference<uno::XComponentContext> mrComponentContext;
+ uno::Reference<io::XInputStream> mrStream;
+ uno::Reference<container::XNameContainer> xOLESimpleStorage;
+ uno::Reference<lang::XMultiComponentFactory> xFactory;
+
+public:
+ WW8StreamImpl(uno::Reference<uno::XComponentContext> rContext,
+ uno::Reference<io::XInputStream> rStream);
+ virtual ~WW8StreamImpl();
+
+ virtual WW8Stream::Pointer_t getSubStream(const ::rtl::OUString & rId);
+
+ virtual Sequence get(sal_uInt32 nOffset, sal_uInt32 nCount)
+ const;
+
+ //virtual bool put(sal_uInt32 nOffset, const Sequence & rSeq);
+
+ virtual string getSubStreamNames() const;
+ virtual uno::Sequence<rtl::OUString> getSubStreamUNames() const;
+
+ virtual void dump(OutputWithDepth<string> & o) const;
+};
+}}
diff --git a/writerfilter/source/doctok/WW8StructBase.cxx b/writerfilter/source/doctok/WW8StructBase.cxx
new file mode 100644
index 000000000000..e4149ca29874
--- /dev/null
+++ b/writerfilter/source/doctok/WW8StructBase.cxx
@@ -0,0 +1,191 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <WW8StructBase.hxx>
+#include <util.hxx>
+
+namespace writerfilter {
+namespace doctok {
+using namespace ::com::sun::star;
+
+WW8StructBase::WW8StructBase(const WW8StructBase & rParent,
+ sal_uInt32 nOffset, sal_uInt32 nCount)
+: mSequence(rParent.mSequence, nOffset, nCount), mpParent(0),
+ mpDocument(rParent.getDocument())
+{
+ if (nOffset + nCount > rParent.getCount())
+ {
+ throw ExceptionOutOfBounds("WW8StructBase");
+ }
+}
+
+WW8StructBase & WW8StructBase::Assign(const WW8StructBase & rSrc)
+{
+ mSequence = rSrc.mSequence;
+ mpDocument = rSrc.mpDocument;
+
+ return *this;
+}
+
+void WW8StructBase::setDocument(WW8DocumentImpl * pDocument)
+{
+ mpDocument = pDocument;
+}
+
+WW8DocumentImpl * WW8StructBase::getDocument() const
+{
+ return mpDocument;
+}
+
+sal_uInt8 WW8StructBase::getU8(sal_uInt32 nOffset) const
+{
+ return doctok::getU8(mSequence, nOffset);
+}
+
+sal_uInt16 WW8StructBase::getU16(sal_uInt32 nOffset) const
+{
+ return doctok::getU16(mSequence, nOffset);
+}
+
+sal_uInt32 WW8StructBase::getU32(sal_uInt32 nOffset) const
+{
+ return doctok::getU32(mSequence, nOffset);
+}
+
+sal_Bool WW8StructBase::getBit(sal_uInt32 nValue, sal_uInt16 nBit) const
+{
+ return (nValue & (1 << nBit)) != 0;
+}
+
+sal_uInt8 WW8StructBase::getNibble(sal_uInt32 nValue,
+ sal_uInt16 nShift) const
+{
+ return sal::static_int_cast<sal_uInt8>((nValue >> nShift) & 0xf);
+}
+
+sal_uInt8 getU8(const WW8StructBase::Sequence & rSeq,
+ sal_uInt32 nOffset)
+{
+ return rSeq[nOffset];
+}
+
+sal_uInt16 getU16(const WW8StructBase::Sequence & rSeq,
+ sal_uInt32 nOffset)
+{
+ return getU8(rSeq, nOffset) | (getU8(rSeq, nOffset + 1) << 8);
+}
+
+sal_uInt32 getU32(const WW8StructBase::Sequence & rSeq,
+ sal_uInt32 nOffset)
+{
+ sal_uInt32 nResult = getU8(rSeq, nOffset);
+ nResult |= (getU8(rSeq, nOffset + 1) << 8);
+ nResult |= (getU8(rSeq, nOffset + 2) << 16);
+ nResult |= (getU8(rSeq, nOffset + 3) << 24);
+
+ return nResult;
+}
+
+rtl::OUString WW8StructBase::getString(sal_uInt32 nOffset, sal_uInt32 nCount)
+ const
+{
+ rtl::OUString aResult;
+
+ Sequence aSeq(mSequence, nOffset, nCount * 2);
+
+ if (nCount > 0)
+ {
+ rtl_uString * pNew = 0;
+ rtl_uString_newFromStr_WithLength
+ (&pNew, reinterpret_cast<const sal_Unicode *>(&aSeq[0]),
+ nCount);
+
+ aResult = rtl::OUString(pNew);
+ }
+
+ return aResult;
+}
+
+WW8StructBase *
+WW8StructBase::getRemainder(sal_uInt32 nOffset) const
+{
+ WW8StructBase * pResult = NULL;
+
+ sal_uInt32 nCount = getCount();
+ if (nCount > nOffset)
+ {
+ pResult = new WW8StructBase(*this, nOffset, nCount - nOffset);
+ }
+
+ return pResult;
+}
+
+
+rtl::OUString WW8StructBase::getString(sal_uInt32 nOffset) const
+{
+ sal_uInt32 nCount = getU16(nOffset);
+
+ return getString(nOffset + 2, nCount);
+}
+
+WW8StructBaseTmpOffset::WW8StructBaseTmpOffset
+(WW8StructBase * pStructBase)
+: mnOffset(0), mpStructBase(pStructBase)
+{
+}
+
+sal_uInt32 WW8StructBaseTmpOffset::set(sal_uInt32 nOffset)
+{
+ if (nOffset >= mpStructBase->getCount())
+ throw ExceptionOutOfBounds("WW8StructBaseTmpOffset::set");
+
+ mnOffset = nOffset;
+
+ return mnOffset;
+}
+
+sal_uInt32 WW8StructBaseTmpOffset::get() const
+{
+ return mnOffset;
+}
+
+sal_uInt32 WW8StructBaseTmpOffset::inc(sal_uInt32 nOffset)
+{
+ if (mpStructBase->getCount() - mnOffset < nOffset)
+ throw ExceptionOutOfBounds("WW8StructBaseTmpOffset::inc");
+
+ mnOffset += nOffset;
+
+ return mnOffset;
+}
+
+WW8StructBaseTmpOffset::operator sal_uInt32() const
+{
+ return mnOffset;
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8StructBase.hxx b/writerfilter/source/doctok/WW8StructBase.hxx
new file mode 100644
index 000000000000..0a1f7949fabf
--- /dev/null
+++ b/writerfilter/source/doctok/WW8StructBase.hxx
@@ -0,0 +1,316 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_STRUCT_BASE_HXX
+#define INCLUDED_WW8_STRUCT_BASE_HXX
+
+#include <boost/shared_ptr.hpp>
+#include <doctok/WW8Document.hxx>
+#include <resourcemodel/OutputWithDepth.hxx>
+
+namespace writerfilter {
+namespace doctok {
+
+class WW8DocumentImpl;
+
+/**
+ Part of a stream.
+
+ A part can have a parent, meaning its sequence of data is a
+ subsequence of its parent's sequence of data.
+ */
+class WW8StructBase
+{
+public:
+ typedef SubSequence<sal_uInt8> Sequence;
+ typedef boost::shared_ptr<WW8StructBase> Pointer_t;
+
+protected:
+ /**
+ Stream this part was created from.
+ */
+ ::com::sun::star::uno::Reference<com::sun::star::io::
+ XInputStream> mrStream;
+
+ /**
+ The data.
+ */
+ mutable Sequence mSequence;
+
+ /**
+ This part's parent.
+ */
+ WW8StructBase * mpParent;
+
+ /**
+ This part's offset in parent.
+ */
+ sal_uInt32 mnOffsetInParent;
+
+ /**
+ The document of this struct.
+ */
+ WW8DocumentImpl * mpDocument;
+
+public:
+ WW8StructBase(sal_Int32 nLength)
+ : mSequence(nLength)
+ {
+ }
+
+ /**
+ Creates a part from a steam.
+
+ @param rStream the stream
+ @param nOffset offset in @a rStream to start at
+ @param nCount count of bytes in the new part
+ */
+ WW8StructBase(WW8Stream & rStream,
+ sal_Int32 nOffset, sal_Int32 nCount)
+ : mSequence(rStream.get(nOffset, nCount)), mpParent(0), mpDocument(0)
+ {
+ }
+
+ /**
+ Creates a part from a sequence.
+
+ @param rSequence the sequence
+ @param nOffset offset in @a rSequence to start at
+ @param nCount count of bytes in the new part
+ */
+ WW8StructBase(const Sequence & rSequence, sal_uInt32 nOffset = 0,
+ sal_uInt32 nCount = 0)
+ : mSequence(rSequence, nOffset, nCount), mpParent(0), mpDocument(0)
+ {
+ }
+
+ /**
+ Creates a part from a parent part.
+
+ @param pParent the parent
+ @param nOffset offset in @a pParent to start at
+ @param nCount count of bytes in the new part
+ */
+ WW8StructBase(const WW8StructBase & rParent,
+ sal_uInt32 nOffset, sal_uInt32 nCount);
+
+ /**
+ Creates a part from a parent part.
+
+ @param pParent the parent
+ @param nOffset offset in @a pParent to start at
+ @param nCount count of bytes in the new part
+ */
+ WW8StructBase(WW8StructBase * pParent,
+ sal_uInt32 nOffset, sal_uInt32 nCount)
+ : mSequence(pParent->mSequence, nOffset, nCount), mpParent(pParent),
+ mnOffsetInParent(nOffset), mpDocument(pParent->getDocument())
+ {
+ if (nOffset + nCount > pParent->mSequence.getCount())
+ throw ExceptionOutOfBounds("WW8StructBase");
+ }
+
+
+ virtual ~WW8StructBase()
+ {
+ }
+
+ /**
+ Assign a part to this part.
+
+ After assignment this part has the same content as the assigned
+ part.
+
+ @param rSrc part to assign
+
+ @return this part after assignment
+ */
+ virtual WW8StructBase & Assign(const WW8StructBase & rSrc);
+
+ /**
+ Set the document of this struct.
+ */
+ void setDocument(WW8DocumentImpl * pDocument);
+
+ /**
+ Return the document of this struct.
+ */
+ WW8DocumentImpl * getDocument() const;
+
+ /**
+ Return count of bytes in this part.
+ */
+ sal_uInt32 getCount() const { return mSequence.getCount(); }
+
+ /**
+ Return unsigned byte value at an offset.
+
+ @param offset offset to get value from
+ */
+ sal_uInt8 getU8(sal_uInt32 nOffset) const;
+
+ /**
+ Return unsigned 16-bit value at an offset.
+
+ @param offset offset to get value from
+ */
+ sal_uInt16 getU16(sal_uInt32 nOffset) const;
+
+ /**
+ Return unsigned 32-bit value at an offset.
+
+ @param offset offset to get value from
+ */
+ sal_uInt32 getU32(sal_uInt32 nOffset) const;
+
+ /**
+ Return signed 8-bit value at an offset.
+
+ @param offset offset to get value from
+ */
+ sal_Int8 getS8(sal_uInt32 nOffset) const
+ { return (sal_Int8) getU8(nOffset); }
+
+ /**
+ Return signed 16-bit value at an offset.
+
+ @param offset offset to get value from
+ */
+ sal_Int16 getS16(sal_uInt32 nOffset) const
+ {return (sal_Int16) getU16(nOffset); }
+
+ /**
+ Return signed 32-bit value at an offset.
+
+ @param offset offset to get value from
+ */
+ sal_Int32 getS32(sal_uInt32 nOffset) const
+ { return (sal_Int32) getU32(nOffset); }
+
+ /**
+ Return bit value from a 32-bit unsigned value.
+
+ @param nValue value to retreive bit from
+ @param nBit number of bit to retreive (0 = least significant)
+ */
+ sal_Bool getBit(sal_uInt32 nValue, sal_uInt16 nBit) const;
+
+ /**
+ Return nibble from a 32-bit unsigned value.
+
+ @param nValue value to retreive nibble from (most significant bit left)
+ @param nShift amount of bits to shift right before returning least significant nibble
+ */
+ sal_uInt8 getNibble(sal_uInt32 nValue, sal_uInt16 nShift) const;
+
+ /**
+ Returns byte at an index.
+
+ @param nIndex index in this part of the byte to return
+ */
+ const sal_uInt8 * get(sal_uInt32 nIndex) const
+ { return &((mSequence.getSequence())[nIndex + mSequence.getOffset()]); }
+
+ /**
+ Returns two byte character string starting at an offset.
+
+ The string has to be Pascal like, e.g. the first word contains
+ the lengthof the string in characters and is followed by the
+ string's characters.
+
+ @param nOffset offset the string starts at
+
+ @return the string
+ */
+ rtl::OUString getString(sal_uInt32 nOffset) const;
+
+ /**
+ Returns binary object for remainder of this WW8StructBase
+
+ @param nOffset offset where remainder starts
+ */
+ WW8StructBase * getRemainder(sal_uInt32 nOffset) const;
+
+ /**
+ Returns two byte character string starting at an offset with a
+ given length.
+
+ @param nOffset offset the string starts at
+ @param nLength number of characters in the string
+ */
+ rtl::OUString getString(sal_uInt32 nOffset, sal_uInt32) const;
+
+ /**
+ Dump the part.
+
+ @param o stream to dump to
+ */
+ virtual void dump(OutputWithDepth<string> & o) const { mSequence.dump(o); }
+};
+
+class WW8StructBaseTmpOffset
+{
+ sal_uInt32 mnOffset;
+ WW8StructBase * mpStructBase;
+
+public:
+ WW8StructBaseTmpOffset(WW8StructBase * pStructBase);
+
+ sal_uInt32 set(sal_uInt32 nOffset);
+ sal_uInt32 get() const;
+ sal_uInt32 inc(sal_uInt32 nOffset);
+
+ operator sal_uInt32 () const;
+};
+
+/**
+ Return unsigned byte from a sequence.
+
+ @param rSeq sequence to get value from
+ @param nOffset offset in sequence to get value from
+ */
+sal_uInt8 getU8(const WW8StructBase::Sequence & rSeq, sal_uInt32 nOffset);
+
+/**
+ Return unsigned 16-bit value from a sequence.
+
+ @param rSeq sequence to get value from
+ @param nOffset offset in sequence to get value from
+ */
+sal_uInt16 getU16(const WW8StructBase::Sequence & rSeq, sal_uInt32 nOffset);
+
+/**
+ Return unsigned 32-bit value from a sequence.
+
+ @param rSeq sequence to get value from
+ @param nOffset offset in sequence to get value from
+ */
+sal_uInt32 getU32(const WW8StructBase::Sequence & rSeq, sal_uInt32 nOffset);
+
+}}
+
+#endif // INCLUDED_WW8_STRUCT_BASE_HXX
diff --git a/writerfilter/source/doctok/WW8Sttbf.cxx b/writerfilter/source/doctok/WW8Sttbf.cxx
new file mode 100644
index 000000000000..e5d87b9aeaa0
--- /dev/null
+++ b/writerfilter/source/doctok/WW8Sttbf.cxx
@@ -0,0 +1,89 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <WW8Sttbf.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+
+WW8Sttbf::WW8Sttbf(WW8Stream & rStream, sal_uInt32 nOffset, sal_uInt32 nCount)
+: WW8StructBase(rStream, nOffset, nCount)
+{
+ sal_uInt32 nComplexOffset = 0;
+ if (getU16(0) == 0xffff)
+ {
+ mbComplex = true;
+ nComplexOffset = 2;
+ }
+
+ mnCount = getU16(nComplexOffset);
+ mnExtraDataCount = getU16(nComplexOffset + 2);
+
+ nOffset = (mbComplex ? 2 : 0) + 4;
+
+ for (sal_uInt32 n = 0; n < mnCount; ++n)
+ {
+ mEntryOffsets.push_back(nOffset);
+
+ sal_uInt32 nStringLength = getU16(nOffset);
+
+ nOffset += 2 + nStringLength * (mbComplex ? 2 : 1);
+
+ mExtraOffsets.push_back(nOffset);
+
+ nOffset += mnExtraDataCount;
+ }
+}
+
+sal_uInt32 WW8Sttbf::getEntryOffset(sal_uInt32 nPos) const
+{
+ return mEntryOffsets[nPos];
+}
+
+sal_uInt32 WW8Sttbf::getExtraOffset(sal_uInt32 nPos) const
+{
+ return mExtraOffsets[nPos];
+}
+
+sal_uInt32 WW8Sttbf::getEntryCount() const
+{
+ return mnCount;
+}
+
+rtl::OUString WW8Sttbf::getEntry(sal_uInt32 nPos) const
+{
+ return getString(getEntryOffset(nPos));
+}
+
+WW8StructBase::Pointer_t WW8Sttbf::getExtraData(sal_uInt32 nPos)
+{
+ return WW8StructBase::Pointer_t
+ (new WW8StructBase(*this, getExtraOffset(nPos), mnExtraDataCount));
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8Sttbf.hxx b/writerfilter/source/doctok/WW8Sttbf.hxx
new file mode 100644
index 000000000000..2cdae76d7e11
--- /dev/null
+++ b/writerfilter/source/doctok/WW8Sttbf.hxx
@@ -0,0 +1,103 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_STTBF_HXX
+#define INCLUDED_WW8_STTBF_HXX
+
+#include <WW8StructBase.hxx>
+
+#include <boost/shared_ptr.hpp>
+#include <vector>
+
+namespace writerfilter {
+namespace doctok
+{
+
+using namespace ::std;
+
+/**
+ A string table in file.
+
+ The string table contains strings that each can have extra data.
+ */
+class WW8Sttbf : public WW8StructBase
+{
+ /// true if strings contain two-byte characters
+ bool mbComplex;
+
+ /// the number of entries
+ sal_uInt32 mnCount;
+
+ /// the size of the extra data (per string)
+ sal_uInt32 mnExtraDataCount;
+
+ /// offsets for the strings
+ vector<sal_uInt32> mEntryOffsets;
+
+ /// offsets for the extra data
+ vector<sal_uInt32> mExtraOffsets;
+
+ /**
+ Return offset of an entry.
+
+ @param nPos the index of the entry
+ */
+ sal_uInt32 getEntryOffset(sal_uInt32 nPos) const;
+
+ /**
+ Return offset of extra data of an entry.
+
+ @param nPos the index of the entry
+ */
+ sal_uInt32 getExtraOffset(sal_uInt32 nPos) const;
+
+public:
+ typedef boost::shared_ptr<WW8Sttbf> Pointer_t;
+
+ WW8Sttbf(WW8Stream & rStream, sal_uInt32 nOffset, sal_uInt32 nCount);
+
+ /**
+ Return the number of entries.
+ */
+ sal_uInt32 getEntryCount() const;
+
+ /**
+ Return the string of an entry.
+
+ @param nPos the index of the entry
+ */
+ rtl::OUString getEntry(sal_uInt32 nPos) const;
+
+ /**
+ Return the extra data of an entry.
+
+ @param nPos the index of the entry
+ */
+ WW8StructBase::Pointer_t getExtraData(sal_uInt32 nPos);
+};
+}}
+#endif // INCLUDED_WW8_STTBF
diff --git a/writerfilter/source/doctok/WW8StyleSheet.cxx b/writerfilter/source/doctok/WW8StyleSheet.cxx
new file mode 100644
index 000000000000..797554f984e3
--- /dev/null
+++ b/writerfilter/source/doctok/WW8StyleSheet.cxx
@@ -0,0 +1,211 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <resources.hxx>
+
+namespace writerfilter {
+namespace doctok {
+
+void WW8StyleSheet::initPayload()
+{
+ sal_uInt32 nCount = getEntryCount();
+
+ sal_uInt32 nOffset = get_size() + 2;
+ for (sal_uInt32 n = 0; n < nCount; ++n)
+ {
+ entryOffsets.push_back(nOffset);
+
+ sal_uInt32 cbStd = getU16(nOffset);
+ nOffset += cbStd + 2;
+ }
+
+ entryOffsets.push_back(nOffset);
+}
+
+sal_uInt32 WW8StyleSheet::calcPayloadOffset()
+{
+ return 0;
+}
+
+sal_uInt32 WW8StyleSheet::calcSize()
+{
+ return getCount();
+}
+
+sal_uInt32 WW8StyleSheet::getEntryCount()
+{
+ return get_cstd();
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8StyleSheet::getEntry(sal_uInt32 nIndex)
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ sal_uInt32 nCount = entryOffsets[nIndex + 1] - entryOffsets[nIndex];
+
+ if (nCount > get_cbSTDBaseInFile() + 2U)
+ {
+ WW8Style * pStyle = new WW8Style(this, entryOffsets[nIndex], nCount);
+
+ pStyle->setIndex(nIndex);
+
+ pResult = writerfilter::Reference<Properties>::Pointer_t(pStyle);
+ }
+
+ return pResult;
+}
+
+rtl::OUString WW8Style::get_xstzName()
+{
+ sal_uInt32 nCount = getU8(0xc);
+
+ if (nCount > 0)
+ {
+ Sequence aSeq(mSequence, 0xe, nCount * 2);
+
+ rtl_uString * pNew = 0;
+ rtl_uString_newFromStr
+ (&pNew, reinterpret_cast<const sal_Unicode *>(&aSeq[0]));
+
+ return rtl::OUString(pNew);
+
+ }
+
+ return get_xstzName1();
+}
+
+rtl::OUString WW8Style::get_xstzName1()
+{
+ WW8StyleSheet * pParentStyleSheet = dynamic_cast<WW8StyleSheet *>(mpParent);
+
+ if (mpParent != NULL)
+ {
+ sal_uInt32 nOffset = pParentStyleSheet->get_cbSTDBaseInFile() + 2;
+
+ if (nOffset < getCount())
+ {
+ sal_uInt32 nCount = getU16(nOffset);
+
+ if (nCount > 0)
+ {
+ Sequence aSeq(mSequence, nOffset + 2, nCount * 2);
+
+ rtl_uString * pNew = 0;
+ rtl_uString_newFromStr
+ (&pNew, reinterpret_cast<const sal_Unicode *>(&aSeq[0]));
+
+ return rtl::OUString(pNew);
+
+ }
+ }
+ }
+
+ return rtl::OUString();
+}
+
+sal_uInt32 WW8Style::get_upxstart()
+{
+ sal_uInt32 nResult = 0;
+ sal_uInt32 nCount = getU8(0xc);
+
+ if (nCount > 0)
+ {
+ nResult = 0xc + 1 + nCount * 2;
+
+ nResult += nResult % 2;
+ }
+ else
+ {
+ WW8StyleSheet * pParentStyleSheet =
+ dynamic_cast<WW8StyleSheet *>(mpParent);
+
+ nResult = pParentStyleSheet->get_cbSTDBaseInFile() + 2;
+
+ if (nResult < getCount())
+ {
+ sal_uInt32 nCountTmp = getU16(nResult);
+
+ nResult += 4 + nCountTmp * 2;
+ }
+ }
+
+ return nResult;
+}
+
+sal_uInt32 WW8Style::get_upx_count()
+{
+ return get_cupx();
+}
+
+writerfilter::Reference<Properties>::Pointer_t WW8Style::get_upx
+(sal_uInt32 nIndex)
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ WW8StructBaseTmpOffset aOffset(this);
+
+ aOffset.set(get_upxstart());
+
+ if (aOffset.get() > 0 )
+ {
+ sal_uInt32 nCount;
+
+ for (sal_uInt32 n = 0; n < nIndex; ++n)
+ {
+ nCount = getU16(aOffset);
+
+ aOffset.inc(nCount + 2);
+ aOffset.inc(aOffset.get() % 2);
+ }
+
+ nCount = getU16(aOffset);
+
+ if (nCount > 0)
+ {
+ aOffset.inc(2);
+
+ bool bIsPap = get_cupx() == 2 && nIndex == 0;
+ WW8PropertySet::Pointer_t
+ pProps(new WW8PropertySetImpl(*this, aOffset.get(), nCount,
+ bIsPap));
+
+ WW8PropertiesReference * pRef =
+ new WW8PropertiesReference(pProps);
+
+ pResult = writerfilter::Reference<Properties>::Pointer_t(pRef);
+ }
+ }
+
+ return pResult;
+}
+
+void WW8Style::resolveNoAuto(Properties & /*rHandler*/)
+{
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8Table.cxx b/writerfilter/source/doctok/WW8Table.cxx
new file mode 100644
index 000000000000..34765de5accb
--- /dev/null
+++ b/writerfilter/source/doctok/WW8Table.cxx
@@ -0,0 +1,204 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <resources.hxx>
+
+namespace writerfilter {
+namespace doctok {
+
+/* WW8sprmTDefTable */
+
+sal_uInt32 WW8sprmTDefTable::get_cellx_count()
+{
+ return getU8(0x4) + 1;
+}
+
+sal_uInt16 WW8sprmTDefTable::get_cellx(sal_uInt32 nIndex)
+{
+ return getU16(0x5 + nIndex * 2);
+}
+
+sal_uInt32 WW8sprmTDefTable::get_tc_count()
+{
+ return get_cellx_count() - 1;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8sprmTDefTable::get_tc(sal_uInt32 pos)
+{
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8TC(this,
+ 0x5 + get_cellx_count() * 2 + pos * WW8TC::getSize()));
+}
+
+/* WW8sprmTTableBorders */
+
+sal_uInt32 WW8sprmTTableBorders::get_rgbbrc_count()
+{
+ return 6;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8sprmTTableBorders::get_rgbbrc(sal_uInt32 pos)
+{
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8BRC(*this, 0x3 + pos * WW8BRC::getSize()));
+}
+
+/* WW8sprmTCellBottomColor */
+
+sal_uInt32 WW8sprmTCellBottomColor::calcSize()
+{
+ return get_cellBottomColor_count() * 4 + 3;
+}
+
+sal_uInt32 WW8sprmTCellBottomColor::get_cellBottomColor_count()
+{
+ return getU8(0x2) / 4;
+}
+
+sal_uInt32 WW8sprmTCellBottomColor::get_cellBottomColor(sal_uInt32 pos)
+{
+ return getU32(0x3 + 4 * pos);
+}
+
+/* WW8sprmTCellLeftColor */
+
+sal_uInt32 WW8sprmTCellLeftColor::calcSize()
+{
+ return get_cellLeftColor_count() * 4 + 3;
+}
+
+sal_uInt32 WW8sprmTCellLeftColor::get_cellLeftColor_count()
+{
+ return getU8(0x2) / 4;
+}
+
+sal_uInt32 WW8sprmTCellLeftColor::get_cellLeftColor(sal_uInt32 pos)
+{
+ return getU32(0x3 + 4 * pos);
+}
+
+/* WW8sprmTCellTopColor */
+
+sal_uInt32 WW8sprmTCellTopColor::calcSize()
+{
+ return get_cellTopColor_count() * 4 + 3;
+}
+
+sal_uInt32 WW8sprmTCellTopColor::get_cellTopColor_count()
+{
+ return getU8(0x2) / 4;
+}
+
+sal_uInt32 WW8sprmTCellTopColor::get_cellTopColor(sal_uInt32 pos)
+{
+ return getU32(0x3 + 4 * pos);
+}
+
+/* WW8sprmTCellRightColor */
+
+sal_uInt32 WW8sprmTCellRightColor::calcSize()
+{
+ return get_cellRightColor_count() * 4 + 3;
+}
+
+sal_uInt32 WW8sprmTCellRightColor::get_cellRightColor_count()
+{
+ return getU8(0x2) / 4;
+}
+
+sal_uInt32 WW8sprmTCellRightColor::get_cellRightColor(sal_uInt32 pos)
+{
+ return getU32(0x3 + 4 * pos);
+}
+
+/* WW8sprmTGridLineProps */
+
+sal_uInt32 WW8sprmTGridLineProps::calcSize()
+{
+ return getSize();
+}
+
+/* WW8sprmTDefTableShd */
+
+sal_uInt32 WW8sprmTDefTableShd::calcSize()
+{
+ return get_shd_count() * WW8SHD::getSize() + 3;
+}
+
+sal_uInt32 WW8sprmTDefTableShd::get_shd_count()
+{
+ return getU8(0x2) / WW8SHD::getSize();
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8sprmTDefTableShd::get_shd(sal_uInt32 pos)
+{
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8SHD(*this, 0x3 + pos * WW8SHD::getSize()));
+}
+
+/* WW8sprmTCellShd */
+
+sal_uInt32 WW8sprmTCellShd::calcSize()
+{
+ return get_shd_count() * WW8CellShd::getSize();
+}
+
+sal_uInt32 WW8sprmTCellShd::get_shd_count()
+{
+ return getU8(0x2) / WW8CellShd::getSize();
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8sprmTCellShd::get_shd(sal_uInt32 pos)
+{
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8CellShd(*this, 0x3 + pos * WW8CellShd::getSize()));
+}
+
+/* WW8sprmTCellShadow */
+
+sal_uInt32 WW8sprmTCellShadow::calcSize()
+{
+ return get_cellShadow_count() * WW8CellShd::getSize();
+}
+
+sal_uInt32 WW8sprmTCellShadow::get_cellShadow_count()
+{
+ return getU8(0x2) / WW8CellShd::getSize();
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8sprmTCellShadow::get_cellShadow(sal_uInt32 pos)
+{
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8CellShd(*this, 0x3 + pos * WW8CellShd::getSize()));
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8Text.cxx b/writerfilter/source/doctok/WW8Text.cxx
new file mode 100644
index 000000000000..746cf4547288
--- /dev/null
+++ b/writerfilter/source/doctok/WW8Text.cxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <resources.hxx>
+
+namespace writerfilter {
+namespace doctok {
+sal_uInt32 WW8sprmPChgTabsPapx::calcSize()
+{
+ return getS8(0x2) + 3;
+}
+
+sal_uInt32 WW8sprmPChgTabsPapx::get_dxaDel_count()
+{
+ return getS8(0x3);
+}
+
+sal_Int16 WW8sprmPChgTabsPapx::get_dxaDel(sal_uInt32 pos)
+{
+ return getS16(0x4 + pos * 2);
+}
+
+sal_uInt32 WW8sprmPChgTabsPapx::get_dxaAdd_count()
+{
+ return getS8(0x4 + get_dxaDel_count() * 2);
+}
+
+sal_Int16 WW8sprmPChgTabsPapx::get_dxaAdd(sal_uInt32 pos)
+{
+ return getS16(0x4 + get_dxaDel_count() * 2 + 1 + pos * 2);
+}
+
+sal_uInt32 WW8sprmPChgTabsPapx::get_tbdAdd_count()
+{
+ return get_dxaAdd_count();
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8sprmPChgTabsPapx::get_tbdAdd(sal_uInt32 pos)
+{
+ //wntmsci compiler cannot handle 'too many inlines' ;-)
+ writerfilter::Reference<Properties>::Pointer_t pRet( new WW8TBD(this,
+ 0x4 + get_dxaDel_count() * 2 + 1 + get_dxaAdd_count() * 2
+ + pos, 1));
+ return pRet;
+
+/* return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8TBD(this,
+ 0x4 + get_dxaDel_count() * 2 + 1 + get_dxaAdd_count() * 2
+ + pos, 1));*/
+}
+}}
diff --git a/writerfilter/source/doctok/WW8inc.xsl b/writerfilter/source/doctok/WW8inc.xsl
new file mode 100644
index 000000000000..956e2cad24be
--- /dev/null
+++ b/writerfilter/source/doctok/WW8inc.xsl
@@ -0,0 +1,106 @@
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml">
+<xsl:output method="text" encoding="iso-8859-1"/>
+
+<xsl:template match="/">
+<xsl:apply-templates select="//xhtml:body/xhtml:table"/>
+</xsl:template>
+
+<xsl:template match="xhtml:table">
+<xsl:apply-templates select="xhtml:tbody/xhtml:tr[2]"/>
+</xsl:template>
+
+<xsl:template name="handleTR">
+<xsl:param name="offset"/>
+<xsl:param name="shift"/>
+<xsl:variable name="name"><xsl:value-of select="xhtml:td[3]"/></xsl:variable>
+<xsl:variable name="type"><xsl:value-of select="xhtml:td[4]"/></xsl:variable>
+<xsl:variable name="saltype">
+<xsl:choose>
+ <xsl:when test="$type='U8'">sal_uInt8</xsl:when>
+ <xsl:when test="$type='S8'">sal_Int8</xsl:when>
+ <xsl:when test="$type='U16'">sal_uInt16</xsl:when>
+ <xsl:when test="$type='S16'">sal_Int16</xsl:when>
+ <xsl:when test="$type='U32'">sal_uInt32</xsl:when>
+ <xsl:when test="$type='S32'">sal_Int32</xsl:when>
+ <xsl:otherwise>void *</xsl:otherwise>
+</xsl:choose>
+</xsl:variable>
+<xsl:variable name="bits"><xsl:value-of select="xhtml:td[5]"/></xsl:variable>
+<xsl:variable name="mask"><xsl:value-of select="xhtml:td[6]"/></xsl:variable>
+<xsl:variable name="comment"><xsl:value-of select="xhtml:td[7]"/></xsl:variable>
+/**
+<xsl:value-of select="$comment"/>
+
+offset : <xsl:value-of select="$offset"/>
+name : <xsl:value-of select="$name"/>
+type : <xsl:value-of select="$type"/>
+shift : <xsl:value-of select="concat($shift, '&#xa;')"/>
+*/
+
+<xsl:value-of select="$saltype"/> get_<xsl:value-of select="$name"/>() const<xsl:choose>
+<xsl:when test="$saltype='void *'">;
+</xsl:when>
+<xsl:otherwise> { return (get<xsl:value-of select="$type"/>(0x<xsl:value-of select="$offset"/>)<xsl:if test="string-length($mask)>0"> &amp; 0x<xsl:value-of select="translate($mask, 'ABCDEF', 'abcdef')"/></xsl:if>)<xsl:if test="$shift>0"> &gt;&gt; <xsl:value-of select="$shift"/></xsl:if>; }
+</xsl:otherwise>
+</xsl:choose>
+</xsl:template>
+
+<xsl:template match="xhtml:tr[./xhtml:td[position()=1]/text()]">
+<xsl:variable name="offset"><xsl:value-of select="xhtml:td[2]"/></xsl:variable>
+<xsl:call-template name="handleTR">
+<xsl:with-param name="offset" select="$offset"/>
+<xsl:with-param name="shift">0</xsl:with-param>
+</xsl:call-template>
+<xsl:variable name="shift1"><xsl:value-of select="substring-after(xhtml:td[5], ':')"/></xsl:variable>
+<xsl:apply-templates select="following-sibling::xhtml:tr[position()=1]">
+<xsl:with-param name="offset" select="$offset"/>
+<xsl:with-param name="shift" select="$shift1"/>
+</xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="xhtml:tr[not(./xhtml:td[position()=1]/text())]">
+<xsl:param name="offset"/>
+<xsl:param name="shift"/>
+<xsl:call-template name="handleTR">
+<xsl:with-param name="offset" select="$offset"/>
+<xsl:with-param name="shift" select="$shift"/>
+</xsl:call-template>
+<xsl:variable name="shift1"><xsl:value-of select="$shift+substring-after(xhtml:td[5], ':')"/></xsl:variable>
+<xsl:apply-templates select="following-sibling::xhtml:tr[position()=1]">
+<xsl:with-param name="offset" select="$offset"/>
+<xsl:with-param name="shift" select="$shift1"/>
+</xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="*">
+<xsl:copy-of select="."/>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/writerfilter/source/doctok/WW8sprms.xsl b/writerfilter/source/doctok/WW8sprms.xsl
new file mode 100644
index 000000000000..80afb9c853ee
--- /dev/null
+++ b/writerfilter/source/doctok/WW8sprms.xsl
@@ -0,0 +1,66 @@
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default" xmlns:xhtml="http://www.w3.org/1999/xhtml">
+<xsl:output method="xml" indent="yes"/>
+
+<xsl:template match="/">
+<out>
+<xsl:apply-templates select=".//xhtml:tr[position() > 2]"/>
+</out>
+</xsl:template>
+
+<xsl:template match='xhtml:tr'>
+<xsl:variable name='sprmname'><xsl:value-of select='xhtml:td[1]'/></xsl:variable>
+<xsl:variable name='sprmid'><xsl:value-of select='xhtml:td[2]'/></xsl:variable>
+<UML:Class>
+<xsl:attribute name='xmi.id'><xsl:value-of select='$sprmname'/></xsl:attribute>
+<xsl:attribute name='name'><xsl:value-of select='$sprmname'/></xsl:attribute>
+<UML:ModelElement.stereotype>
+<UML:Stereotype xmi.idref="ww8sprm"/>
+</UML:ModelElement.stereotype>
+<UML:ModelElement.taggedValue>
+<UML:TaggedValue>
+<UML:TaggedValue.dataValue><xsl:value-of select='$sprmid'/></UML:TaggedValue.dataValue>
+<UML:TaggedValue.type>
+<UML:TagDefinition xmi.idref="sprmcode"/>
+</UML:TaggedValue.type>
+</UML:TaggedValue>
+</UML:ModelElement.taggedValue>
+<UML:ModelElement.taggedValue>
+<UML:TaggedValue>
+<UML:TaggedValue.dataValue>rtf:<xsl:value-of select='$sprmname'/></UML:TaggedValue.dataValue>
+<UML:TaggedValue.type>
+<UML:TagDefinition xmi.idref="sprmid"/>
+</UML:TaggedValue.type>
+</UML:TaggedValue>
+</UML:ModelElement.taggedValue>
+</UML:Class>
+</xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/doctok/WW8xmi.xsl b/writerfilter/source/doctok/WW8xmi.xsl
new file mode 100644
index 000000000000..d76921c2bdb7
--- /dev/null
+++ b/writerfilter/source/doctok/WW8xmi.xsl
@@ -0,0 +1,184 @@
+<!--
+*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default" xmlns:xhtml="http://www.w3.org/1999/xhtml">
+<xsl:output method="xml" indent="yes"/>
+
+<xsl:template match="/">
+<UML:Class xmi.id="dummy" name="dummy">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref='access'/>
+ </UML:ModelElement.stereotype>
+<xsl:apply-templates select="//xhtml:body/xhtml:table"/>
+</UML:Class>
+</xsl:template>
+
+<xsl:template match="xhtml:table">
+<xsl:apply-templates select="xhtml:tbody/xhtml:tr[2]"/>
+</xsl:template>
+
+<xsl:template name="handleTR">
+<xsl:param name="offset"/>
+<xsl:param name="shift"/>
+<xsl:variable name="name"><xsl:value-of select="xhtml:td[3]"/></xsl:variable>
+<xsl:variable name="type">
+<xsl:choose>
+<xsl:when test='contains(xhtml:td[4], "[")'>
+<xsl:value-of select='substring-before(xhtml:td[4], "[")'/>
+</xsl:when>
+<xsl:otherwise>
+<xsl:value-of select="xhtml:td[4]"/>
+<xsl:variable name="stereotype">attribute</xsl:variable>
+</xsl:otherwise>
+</xsl:choose>
+</xsl:variable>
+<xsl:variable name='stereotype'>
+<xsl:choose>
+<xsl:when test='contains(xhtml:td[4], "[")'>array</xsl:when>
+<xsl:otherwise>attribute</xsl:otherwise>
+</xsl:choose>
+</xsl:variable>
+<xsl:variable name="saltype">
+<xsl:choose>
+ <xsl:when test="$type='U8'">sal_uInt8</xsl:when>
+ <xsl:when test="$type='S8'">sal_Int8</xsl:when>
+ <xsl:when test="$type='U16'">sal_uInt16</xsl:when>
+ <xsl:when test="$type='S16'">sal_Int16</xsl:when>
+ <xsl:when test="$type='U32'">sal_uInt32</xsl:when>
+ <xsl:when test="$type='S32'">sal_Int32</xsl:when>
+ <xsl:otherwise>void *</xsl:otherwise>
+</xsl:choose>
+</xsl:variable>
+<xsl:variable name="bits"><xsl:value-of select="xhtml:td[5]"/></xsl:variable>
+<xsl:variable name="mask"><xsl:value-of select="xhtml:td[6]"/></xsl:variable>
+<xsl:variable name="comment"><xsl:value-of select="xhtml:td[7]"/></xsl:variable>
+ <UML:Classifier.feature>
+ <UML:Attribute><xsl:attribute name="name"><xsl:value-of select="$name"/></xsl:attribute>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue><xsl:value-of select="$comment"/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref = 'comment'/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue><xsl:value-of select="$offset"/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref = 'offset'/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue><xsl:value-of select="$shift"/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref = 'shift'/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue><xsl:value-of select="$mask"/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref = 'mask'/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue><xsl:value-of select="$bits"/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref = 'bits'/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:<xsl:value-of select='translate($name, "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ")'/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref = 'attrid'/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+<xsl:if test='$stereotype = "array"'>
+<xsl:variable name='arraycount'><xsl:value-of select='substring-before(substring-after(xhtml:td[4], "["), "]")'/></xsl:variable>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue><xsl:value-of select="$arraycount"/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref = 'arraycount'/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+</xsl:if>
+ <UML:StructuralFeature.type>
+ <UML:DataType><xsl:attribute name="xmi.idref"><xsl:value-of select="$type"/></xsl:attribute></UML:DataType>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype><xsl:attribute name="xmi.idref"><xsl:value-of select="$stereotype"/></xsl:attribute></UML:Stereotype>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+</xsl:template>
+
+<xsl:template match="xhtml:tr[./xhtml:td[position()=1]/text()]">
+<xsl:variable name="offset"><xsl:value-of select="xhtml:td[2]"/></xsl:variable>
+<xsl:call-template name="handleTR">
+<xsl:with-param name="offset" select="$offset"/>
+<xsl:with-param name="shift">0</xsl:with-param>
+</xsl:call-template>
+<xsl:variable name="shift1"><xsl:value-of select="substring-after(xhtml:td[5], ':')"/></xsl:variable>
+<xsl:apply-templates select="following-sibling::xhtml:tr[position()=1]">
+<xsl:with-param name="offset" select="$offset"/>
+<xsl:with-param name="shift" select="$shift1"/>
+</xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="xhtml:tr[not(./xhtml:td[position()=1]/text())]">
+<xsl:param name="offset"/>
+<xsl:param name="shift"/>
+<xsl:call-template name="handleTR">
+<xsl:with-param name="offset" select="$offset"/>
+<xsl:with-param name="shift" select="$shift"/>
+</xsl:call-template>
+<xsl:variable name="shift1"><xsl:value-of select="$shift+substring-after(xhtml:td[5], ':')"/></xsl:variable>
+<xsl:apply-templates select="following-sibling::xhtml:tr[position()=1]">
+<xsl:with-param name="offset" select="$offset"/>
+<xsl:with-param name="shift" select="$shift1"/>
+</xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="*">
+<xsl:copy-of select="."/>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/writerfilter/source/doctok/XNoteHelper.hxx b/writerfilter/source/doctok/XNoteHelper.hxx
new file mode 100644
index 000000000000..faa7f3bb038d
--- /dev/null
+++ b/writerfilter/source/doctok/XNoteHelper.hxx
@@ -0,0 +1,143 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_X_NOTE_HELPER_HXX
+#define INCLUDED_X_NOTE_HELPER_HXX
+
+#ifndef INLCUED_PLCF_HXX
+#include <PLCF.hxx>
+#endif
+#include <WW8DocumentImpl.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+/**
+ A helper class for footnotes and endnotes and annotations(aka X-notes).
+ */
+template <class T>
+class XNoteHelper
+{
+ /// Character positions of X-notes in footnote document
+ WW8StructBase::Pointer_t mpCps;
+
+ /// Character positions of references to X-notes
+ typename PLCF<T>::Pointer_t mpRefs;
+
+ /// piece table for CP to FC conversion
+ WW8PieceTable::Pointer_t mpPieceTable;
+
+ /// the document
+ WW8DocumentImpl * mpDocument;
+
+ /// type of X-notes handled by this helper (PROP_FOOTNOTE, PROP_ENDNOTE)
+ PropertyType meType;
+
+ /// offset in document where X-note subdocument starts
+ CpAndFc mCpAndFcOffset;
+
+ /**
+ Return CpAndFc in document for X-note.
+
+ @param nPos index of X-note
+ */
+ CpAndFc getCpAndFc(sal_uInt32 nPos);
+
+ /**
+ Return CpAndFc in document for reference to a certain X-note.
+
+ @param nPos index of the X-note
+ */
+ CpAndFc getRefCpAndFc(sal_uInt32 nPos);
+
+public:
+ typedef boost::shared_ptr<XNoteHelper> Pointer_t;
+
+ XNoteHelper(WW8StructBase::Pointer_t pCps,
+ typename PLCF<T>::Pointer_t pRefs,
+ WW8PieceTable::Pointer_t pPieceTable,
+ WW8DocumentImpl * pDocument,
+ PropertyType eType,
+ CpAndFc cpAndFcOffset)
+ : mpCps(pCps), mpRefs(pRefs), mpPieceTable(pPieceTable),
+ mpDocument(pDocument), meType(eType), mCpAndFcOffset(cpAndFcOffset)
+ {
+ }
+
+ /**
+ Initialize.
+
+ Generates CpAndFcs in document for X-notes.
+ */
+ void init();
+
+ /**
+ Return number of X-notes.
+ */
+ sal_uInt32 getCount() const;
+
+ /**
+ Return index of CpAndFc.
+
+ @param rCpAndFc the CpAndFc to search
+
+ @return the index of the rCpAndFc found or getCount() otherwise
+ */
+ sal_uInt32 getIndexOfCpAndFc(const CpAndFc & rCpAndFc);
+
+ /**
+ Return subdocument containing X-note.
+
+ @param nIndex index of X-note.
+ */
+ writerfilter::Reference<Stream>::Pointer_t get(sal_uInt32 nIndex);
+
+ /**
+ Return subdocument containing X-note.
+
+ @param rCpAndFc CpAndFc of the X-note's reference
+ */
+ writerfilter::Reference<Stream>::Pointer_t get(const CpAndFc & rCpAndFc);
+
+ /**
+ Return reference data structure of X-note.
+
+ @param nIndex index of X-note
+ */
+ T * getRef(sal_uInt32 nIndex);
+
+ /**
+ Return reference data structure of X-note.
+
+ @param rCpAndFc CpAndFc for the X-note's reference
+ */
+ T * getRef(const CpAndFc & rCpAndFc);
+};
+
+}}
+
+#endif // INCLUDED_X_NOTE_HELPER_HXX
diff --git a/writerfilter/source/doctok/XNoteHelperImpl.hxx b/writerfilter/source/doctok/XNoteHelperImpl.hxx
new file mode 100644
index 000000000000..4cd70b984f24
--- /dev/null
+++ b/writerfilter/source/doctok/XNoteHelperImpl.hxx
@@ -0,0 +1,168 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_X_NOTE_HELPER_IMPL_HXX
+#define INCLUDED_X_NOTE_HELPER_IMPL_HXX
+
+namespace writerfilter {
+namespace doctok
+{
+template <class T>
+sal_uInt32 XNoteHelper<T>::getCount() const
+{
+ sal_uInt32 nResult = 0;
+
+ if (mpCps.get() != NULL && mpCps->getCount() > 8)
+ nResult = ( mpCps->getCount() / 4) - 2;
+
+ return nResult;
+}
+
+template <class T>
+CpAndFc XNoteHelper<T>::getCpAndFc(sal_uInt32 nPos)
+{
+ // There are getCount() + 1 entries in mpOffsets => greater
+ if (nPos > getCount())
+ throw ExceptionNotFound("getCpAndFc");
+
+ Cp aCp(mCpAndFcOffset.getCp() + mpCps->getU32(nPos * 4));
+ Fc aFc(mpPieceTable->cp2fc(aCp));
+ CpAndFc aCpAndFc(aCp, aFc, meType);
+
+ return aCpAndFc;
+}
+
+template <class T>
+CpAndFc XNoteHelper<T>::getRefCpAndFc(sal_uInt32 nPos)
+{
+ // There are getCount() entries in mpRefs => greater or equal
+ if (nPos >= getCount())
+ throw ExceptionNotFound("");
+
+ Cp aCp(mpRefs->getFc(nPos));
+ Fc aFc(mpPieceTable->cp2fc(aCp));
+ CpAndFc aCpAndFc(aCp, aFc, meType);
+
+ return aCpAndFc;
+}
+
+template <class T>
+writerfilter::Reference<Stream>::Pointer_t
+XNoteHelper<T>::get(sal_uInt32 nPos)
+{
+ // There are getCount() entries => greater or equal
+ if (nPos >= getCount())
+ throw ExceptionNotFound("get");
+
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ CpAndFc aCpAndFcStart(getCpAndFc(nPos));
+ CpAndFc aCpAndFcEnd(getCpAndFc(nPos + 1));
+
+ if (aCpAndFcStart < aCpAndFcEnd)
+ pResult = writerfilter::Reference<Stream>::Pointer_t
+ (new WW8DocumentImpl(*mpDocument, aCpAndFcStart, aCpAndFcEnd));
+
+ return pResult;
+}
+
+template <class T>
+sal_uInt32 XNoteHelper<T>::getIndexOfCpAndFc(const CpAndFc & rCpAndFc)
+{
+ sal_uInt32 nResult = getCount();
+
+ sal_uInt32 n = nResult;
+ while (n > 0)
+ {
+ --n;
+
+ Cp aCp(mpRefs->getFc(n));
+ Fc aFc(mpPieceTable->cp2fc(aCp));
+ CpAndFc aCpAndFc(aCp, aFc, meType);
+
+ if (aCpAndFc <= rCpAndFc)
+ {
+ nResult = n;
+ break;
+ }
+ }
+
+ return nResult;
+}
+
+template <class T>
+writerfilter::Reference<Stream>::Pointer_t
+XNoteHelper<T>::get(const CpAndFc & rCpAndFc)
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ sal_uInt32 n = getIndexOfCpAndFc(rCpAndFc);
+
+ if (n < getCount())
+ pResult = get(n);
+
+ return pResult;
+}
+
+template <class T>
+T *
+XNoteHelper<T>::getRef(sal_uInt32 nIndex)
+{
+ return mpRefs->getEntryPointer(nIndex);
+}
+
+template <class T>
+T *
+XNoteHelper<T>::getRef(const CpAndFc & rCpAndFc)
+{
+ T * pResult = NULL;
+
+ sal_uInt32 n = getIndexOfCpAndFc(rCpAndFc);
+
+ if (n < getCount())
+ {
+ pResult = getRef(n);
+ }
+
+ return pResult;
+}
+
+template <class T>
+void XNoteHelper<T>::init()
+{
+ for (sal_uInt32 n = 0; n < getCount(); ++n)
+ {
+ CpAndFc aCpAndFc(getCpAndFc(n));
+ mpDocument->insertCpAndFc(aCpAndFc);
+
+ CpAndFc aCpAndFcRef(getRefCpAndFc(n));
+ mpDocument->insertCpAndFc(aCpAndFcRef);
+ }
+}
+}}
+
+#endif // INCLUDED_X_NOTE_HELPER_IMPL_HXX
diff --git a/writerfilter/source/doctok/analyzer.xsl b/writerfilter/source/doctok/analyzer.xsl
new file mode 100644
index 000000000000..ce645bdbe064
--- /dev/null
+++ b/writerfilter/source/doctok/analyzer.xsl
@@ -0,0 +1,39 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+<xsl:output method="text" />
+<xsl:include href="resourcetools.xsl"/>
+
+<xsl:template match="/">
+ <xsl:call-template name="analyzerdoctokids"/>
+</xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/doctok/doctokLoggers.hxx b/writerfilter/source/doctok/doctokLoggers.hxx
new file mode 100644
index 000000000000..8df90348a249
--- /dev/null
+++ b/writerfilter/source/doctok/doctokLoggers.hxx
@@ -0,0 +1,40 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_DOCTOK_LOGGERS_HXX
+#define INCLUDED_DOCTOK_LOGGERS_HXX
+
+#include <resourcemodel/TagLogger.hxx>
+
+namespace writerfilter {
+ namespace doctok {
+ extern TagLogger::Pointer_t debug_logger;
+ }
+}
+
+
+#endif // INCLUDED_DOCTOK_LOGGERS_HXX
diff --git a/writerfilter/source/doctok/doctokutil.cxx b/writerfilter/source/doctok/doctokutil.cxx
new file mode 100644
index 000000000000..7d94b525550b
--- /dev/null
+++ b/writerfilter/source/doctok/doctokutil.cxx
@@ -0,0 +1,53 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <util.hxx>
+
+using namespace ::std;
+
+namespace writerfilter {
+namespace doctok {
+void util_assert(bool bTest)
+{
+ if (! bTest)
+ clog << "ASSERT!\n" << endl;
+}
+
+void printBytes(ostream & o, const string & str)
+{
+ unsigned int nCount = str.size();
+ for (unsigned int n = 0; n < nCount; ++n)
+ {
+ unsigned char c = static_cast<unsigned char>(str[n]);
+ if (c < 128 && isprint(c))
+ o << str[n];
+ else
+ o << ".";
+ }
+}
+
+}}
diff --git a/writerfilter/source/doctok/escher.html b/writerfilter/source/doctok/escher.html
new file mode 100644
index 000000000000..7d82c773d54f
--- /dev/null
+++ b/writerfilter/source/doctok/escher.html
@@ -0,0 +1,207 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+ <head>
+ <title></title>
+ </head>
+
+ <body>
+ <h1></h1>
+
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">rotation</font><p></p></td><td valign="top"><font face=" , " size="2">4</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">fixed point: 16.16 degrees<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockRotation</font><p></p></td><td valign="top"><font face=" , " size="2">119</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">No rotation</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockAspectRatio</font><p></p></td><td valign="top"><font face=" , " size="2">120</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Don't allow changes in aspect ratio</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockPosition</font><p></p></td><td valign="top"><font face=" , " size="2">121</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Don't allow the shape to be moved</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockAgainstSelect</font><p></p></td><td valign="top"><font face=" , " size="2">122</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Shape may not be selected</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockCropping</font><p></p></td><td valign="top"><font face=" , " size="2">123</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">No cropping this shape</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockVertices</font><p></p></td><td valign="top"><font face=" , " size="2">124</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Edit Points not allowed</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockText</font><p></p></td><td valign="top"><font face=" , " size="2">125</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Do not edit text</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockAdjustHandles</font><p></p></td><td valign="top"><font face=" , " size="2">126</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Do not adjust</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockAgainstGrouping</font><p></p></td><td valign="top"><font face=" , " size="2">127</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Do not group this shape<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lTxid</font><p></p></td><td valign="top"><font face=" , " size="2">128</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">id for the text, value determined by the host</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dxTextLeft</font><p></p></td><td valign="top"><font face=" , " size="2">129</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1/10 inch</font><p></p></td><td valign="top"><font face=" , " size="2">margins relative to shape's inscribed text rectangle (in EMUs)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dyTextTop</font><p></p></td><td valign="top"><font face=" , " size="2">130</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1/20 inch</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dxTextRight</font><p></p></td><td valign="top"><font face=" , " size="2">131</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1/10 inch</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dyTextBottom</font><p></p></td><td valign="top"><font face=" , " size="2">132</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1/20 inch</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">WrapText</font><p></p></td><td valign="top"><font face=" , " size="2">133</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOWRAPMODE</b></font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Wrap text at shape margins</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">scaleText</font><p></p></td><td valign="top"><font face=" , " size="2">134</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">Text zoom/scale (used if fFitTextToShape)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">anchorText</font><p></p></td><td valign="top"><font face=" , " size="2">135</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOANCHOR</b></font><p></p></td><td valign="top"><font face=" , " size="2">Top</font><p></p></td><td valign="top"><font face=" , " size="2">How to anchor the text</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">txflTextFlow</font><p></p></td><td valign="top"><font face=" , " size="2">136</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOTXFL</b></font><p></p></td><td valign="top"><font face=" , " size="2">HorzN</font><p></p></td><td valign="top"><font face=" , " size="2">Text flow</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">cdirFont</font><p></p></td><td valign="top"><font face=" , " size="2">137</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCDIR</b></font><p></p></td><td valign="top"><font face=" , " size="2">msocdir0</font><p></p></td><td valign="top"><font face=" , " size="2">Font rotation</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">hspNext</font><p></p></td><td valign="top"><font face=" , " size="2">138</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOHSP</b></font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">ID of the next shape (used by Word for linked textboxes)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">txdir</font><p></p></td><td valign="top"><font face=" , " size="2">139</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOTXDIR</b></font><p></p></td><td valign="top"><font face=" , " size="2">LTR</font><p></p></td><td valign="top"><font face=" , " size="2">Bi-Di Text direction</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fSelectText</font><p></p></td><td valign="top"><font face=" , " size="2">187</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td valign="top"><font face=" , " size="2">TRUE if single click selects text, FALSE if two clicks</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fAutoTextMargin</font><p></p></td><td valign="top"><font face=" , " size="2">188</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">use host's margin calculations</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fRotateText</font><p></p></td><td valign="top"><font face=" , " size="2">189</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Rotate text with shape</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fFitShapeToText</font><p></p></td><td valign="top"><font face=" , " size="2">190</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Size shape to fit text size</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fFitTextToShape</font><p></p></td><td valign="top"><font face=" , " size="2">191</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Size text to fit shape size<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextUNICODE</font><p></p></td><td valign="top"><font face=" , " size="2">192</font><p></p></td><td valign="top"><font face=" , " size="2">WCHAR*</font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">UNICODE text string</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextRTF</font><p></p></td><td valign="top"><font face=" , " size="2">193</font><p></p></td><td valign="top"><font face=" , " size="2">char*</font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">RTF text string</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextAlign</font><p></p></td><td valign="top"><font face=" , " size="2">194</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOGEOTEXTALIGN</b></font><p></p></td><td valign="top"><font face=" , " size="2">Center</font><p></p></td><td valign="top"><font face=" , " size="2">alignment on curve</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextSize</font><p></p></td><td valign="top"><font face=" , " size="2">195</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">36&lt;&lt;16</font><p></p></td><td valign="top"><font face=" , " size="2">default point size</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextSpacing</font><p></p></td><td valign="top"><font face=" , " size="2">196</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td valign="top"><font face=" , " size="2">fixed point 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFont</font><p></p></td><td valign="top"><font face=" , " size="2">197</font><p></p></td><td valign="top"><font face=" , " size="2">WCHAR*</font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">font family name</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFReverseRows</font><p></p></td><td valign="top"><font face=" , " size="2">240</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Reverse row order</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fGtext</font><p></p></td><td valign="top"><font face=" , " size="2">241</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Has text effect</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFVertical</font><p></p></td><td valign="top"><font face=" , " size="2">242</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Rotate characters</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFKern</font><p></p></td><td valign="top"><font face=" , " size="2">243</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Kern characters</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFTight</font><p></p></td><td valign="top"><font face=" , " size="2">244</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Tightening or tracking</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFStretch</font><p></p></td><td valign="top"><font face=" , " size="2">245</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Stretch to fit shape</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFShrinkFit</font><p></p></td><td valign="top"><font face=" , " size="2">246</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Char bounding box</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFBestFit</font><p></p></td><td valign="top"><font face=" , " size="2">247</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Scale text-on-path</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFNormalize</font><p></p></td><td valign="top"><font face=" , " size="2">248</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Stretch char height</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFDxMeasure</font><p></p></td><td valign="top"><font face=" , " size="2">249</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Do not measure along path</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFBold</font><p></p></td><td valign="top"><font face=" , " size="2">250</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Bold font</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFItalic</font><p></p></td><td valign="top"><font face=" , " size="2">251</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Italic font</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFUnderline</font><p></p></td><td valign="top"><font face=" , " size="2">252</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Underline font</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFShadow</font><p></p></td><td valign="top"><font face=" , " size="2">253</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Shadow font</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFSmallcaps</font><p></p></td><td valign="top"><font face=" , " size="2">254</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Small caps font</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFStrikethrough</font><p></p></td><td valign="top"><font face=" , " size="2">255</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Strike through font<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="7"><colgroup><col valign="top" width="96"><col valign="top" width="45"><col valign="top" width="49"><col valign="top" width="49"><col valign="top" width="0"><col valign="top" width="192"><col valign="top" width="1"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Default</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">cropFromTop</font><p></p></td><td valign="top"><font face=" , " size="2">256</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">16.16 fraction times total image width or height, as appropriate.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">cropFromBottom</font><p></p></td><td valign="top"><font face=" , " size="2">257</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">cropFromLeft</font><p></p></td><td valign="top"><font face=" , " size="2">258</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">cropFromRight</font><p></p></td><td valign="top"><font face=" , " size="2">259</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pib</font><p></p></td><td valign="top"><font face=" , " size="2">260</font><p></p></td><td valign="top"><font face=" , " size="2">IMsoBlip*</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">NULL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Blip to display</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pibName</font><p></p></td><td valign="top"><font face=" , " size="2">261</font><p></p></td><td valign="top"><font face=" , " size="2">WCHAR*</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">NULL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Blip file name</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pibFlags</font><p></p></td><td valign="top"><font face=" , " size="2">262</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOBLIPFLAGS</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Comment</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Blip flags</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureTransparent</font><p></p></td><td valign="top"><font face=" , " size="2">263</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">~0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">transparent color (none if ~0UL) </font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureContrast</font><p></p></td><td valign="top"><font face=" , " size="2">264</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">contrast setting</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureBrightness</font><p></p></td><td valign="top"><font face=" , " size="2">265</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">brightness setting</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureGamma</font><p></p></td><td valign="top"><font face=" , " size="2">266</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">16.16 gamma</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureId</font><p></p></td><td valign="top"><font face=" , " size="2">267</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Host-defined ID for OLE objects (usually a pointer)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureDblCrMod</font><p></p></td><td valign="top"><font face=" , " size="2">268</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">This</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Modification used if shape has double shadow</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureFillCrMod</font><p></p></td><td valign="top"><font face=" , " size="2">269</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td valign="top"><font face=" , " size="2">undefined</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureLineCrMod</font><p></p></td><td valign="top"><font face=" , " size="2">270</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td valign="top"><font face=" , " size="2">undefined</font><p></p></td><td colspan="3" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pibPrint</font><p></p></td><td valign="top"><font face=" , " size="2">271</font><p></p></td><td valign="top"><font face=" , " size="2">IMsoBlip*</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">NULL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Blip to display when printing</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pibPrintName</font><p></p></td><td valign="top"><font face=" , " size="2">272</font><p></p></td><td valign="top"><font face=" , " size="2">WCHAR*</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">NULL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Blip file name</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pibPrintFlags</font><p></p></td><td valign="top"><font face=" , " size="2">273</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOBLIPFLAGS</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Comment</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Blip flags</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fNoHitTestPicture</font><p></p></td><td valign="top"><font face=" , " size="2">316</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Do not hit test the picture</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureGray</font><p></p></td><td valign="top"><font face=" , " size="2">317</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">grayscale display</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureBiLevel</font><p></p></td><td valign="top"><font face=" , " size="2">318</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">bi-level display</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureActive</font><p></p></td><td valign="top"><font face=" , " size="2">319</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Server is active (OLE objects only)<p></p></font></td></tr></tbody></table>
+<table border="1" cellpadding="1" cols="5">
+ <tbody><tr><td valign="top"><font face=" , " size="2">Property</font></td>
+ <td valign="top"><font face=" , " size="2">PID</font></td>
+ <td valign="top"><font face=" , " size="2">Type</font></td>
+ <td valign="top"><font face=" , " size="2">Default</font></td>
+ <td valign="top"><font face=" , " size="2">Description</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">geoLeft</font></td>
+ <td valign="top"><font face=" , " size="2">320</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">Defines the G (geometry) coordinate
+ space.</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">geoTop</font></td>
+ <td valign="top"><font face=" , " size="2">321</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">geoRight</font></td>
+ <td valign="top"><font face=" , " size="2">322</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">21600</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">geoBottom</font></td>
+ <td valign="top"><font face=" , " size="2">323</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">21600</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">shapePath</font></td>
+ <td valign="top"><font face=" , " size="2">324</font></td>
+ <td valign="top"><font face=" , " size="2"><b>MSOSHAPEPATH</b></font></td>
+ <td valign="top"><font face=" , " size="2">msoshapeLinesClosed</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">pVertices</font></td>
+ <td valign="top"><font face=" , " size="2">325</font></td>
+ <td valign="top"><font face=" , " size="2"><b>IMsoArray</b></font></td>
+ <td valign="top"><font face=" , " size="2">NULL</font></td>
+ <td valign="top"><font face=" , " size="2">An array of points, in G units.</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">pSegmentInfo</font></td>
+ <td valign="top"><font face=" , " size="2">326</font></td>
+ <td valign="top"><font face=" , " size="2"><b>IMsoArray</b></font></td>
+ <td valign="top"><font face=" , " size="2">NULL</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjustValue</font></td>
+ <td valign="top"><font face=" , " size="2">327</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">Adjustment values corresponding to the
+ positions of the adjust handles of the shape. The number
+ of values used and their allowable ranges vary from shape
+ type to shape type.</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjust2Value</font></td>
+ <td valign="top"><font face=" , " size="2">328</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjust3Value</font></td>
+ <td valign="top"><font face=" , " size="2">329</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjust4Value</font></td>
+ <td valign="top"><font face=" , " size="2">330</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjust5Value</font></td>
+ <td valign="top"><font face=" , " size="2">331</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjust6Value</font></td>
+ <td valign="top"><font face=" , " size="2">332</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjust7Value</font></td>
+ <td valign="top"><font face=" , " size="2">333</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjust8Value</font></td>
+ <td valign="top"><font face=" , " size="2">334</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjust9Value</font></td>
+ <td valign="top"><font face=" , " size="2">335</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjust10Value</font></td>
+ <td valign="top"><font face=" , " size="2">336</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">fShadowOK</font></td>
+ <td valign="top"><font face=" , " size="2">378</font></td>
+ <td valign="top"><font face=" , " size="2">BOOL</font></td>
+ <td valign="top"><font face=" , " size="2">TRUE</font></td>
+ <td valign="top"><font face=" , " size="2">Shadow may be set</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">f3DOK</font></td>
+ <td valign="top"><font face=" , " size="2">379</font></td>
+ <td valign="top"><font face=" , " size="2">BOOL</font></td>
+ <td valign="top"><font face=" , " size="2">TRUE</font></td>
+ <td valign="top"><font face=" , " size="2">3D may be set</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">fLineOK</font></td>
+ <td valign="top"><font face=" , " size="2">380</font></td>
+ <td valign="top"><font face=" , " size="2">BOOL</font></td>
+ <td valign="top"><font face=" , " size="2">TRUE</font></td>
+ <td valign="top"><font face=" , " size="2">Line style may be set</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">fGtextOK</font></td>
+ <td valign="top"><font face=" , " size="2">381</font></td>
+ <td valign="top"><font face=" , " size="2">BOOL</font></td>
+ <td valign="top"><font face=" , " size="2">FALSE</font></td>
+ <td valign="top"><font face=" , " size="2">Text effect (WordArt) supported</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">fFillShadeShapeOK</font></td>
+ <td valign="top"><font face=" , " size="2">382</font></td>
+ <td valign="top"><font face=" , " size="2">BOOL</font></td>
+ <td valign="top"><font face=" , " size="2">FALSE</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">fFillOK</font></td>
+ <td valign="top"><font face=" , " size="2">383</font></td>
+ <td valign="top"><font face=" , " size="2">BOOL</font></td>
+ <td valign="top"><font face=" , " size="2">TRUE</font></td>
+ <td valign="top"><font face=" , " size="2">OK to fill the shape through the UI or
+ VBA?</font></td>
+ </tr>
+</tbody></table>
+<table border="0" cellpadding="7" cols="6"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="0"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Default</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillType</font><p></p></td><td valign="top"><font face=" , " size="2">384</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOFILLTYPE</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Solid</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Type of fill</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillColor</font><p></p></td><td valign="top"><font face=" , " size="2">385</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">white</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Foreground color</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillOpacity</font><p></p></td><td valign="top"><font face=" , " size="2">386</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Fixed 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillBackColor</font><p></p></td><td valign="top"><font face=" , " size="2">387</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">white</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Background color</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillBackOpacity</font><p></p></td><td valign="top"><font face=" , " size="2">388</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Shades only</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillCrMod</font><p></p></td><td valign="top"><font face=" , " size="2">389</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">undefined</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Modification for BW views</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillBlip</font><p></p></td><td valign="top"><font face=" , " size="2">390</font><p></p></td><td valign="top"><font face=" , " size="2">IMsoBlip*</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">NULL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Pattern/texture</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillBlipName</font><p></p></td><td valign="top"><font face=" , " size="2">391</font><p></p></td><td valign="top"><font face=" , " size="2">WCHAR*</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">NULL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Blip file name</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillBlipFlags</font><p></p></td><td valign="top"><font face=" , " size="2">392</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOBLIPFLAGS</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Comment</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Blip flags</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillWidth</font><p></p></td><td valign="top"><font face=" , " size="2">393</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">How big (A units) to make a metafile texture.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillHeight</font><p></p></td><td valign="top"><font face=" , " size="2">394</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillAngle</font><p></p></td><td valign="top"><font face=" , " size="2">395</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Fade angle - degrees in 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillFocus</font><p></p></td><td valign="top"><font face=" , " size="2">396</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Linear shaded fill focus percent</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillToLeft</font><p></p></td><td valign="top"><font face=" , " size="2">397</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Fraction 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillToTop</font><p></p></td><td valign="top"><font face=" , " size="2">398</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Fraction 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillToRight</font><p></p></td><td valign="top"><font face=" , " size="2">399</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Fraction 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillToBottom</font><p></p></td><td valign="top"><font face=" , " size="2">400</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Fraction 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillRectLeft</font><p></p></td><td valign="top"><font face=" , " size="2">401</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">For shaded fills, use the specified rectangle instead of the shape's bounding rect to define how large the fade is going to be.</font><p></p>
+<p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillRectTop</font><p></p></td><td valign="top"><font face=" , " size="2">402</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillRectRight</font><p></p></td><td valign="top"><font face=" , " size="2">403</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillRectBottom</font><p></p></td><td valign="top"><font face=" , " size="2">404</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillDztype</font><p></p></td><td valign="top"><font face=" , " size="2">405</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSODZTYPE</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Default</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillShadePreset</font><p></p></td><td valign="top"><font face=" , " size="2">406</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Special shades</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillShadeColors</font><p></p></td><td valign="top"><font face=" , " size="2">407</font><p></p></td><td valign="top"><font face=" , " size="2"><b>IMsoArray</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">NULL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">a preset array of colors</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillOriginX</font><p></p></td><td valign="top"><font face=" , " size="2">408</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillOriginY</font><p></p></td><td valign="top"><font face=" , " size="2">409</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillShapeOriginX</font><p></p></td><td valign="top"><font face=" , " size="2">410</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillShapeOriginY</font><p></p></td><td valign="top"><font face=" , " size="2">411</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillShadeType</font><p></p></td><td valign="top"><font face=" , " size="2">412</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOSHADETYPE</b></font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Type of shading, if a shaded (gradient) fill.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fFilled</font><p></p></td><td valign="top"><font face=" , " size="2">443</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Is shape filled?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fHitTestFill</font><p></p></td><td valign="top"><font face=" , " size="2">444</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Should we hit test fill? </font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillShape</font><p></p></td><td valign="top"><font face=" , " size="2">445</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Register pattern on shape</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillUseRect</font><p></p></td><td valign="top"><font face=" , " size="2">446</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Use the large rect?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fNoFillHitTest</font><p></p></td><td valign="top"><font face=" , " size="2">447</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Hit test a shape as though filled<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineColor</font><p></p></td><td valign="top"><font face=" , " size="2">448</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td valign="top"><font face=" , " size="2">black</font><p></p></td><td valign="top"><font face=" , " size="2">Color of line</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineOpacity</font><p></p></td><td valign="top"><font face=" , " size="2">449</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td valign="top"><font face=" , " size="2">Not implemented</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineBackColor</font><p></p></td><td valign="top"><font face=" , " size="2">450</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td valign="top"><font face=" , " size="2">white</font><p></p></td><td valign="top"><font face=" , " size="2">Background color</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineCrMod</font><p></p></td><td valign="top"><font face=" , " size="2">451</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td valign="top"><font face=" , " size="2">undefined</font><p></p></td><td valign="top"><font face=" , " size="2">Modification for BW views</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineType</font><p></p></td><td valign="top"><font face=" , " size="2">452</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINETYPE</b></font><p></p></td><td valign="top"><font face=" , " size="2">Solid</font><p></p></td><td valign="top"><font face=" , " size="2">Type of line</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineFillBlip</font><p></p></td><td valign="top"><font face=" , " size="2">453</font><p></p></td><td valign="top"><font face=" , " size="2">IMsoBlip*</font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">Pattern/texture</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineFillBlipName</font><p></p></td><td valign="top"><font face=" , " size="2">454</font><p></p></td><td valign="top"><font face=" , " size="2">WCHAR*</font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">Blip file name</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineFillBlipFlags</font><p></p></td><td valign="top"><font face=" , " size="2">455</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOBLIPFLAGS</b></font><p></p></td><td valign="top"><font face=" , " size="2">Comment</font><p></p></td><td valign="top"><font face=" , " size="2">Blip flags</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineFillWidth</font><p></p></td><td valign="top"><font face=" , " size="2">456</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">How big (A units) to make a metafile texture.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineFillHeight</font><p></p></td><td valign="top"><font face=" , " size="2">457</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineFillDztype</font><p></p></td><td valign="top"><font face=" , " size="2">458</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSODZTYPE</b></font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">How to interpret fillWidth/Height numbers.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineWidth</font><p></p></td><td valign="top"><font face=" , " size="2">459</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">9525</font><p></p></td><td valign="top"><font face=" , " size="2">A units; 1pt == 12700 EMUs</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineMiterLimit</font><p></p></td><td valign="top"><font face=" , " size="2">460</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">8&lt;&lt;16</font><p></p></td><td valign="top"><font face=" , " size="2">ratio (16.16) of width</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineStyle</font><p></p></td><td valign="top"><font face=" , " size="2">461</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINESTYLE</b></font><p></p></td><td valign="top"><font face=" , " size="2">Simple</font><p></p></td><td valign="top"><font face=" , " size="2">Draw parallel lines?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineDashing</font><p></p></td><td valign="top"><font face=" , " size="2">462</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINEDASHING</b></font><p></p></td><td valign="top"><font face=" , " size="2">Solid</font><p></p></td><td valign="top"><font face=" , " size="2">Can be overridden by:</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineDashStyle</font><p></p></td><td valign="top"><font face=" , " size="2">463</font><p></p></td><td valign="top"><font face=" , " size="2"><b>IMsoArray</b></font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">As Win32 ExtCreatePen</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineStartArrowhead</font><p></p></td><td valign="top"><font face=" , " size="2">464</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINEEND</b></font><p></p></td><td valign="top"><font face=" , " size="2">NoEnd</font><p></p></td><td valign="top"><font face=" , " size="2">Arrow at start</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineEndArrowhead</font><p></p></td><td valign="top"><font face=" , " size="2">465</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINEEND</b></font><p></p></td><td valign="top"><font face=" , " size="2">NoEnd</font><p></p></td><td valign="top"><font face=" , " size="2">Arrow at end</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineStartArrowWidth</font><p></p></td><td valign="top"><font face=" , " size="2">466</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINEENDWIDTH</b></font><p></p></td><td valign="top"><font face=" , " size="2">MediumWidthArrow</font><p></p></td><td valign="top"><font face=" , " size="2">Arrow at start</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineStartArrowLength</font><p></p></td><td valign="top"><font face=" , " size="2">467</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINEENDLENGTH</b></font><p></p></td><td valign="top"><font face=" , " size="2">MediumLenArrow</font><p></p></td><td valign="top"><font face=" , " size="2">Arrow at end</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineEndArrowWidth</font><p></p></td><td valign="top"><font face=" , " size="2">468</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINEENDWIDTH</b></font><p></p></td><td valign="top"><font face=" , " size="2">MediumWidthArrow</font><p></p></td><td valign="top"><font face=" , " size="2">Arrow at start</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineEndArrowLength</font><p></p></td><td valign="top"><font face=" , " size="2">469</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINEENDLENGTH</b></font><p></p></td><td valign="top"><font face=" , " size="2">MediumLenArrow</font><p></p></td><td valign="top"><font face=" , " size="2">Arrow at end</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineJoinStyle</font><p></p></td><td valign="top"><font face=" , " size="2">470</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINEJOIN</b></font><p></p></td><td valign="top"><font face=" , " size="2">JoinRound</font><p></p></td><td valign="top"><font face=" , " size="2">How to join lines</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineEndCapStyle</font><p></p></td><td valign="top"><font face=" , " size="2">471</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINECAP</b></font><p></p></td><td valign="top"><font face=" , " size="2">EndCapFlat</font><p></p></td><td valign="top"><font face=" , " size="2">How to end lines</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fArrowheadsOK</font><p></p></td><td valign="top"><font face=" , " size="2">507</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Allow arrowheads if prop. is set</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLine</font><p></p></td><td valign="top"><font face=" , " size="2">508</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td valign="top"><font face=" , " size="2">Any line?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fHitTestLine</font><p></p></td><td valign="top"><font face=" , " size="2">509</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td valign="top"><font face=" , " size="2">Should we hit test lines? </font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineFillShape</font><p></p></td><td valign="top"><font face=" , " size="2">510</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td valign="top"><font face=" , " size="2">Register pattern on shape</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fNoLineDrawDash</font><p></p></td><td valign="top"><font face=" , " size="2">511</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Draw a dashed line if no line<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowType</font><p></p></td><td valign="top"><font face=" , " size="2">512</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOSHADOWTYPE</b></font><p></p></td><td valign="top"><font face=" , " size="2">Offset</font><p></p></td><td valign="top"><font face=" , " size="2">Type of effect</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowColor</font><p></p></td><td valign="top"><font face=" , " size="2">513</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td valign="top"><font face=" , " size="2">0x808080</font><p></p></td><td valign="top"><font face=" , " size="2">Foreground color</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowHighlight</font><p></p></td><td valign="top"><font face=" , " size="2">514</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td valign="top"><font face=" , " size="2">0xCBCBCB</font><p></p></td><td valign="top"><font face=" , " size="2">Embossed color</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowCrMod</font><p></p></td><td valign="top"><font face=" , " size="2">515</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td valign="top"><font face=" , " size="2">undefined</font><p></p></td><td valign="top"><font face=" , " size="2">Modification for BW views</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowOpacity</font><p></p></td><td valign="top"><font face=" , " size="2">516</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td valign="top"><font face=" , " size="2">Fixed 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowOffsetX</font><p></p></td><td valign="top"><font face=" , " size="2">517</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">25400</font><p></p></td><td valign="top"><font face=" , " size="2">Offset shadow</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowOffsetY</font><p></p></td><td valign="top"><font face=" , " size="2">518</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">25400</font><p></p></td><td valign="top"><font face=" , " size="2">Offset shadow</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowSecondOffsetX</font><p></p></td><td valign="top"><font face=" , " size="2">519</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">Double offset shadow</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowSecondOffsetY</font><p></p></td><td valign="top"><font face=" , " size="2">520</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">Double offset shadow</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowScaleXToX</font><p></p></td><td valign="top"><font face=" , " size="2">521</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td valign="top"><font face=" , " size="2">16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowScaleYToX</font><p></p></td><td valign="top"><font face=" , " size="2">522</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowScaleXToY</font><p></p></td><td valign="top"><font face=" , " size="2">523</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowScaleYToY</font><p></p></td><td valign="top"><font face=" , " size="2">524</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td valign="top"><font face=" , " size="2">16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowPerspectiveX</font><p></p></td><td valign="top"><font face=" , " size="2">525</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">16.16 / weight</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowPerspectiveY</font><p></p></td><td valign="top"><font face=" , " size="2">526</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">16.16 / weight</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowWeight</font><p></p></td><td valign="top"><font face=" , " size="2">527</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;8</font><p></p></td><td valign="top"><font face=" , " size="2">scaling factor</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowOriginX</font><p></p></td><td valign="top"><font face=" , " size="2">528</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowOriginY</font><p></p></td><td valign="top"><font face=" , " size="2">529</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fShadow</font><p></p></td><td valign="top"><font face=" , " size="2">574</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Any shadow?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fshadowObscured</font><p></p></td><td valign="top"><font face=" , " size="2">575</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Excel5-style shadow<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveType</font><p></p></td><td valign="top"><font face=" , " size="2">576</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOXFORMTYPE</b></font><p></p></td><td valign="top"><font face=" , " size="2">Shape</font><p></p></td><td valign="top"><font face=" , " size="2">Where transform applies</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveOffsetX</font><p></p></td><td valign="top"><font face=" , " size="2">577</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">The LONG values define a transformation matrix, effectively, each value is scaled by the perspectiveWeight parameter.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveOffsetY</font><p></p></td><td valign="top"><font face=" , " size="2">578</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveScaleXToX</font><p></p></td><td valign="top"><font face=" , " size="2">579</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveScaleYToX</font><p></p></td><td valign="top"><font face=" , " size="2">580</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveScaleXToY</font><p></p></td><td valign="top"><font face=" , " size="2">581</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveScaleYToY</font><p></p></td><td valign="top"><font face=" , " size="2">582</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectivePerspectiveX</font><p></p></td><td valign="top"><font face=" , " size="2">583</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectivePerspectiveY</font><p></p></td><td valign="top"><font face=" , " size="2">584</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveWeight</font><p></p></td><td valign="top"><font face=" , " size="2">585</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;8</font><p></p></td><td valign="top"><font face=" , " size="2">Scaling factor</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveOriginX</font><p></p></td><td valign="top"><font face=" , " size="2">586</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;15</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveOriginY</font><p></p></td><td valign="top"><font face=" , " size="2">587</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;15</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fPerspective</font><p></p></td><td valign="top"><font face=" , " size="2">639</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">On/off<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="6"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="0"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Default</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DSpecularAmt</font><p></p></td><td valign="top"><font face=" , " size="2">640</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Fixed-point 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DDiffuseAmt</font><p></p></td><td valign="top"><font face=" , " size="2">641</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">65536</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Fixed-point 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DShininess</font><p></p></td><td valign="top"><font face=" , " size="2">642</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">5</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Default gives OK results</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DEdgeThickness</font><p></p></td><td valign="top"><font face=" , " size="2">643</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">12700</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Specular edge thickness</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DExtrudeForward</font><p></p></td><td valign="top"><font face=" , " size="2">644</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Distance of extrusion in EMUs</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DExtrudeBackward</font><p></p></td><td valign="top"><font face=" , " size="2">645</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">457200</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DExtrudePlane</font><p></p></td><td valign="top"><font face=" , " size="2">646</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Extrusion direction</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DExtrusionColor</font><p></p></td><td valign="top"><font face=" , " size="2">647</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td valign="top"><font face=" , " size="2">FillThenLine</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Basic color of extruded part of shape; the lighting model used will determine the exact shades used when rendering. </font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DCrMod</font><p></p></td><td valign="top"><font face=" , " size="2">648</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">undefined</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Modification for BW views</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">f3D</font><p></p></td><td valign="top"><font face=" , " size="2">700</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Does this shape have a 3D effect?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fc3DMetallic</font><p></p></td><td valign="top"><font face=" , " size="2">701</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Use metallic specularity?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fc3DUseExtrusionColor</font><p></p></td><td valign="top"><font face=" , " size="2">702</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fc3DLightFace</font><p></p></td><td valign="top"><font face=" , " size="2">703</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"><p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DYRotationAngle</font><p></p></td><td valign="top"><font face=" , " size="2">704</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">degrees (16.16) about y axis</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DXRotationAngle</font><p></p></td><td valign="top"><font face=" , " size="2">705</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">degrees (16.16) about x axis</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DRotationAxisX</font><p></p></td><td valign="top"><font face=" , " size="2">706</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">100</font><p></p></td><td valign="top"><font face=" , " size="2">These specify the rotation axis; only their relative magnitudes matter.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DRotationAxisY</font><p></p></td><td valign="top"><font face=" , " size="2">707</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DRotationAxisZ</font><p></p></td><td valign="top"><font face=" , " size="2">708</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DRotationAngle</font><p></p></td><td valign="top"><font face=" , " size="2">709</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">degrees (16.16) about axis</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DRotationCenterX</font><p></p></td><td valign="top"><font face=" , " size="2">710</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">rotation center x (16.16 or g-units)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DRotationCenterY</font><p></p></td><td valign="top"><font face=" , " size="2">711</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">rotation center y (16.16 or g-units)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DRotationCenterZ</font><p></p></td><td valign="top"><font face=" , " size="2">712</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">rotation center z (absolute (emus))</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DRenderMode</font><p></p></td><td valign="top"><font face=" , " size="2">713</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSO3DRENDERMODE</b></font><p></p></td><td valign="top"><font face=" , " size="2">FullRender</font><p></p></td><td valign="top"><font face=" , " size="2">Full,wireframe, or bcube</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DTolerance</font><p></p></td><td valign="top"><font face=" , " size="2">714</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">30000</font><p></p></td><td valign="top"><font face=" , " size="2">pixels (16.16)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DXViewpoint</font><p></p></td><td valign="top"><font face=" , " size="2">715</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1250000</font><p></p></td><td valign="top"><font face=" , " size="2">X view point (emus)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DYViewpoint</font><p></p></td><td valign="top"><font face=" , " size="2">716</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">-1250000</font><p></p></td><td valign="top"><font face=" , " size="2">Y view point (emus)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DZViewpoint</font><p></p></td><td valign="top"><font face=" , " size="2">717</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">9000000</font><p></p></td><td valign="top"><font face=" , " size="2">Z view distance (emus)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DOriginX</font><p></p></td><td valign="top"><font face=" , " size="2">718</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">32768</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DOriginY</font><p></p></td><td valign="top"><font face=" , " size="2">719</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">-32768</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DSkewAngle</font><p></p></td><td valign="top"><font face=" , " size="2">720</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">-8847360</font><p></p></td><td valign="top"><font face=" , " size="2">degree (16.16) skew angle</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DSkewAmount</font><p></p></td><td valign="top"><font face=" , " size="2">721</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">50</font><p></p></td><td valign="top"><font face=" , " size="2">Percentage skew amount</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DAmbientIntensity</font><p></p></td><td valign="top"><font face=" , " size="2">722</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">20000</font><p></p></td><td valign="top"><font face=" , " size="2">Fixed point intensity</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DKeyX</font><p></p></td><td valign="top"><font face=" , " size="2">723</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">50000</font><p></p></td><td valign="top"><font face=" , " size="2">Key light source direc-</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DKeyY</font><p></p></td><td valign="top"><font face=" , " size="2">724</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">tion; only their relative</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DKeyZ</font><p></p></td><td valign="top"><font face=" , " size="2">725</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">10000</font><p></p></td><td valign="top"><font face=" , " size="2">magnitudes matter</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DKeyIntensity</font><p></p></td><td valign="top"><font face=" , " size="2">726</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">38000</font><p></p></td><td valign="top"><font face=" , " size="2">Fixed point intensity</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DFillX</font><p></p></td><td valign="top"><font face=" , " size="2">727</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">-50000</font><p></p></td><td valign="top"><font face=" , " size="2">Fill light source direc-</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DFillY</font><p></p></td><td valign="top"><font face=" , " size="2">728</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">tion; only their relative</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DFillZ</font><p></p></td><td valign="top"><font face=" , " size="2">729</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">10000</font><p></p></td><td valign="top"><font face=" , " size="2">magnitudes matter</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DFillIntensity</font><p></p></td><td valign="top"><font face=" , " size="2">730</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">38000</font><p></p></td><td valign="top"><font face=" , " size="2">Fixed point intensity</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fc3DConstrainRotation</font><p></p></td><td valign="top"><font face=" , " size="2">763</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fc3DRotationCenterAuto</font><p></p></td><td valign="top"><font face=" , " size="2">764</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fc3DParallel</font><p></p></td><td valign="top"><font face=" , " size="2">765</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">1</font><p></p></td><td valign="top"><font face=" , " size="2">Parallel projection?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fc3DKeyHarsh</font><p></p></td><td valign="top"><font face=" , " size="2">766</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">1</font><p></p></td><td valign="top"><font face=" , " size="2">Is key lighting harsh?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fc3DFillHarsh</font><p></p></td><td valign="top"><font face=" , " size="2">767</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">Is fill lighting harsh?<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="6"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="0"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Default</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">hspMaster</font><p></p></td><td valign="top"><font face=" , " size="2">769</font><p></p></td><td valign="top"><font face=" , " size="2">MSOHSP</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">NULL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">master shape</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">cxstyle</font><p></p></td><td valign="top"><font face=" , " size="2">771</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCXSTYLE</b></font><p></p></td><td valign="top"><font face=" , " size="2">None</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Type of connector</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">bWMode</font><p></p></td><td valign="top"><font face=" , " size="2">772</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOBWMODE</b></font><p></p></td><td valign="top"><font face=" , " size="2">Automatic</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Settings for modifications to be made when in different forms of black-and-white mode.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">bWModePureBW</font><p></p></td><td valign="top"><font face=" , " size="2">773</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOBWMODE</b></font><p></p></td><td valign="top"><font face=" , " size="2">Automatic</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">bWModeBW</font><p></p></td><td valign="top"><font face=" , " size="2">774</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOBWMODE</b></font><p></p></td><td valign="top"><font face=" , " size="2">Automatic</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fOleIcon</font><p></p></td><td valign="top"><font face=" , " size="2">826</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">For OLE objects, whether the object is in icon form</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fPreferRelativeResize</font><p></p></td><td valign="top"><font face=" , " size="2">827</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">For UI only. Prefer relative resizing. </font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockShapeType</font><p></p></td><td valign="top"><font face=" , " size="2">828</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Lock the shape type (don't allow Change Shape)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fDeleteAttachedObject</font><p></p></td><td valign="top"><font face=" , " size="2">830</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fBackground</font><p></p></td><td valign="top"><font face=" , " size="2">831</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">If TRUE, this is the background shape.<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">spcot</font><p></p></td><td valign="top"><font face=" , " size="2">832</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOSPCOT</b></font><p></p></td><td valign="top"><font face=" , " size="2">TwoSegment</font><p></p></td><td valign="top"><font face=" , " size="2">Callout type</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dxyCalloutGap</font><p></p></td><td valign="top"><font face=" , " size="2">833</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1/12 inch</font><p></p></td><td valign="top"><font face=" , " size="2">Distance from box to first point.(EMUs)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">spcoa</font><p></p></td><td valign="top"><font face=" , " size="2">834</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOSPCOA</b></font><p></p></td><td valign="top"><font face=" , " size="2">Any</font><p></p></td><td valign="top"><font face=" , " size="2">Callout angle</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">spcod</font><p></p></td><td valign="top"><font face=" , " size="2">835</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOSPCOD</b></font><p></p></td><td valign="top"><font face=" , " size="2">Specified</font><p></p></td><td valign="top"><font face=" , " size="2">Callout drop type</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dxyCalloutDropSpecified</font><p></p></td><td valign="top"><font face=" , " size="2">836</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">9 points</font><p></p></td><td valign="top"><font face=" , " size="2">if msospcodSpecified, the actual drop distance</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dxyCalloutLengthSpecified</font><p></p></td><td valign="top"><font face=" , " size="2">837</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">if fCalloutLengthSpecified, the actual distance</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fCallout</font><p></p></td><td valign="top"><font face=" , " size="2">889</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Is the shape a callout?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fCalloutAccentBar</font><p></p></td><td valign="top"><font face=" , " size="2">890</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">does callout have accent bar</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fCalloutTextBorder</font><p></p></td><td valign="top"><font face=" , " size="2">891</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td valign="top"><font face=" , " size="2">does callout have a text border</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fCalloutMinusX</font><p></p></td><td valign="top"><font face=" , " size="2">892</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fCalloutMinusY</font><p></p></td><td valign="top"><font face=" , " size="2">893</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fCalloutDropAuto</font><p></p></td><td valign="top"><font face=" , " size="2">894</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">If true, then we occasionally invert the drop distance</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fCalloutLengthSpecified</font><p></p></td><td valign="top"><font face=" , " size="2">895</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">if true, we look at dxyCalloutLengthSpecified<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">wzName</font><p></p></td><td valign="top"><font face=" , " size="2">896</font><p></p></td><td valign="top"><font face=" , " size="2">WCHAR*</font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">Shape Name (present only if explicitly set)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">wzDescription</font><p></p></td><td valign="top"><font face=" , " size="2">897</font><p></p></td><td valign="top"><font face=" , " size="2">WCHAR*</font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">alternate text</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pihlShape</font><p></p></td><td valign="top"><font face=" , " size="2">898</font><p></p></td><td valign="top"><font face=" , " size="2">IHlink*</font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">The hyperlink in the shape.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pWrapPolygonVertices</font><p></p></td><td valign="top"><font face=" , " size="2">899</font><p></p></td><td valign="top"><font face=" , " size="2"><b>IMsoArray</b></font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">The polygon that text will be wrapped around (Word)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dxWrapDistLeft</font><p></p></td><td valign="top"><font face=" , " size="2">900</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1/8 inch</font><p></p></td><td valign="top"><font face=" , " size="2">Left wrapping distance from text (Word)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dyWrapDistTop</font><p></p></td><td valign="top"><font face=" , " size="2">901</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">Top wrapping distance from text (Word)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dxWrapDistRight</font><p></p></td><td valign="top"><font face=" , " size="2">902</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1/8 inch</font><p></p></td><td valign="top"><font face=" , " size="2">Right wrapping distance from text (Word)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dyWrapDistBottom</font><p></p></td><td valign="top"><font face=" , " size="2">903</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">Bottom wrapping distance from text (Word)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lidRegroup</font><p></p></td><td valign="top"><font face=" , " size="2">904</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">Regroup ID </font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fEditedWrap</font><p></p></td><td valign="top"><font face=" , " size="2">953</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Has the wrap polygon been edited?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fBehindDocument</font><p></p></td><td valign="top"><font face=" , " size="2">954</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Word-only (shape is behind text)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fOnDblClickNotify</font><p></p></td><td valign="top"><font face=" , " size="2">955</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Notify client on a double click</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fIsButton</font><p></p></td><td valign="top"><font face=" , " size="2">956</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">A button shape (i.e., clicking performs an action). Set for shapes with attached hyperlinks or macros.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fOneD</font><p></p></td><td valign="top"><font face=" , " size="2">957</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">1D adjustment</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fHidden</font><p></p></td><td valign="top"><font face=" , " size="2">958</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Do not display</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fPrint</font><p></p></td><td valign="top"><font face=" , " size="2">959</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td valign="top"><font face=" , " size="2">Print this shape</font><p></p></td></tr></tbody></table>
+
+ <hr>
+ <address><a href="mailto:Henning.Brinkmann@sun.com">Henning Brinkmann - Sun Germany - Software Engineer</a></address>
+<!-- Created: Mon Jul 10 13:57:58 CEST 2006 -->
+<!-- hhmts start -->
+Last modified: Mon Jul 10 17:55:06 CEST 2006
+<!-- hhmts end -->
+ </body>
+</html>
diff --git a/writerfilter/source/doctok/escherdoc.xsl b/writerfilter/source/doctok/escherdoc.xsl
new file mode 100644
index 000000000000..04a63865e9c3
--- /dev/null
+++ b/writerfilter/source/doctok/escherdoc.xsl
@@ -0,0 +1,145 @@
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default" xmlns:xhtml="http://www.w3.org/1999/xhtml">
+<xsl:output method="xml" indent="yes"/>
+
+<xsl:template match="/">
+ <out>
+ <xsl:for-each select="//xhtml:table">
+ <xsl:apply-templates select="." mode="eschertable"/>
+ </xsl:for-each>
+ </out>
+</xsl:template>
+
+<xsl:template match="xhtml:table" mode="eschertable">
+ <xsl:apply-templates select=".//xhtml:tr[position() > 1]" mode="eschertable"/>
+</xsl:template>
+
+<xsl:template match="xhtml:tr" mode="eschertable">
+ <xsl:variable name="name">
+ <xsl:value-of select=".//xhtml:td[1]"/>
+ </xsl:variable>
+ <UML:Class>
+ <xsl:attribute name="xmi.id">
+ <xsl:value-of select="$name"/>
+ </xsl:attribute>
+ <xsl:attribute name="name">
+ <xsl:value-of select="$name"/>
+ </xsl:attribute>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt" />
+ </UML:ModelElement.stereotype>
+ <xsl:apply-templates select=".//xhtml:td[1]" mode="optname"/>
+ <xsl:apply-templates select=".//xhtml:td[2]" mode="fopid"/>
+ <xsl:apply-templates select=".//xhtml:td[3]" mode="type"/>
+ <xsl:apply-templates select=".//xhtml:td[4]" mode="default"/>
+ <xsl:apply-templates select=".//xhtml:td[5]" mode="comment"/>
+ </UML:Class>
+</xsl:template>
+
+<xsl:template match="xhtml:td" mode="optname">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shp<xsl:value-of select="."/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname" />
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+</xsl:template>
+
+<xsl:template match="xhtml:td" mode="fopid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue><xsl:value-of select="."/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid" />
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+</xsl:template>
+
+<xsl:template match="xhtml:td" mode="type">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>
+ <xsl:call-template name="saltype">
+ <xsl:with-param name="type" select="."/>
+ </xsl:call-template>
+ </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type" />
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <xsl:if test=".='BOOL'">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool" />
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match="xhtml:td" mode="default">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue><xsl:value-of select="."/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default" />
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+</xsl:template>
+
+<xsl:template match="xhtml:td" mode="comment">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue><xsl:value-of select="."/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment" />
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+</xsl:template>
+
+<xsl:template name="saltype">
+ <xsl:param name="type"/>
+ <xsl:choose>
+ <xsl:when test="$type='LONG'">U32</xsl:when>
+ <xsl:when test="$type='BOOL'">U8</xsl:when>
+ <xsl:when test="$type='WCHAR*'">String</xsl:when>
+ <xsl:otherwise>unknown</xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/doctok/genqnametostr b/writerfilter/source/doctok/genqnametostr
new file mode 100644
index 000000000000..a7cd32db5296
--- /dev/null
+++ b/writerfilter/source/doctok/genqnametostr
@@ -0,0 +1,33 @@
+#!/bin/tcsh
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+
+xalan -xsl qnametostr.xsl -in resources.xmi > qnametostr.tmp
+cat qnametostrheader > qnametostr.cxx
+cat qnametostr.tmp >> qnametostr.cxx
+cat ../ooxml/qnametostr.tmp >> qnametostr.cxx
+cat qnametostrfooter >> qnametostr.cxx
diff --git a/writerfilter/source/doctok/makefile.mk b/writerfilter/source/doctok/makefile.mk
new file mode 100644
index 000000000000..6a407a0b91ea
--- /dev/null
+++ b/writerfilter/source/doctok/makefile.mk
@@ -0,0 +1,156 @@
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+
+PRJ=..$/..
+PRJNAME=writerfilter
+TARGET=doctok
+#LIBTARGET=NO
+ENABLE_EXCEPTIONS=TRUE
+#USE_DEFFILE=TRUE
+#EXTERNAL_WARNINGS_NOT_ERRORS=TRUE
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/inc$/writerfilter.mk
+
+#CFLAGS+=-DISOLATION_AWARE_ENABLED -DWIN32_LEAN_AND_MEAN -DXML_UNICODE -D_NTSDK -DUNICODE -D_UNICODE -D_WIN32_WINNT=0x0501
+#CFLAGS+=-wd4710 -wd4711 -wd4514 -wd4619 -wd4217 -wd4820
+#CDEFS+=-DDEBUG_DOCTOK_DUMP
+
+
+# --- Files --------------------------------------------------------
+
+SLOFILES= \
+ $(SLO)$/WW8Annotation.obj \
+ $(SLO)$/WW8OutputWithDepth.obj \
+ $(SLO)$/WW8Text.obj \
+ $(SLO)$/DffImpl.obj \
+ $(SLO)$/Dff.obj \
+ $(SLO)$/WW8Picture.obj \
+ $(SLO)$/WW8Sttbf.obj \
+ $(SLO)$/WW8Table.obj \
+ $(SLO)$/WW8StyleSheet.obj \
+ $(SLO)$/WW8FontTable.obj \
+ $(SLO)$/WW8LFOTable.obj \
+ $(SLO)$/WW8ListTable.obj \
+ $(SLO)$/resources.obj \
+ $(SLO)$/doctokutil.obj \
+ $(SLO)$/WW8CpAndFc.obj \
+ $(SLO)$/WW8StructBase.obj \
+ $(SLO)$/WW8Clx.obj \
+ $(SLO)$/WW8FKPImpl.obj \
+ $(SLO)$/WW8BinTableImpl.obj \
+ $(SLO)$/WW8StreamImpl.obj \
+ $(SLO)$/WW8PropertySetImpl.obj \
+ $(SLO)$/WW8DocumentImpl.obj \
+ $(SLO)$/WW8PieceTableImpl.obj \
+ $(SLO)$/WW8ResourceModelImpl.obj
+
+
+SHL1TARGET=$(TARGET)
+
+.IF "$(GUI)"=="UNX" || "$(GUI)"=="MAC"
+RESOURCEMODELLIB=-lresourcemodel
+.ELIF "$(GUI)"=="OS2"
+RESOURCEMODELLIB=$(LB)$/iresourcemodel.lib
+.ELIF "$(GUI)"=="WNT"
+.IF "$(COM)"=="GCC"
+RESOURCEMODELLIB=-lresourcemodel
+.ELSE
+RESOURCEMODELLIB=$(LB)$/iresourcemodel.lib
+.ENDIF
+.ENDIF
+
+
+SHL1STDLIBS=$(SALLIB)\
+ $(CPPULIB)\
+ $(CPPUHELPERLIB) \
+ $(RESOURCEMODELLIB)
+SHL1IMPLIB=i$(SHL1TARGET)
+SHL1USE_EXPORTS=name
+
+SHL1OBJS=$(SLOFILES)
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+DEF1NAME=$(SHL1TARGET)
+DEFLIB1NAME=$(TARGET)
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+DOCTOKHXXOUTDIR=$(INCCOM)/doctok
+DOCTOKCXXOUTDIR=$(MISC)
+DOCTOKHXXOUTDIRCREATED=$(DOCTOKHXXOUTDIR)/created
+
+DOCTOKMODEL=resources.xmi
+DOCTOKRESOURCESXSL=resources.xsl
+DOCTOKRESOURCESIMPLXSL=resourcesimpl.xsl
+DOCTOKRESOURCEIDSXSL=resourceids.xsl
+DOCTOKSPRMIDSXSL=sprmids.xsl
+DOCTOKRESOURCETOOLS=resourcetools.xsl
+
+DOCTOKRESOURCEIDSHXX=$(DOCTOKHXXOUTDIR)$/resourceids.hxx
+SPRMIDSHXX=$(DOCTOKHXXOUTDIR)$/sprmids.hxx
+RESOURCESHXX=$(DOCTOKHXXOUTDIR)$/resources.hxx
+RESOURCESCXX=$(DOCTOKCXXOUTDIR)$/resources.cxx
+
+DOCTOKGENHEADERS=$(DOCTOKRESOURCEIDSHXX) $(SPRMIDSHXX) $(RESOURCESHXX)
+DOCTOKGENFILES=$(DOCTOKGENHEADERS) $(RESOURCESCXX)
+
+$(DOCTOKHXXOUTDIRCREATED):
+ @$(MKDIRHIER) $(DOCTOKHXXOUTDIR)
+ @$(TOUCH) $@
+
+$(DOCTOKGENHEADERS): $(DOCTOKHXXOUTDIRCREATED)
+
+$(RESOURCESHXX): $(DOCTOKRESOURCESXSL) $(DOCTOKMODEL)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(DOCTOKRESOURCESXSL) $(DOCTOKMODEL) > $@
+
+$(SPRMIDSHXX): $(DOCTOKSPRMIDSXSL) $(DOCTOKMODEL)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(DOCTOKSPRMIDSXSL) $(DOCTOKMODEL) > $@
+
+$(RESOURCESCXX): $(DOCTOKRESOURCESIMPLXSL) $(DOCTOKMODEL) $(DOCTOKRESOURCEIDSHXX) $(DOCTOKRESOURCETOOLS)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(DOCTOKRESOURCESIMPLXSL) $(DOCTOKMODEL) > $@
+
+$(DOCTOKRESOURCEIDSHXX): $(DOCTOKRESOURCEIDSXSL) $(DOCTOKMODEL)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(DOCTOKRESOURCEIDSXSL) $(DOCTOKMODEL) > $@
+
+$(SLOFILES) : $(DOCTOKGENHEADERS)
+
+.PHONY: genmake genclean
+
+genmake: $(DOCTOKGENFILES)
+
+genclean:
+ rm -f $(DOCTOKGENFILES)
+
+genheaders: $(DOCTOKGENHEADERS)
diff --git a/writerfilter/source/doctok/qnametostr.xsl b/writerfilter/source/doctok/qnametostr.xsl
new file mode 100644
index 000000000000..44fca1e5dde5
--- /dev/null
+++ b/writerfilter/source/doctok/qnametostr.xsl
@@ -0,0 +1,41 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+<xsl:output method="text" />
+
+<xsl:include href="resourcetools.xsl"/>
+
+<xsl:template match="/">
+ <xsl:apply-templates select=".//UML:Model" mode="qnametostr"/>
+ <xsl:apply-templates select='.//UML:Model' mode='sprmidstoxml'/>
+ <xsl:apply-templates select='.//UML:Model' mode='analyzerdoctokids'/>
+</xsl:template>
+</xsl:stylesheet>
diff --git a/writerfilter/source/doctok/qnametostrfooter b/writerfilter/source/doctok/qnametostrfooter
new file mode 100644
index 000000000000..1ec35ed30254
--- /dev/null
+++ b/writerfilter/source/doctok/qnametostrfooter
@@ -0,0 +1,2 @@
+}
+}
diff --git a/writerfilter/source/doctok/qnametostrheader b/writerfilter/source/doctok/qnametostrheader
new file mode 100644
index 000000000000..07ce47387153
--- /dev/null
+++ b/writerfilter/source/doctok/qnametostrheader
@@ -0,0 +1,36 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#include "WW8ResourceModelImpl.hxx"
+
+namespace doctok
+{
+
+QNameToString::QNameToString()
+{
diff --git a/writerfilter/source/doctok/replacesprmids b/writerfilter/source/doctok/replacesprmids
new file mode 100755
index 000000000000..e4d6be329a4e
--- /dev/null
+++ b/writerfilter/source/doctok/replacesprmids
@@ -0,0 +1,517 @@
+
+#!/bin/sh
+
+sed "s/0xc601/NS_sprm::LN_PIstdPermute/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC601/NS_sprm::LN_PIstdPermute/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3644/NS_sprm::LN_TCantSplit/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3644/NS_sprm::LN_TCantSplit/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2602/NS_sprm::LN_PIncLvl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2602/NS_sprm::LN_PIncLvl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2461/NS_sprm::LN_PJcExtra/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2461/NS_sprm::LN_PJcExtra/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2403/NS_sprm::LN_PJc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2403/NS_sprm::LN_PJc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2404/NS_sprm::LN_PFSideBySide/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2404/NS_sprm::LN_PFSideBySide/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2405/NS_sprm::LN_PFKeep/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2405/NS_sprm::LN_PFKeep/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2406/NS_sprm::LN_PFKeepFollow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2406/NS_sprm::LN_PFKeepFollow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2407/NS_sprm::LN_PFPageBreakBefore/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2407/NS_sprm::LN_PFPageBreakBefore/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2408/NS_sprm::LN_PBrcl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2408/NS_sprm::LN_PBrcl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2409/NS_sprm::LN_PBrcp/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2409/NS_sprm::LN_PBrcp/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x260a/NS_sprm::LN_PIlvl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x260A/NS_sprm::LN_PIlvl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x460b/NS_sprm::LN_PIlfo/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x460B/NS_sprm::LN_PIlfo/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x240c/NS_sprm::LN_PFNoLineNumb/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x240C/NS_sprm::LN_PFNoLineNumb/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc60d/NS_sprm::LN_PChgTabsPapx/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC60D/NS_sprm::LN_PChgTabsPapx/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x840e/NS_sprm::LN_PDxaRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x840E/NS_sprm::LN_PDxaRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x840f/NS_sprm::LN_PDxaLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x840F/NS_sprm::LN_PDxaLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4610/NS_sprm::LN_PNest/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4610/NS_sprm::LN_PNest/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x8411/NS_sprm::LN_PDxaLeft1/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x8411/NS_sprm::LN_PDxaLeft1/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6412/NS_sprm::LN_PDyaLine/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6412/NS_sprm::LN_PDyaLine/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xa413/NS_sprm::LN_PDyaBefore/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xA413/NS_sprm::LN_PDyaBefore/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xa414/NS_sprm::LN_PDyaAfter/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xA414/NS_sprm::LN_PDyaAfter/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc615/NS_sprm::LN_PChgTabs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC615/NS_sprm::LN_PChgTabs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2416/NS_sprm::LN_PFInTable/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2416/NS_sprm::LN_PFInTable/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x244b/NS_sprm::LN_PCell/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x244B/NS_sprm::LN_PCell/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x244c/NS_sprm::LN_PRow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x244C/NS_sprm::LN_PRow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2417/NS_sprm::LN_PFTtp/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2417/NS_sprm::LN_PFTtp/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x8418/NS_sprm::LN_PDxaAbs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x8418/NS_sprm::LN_PDxaAbs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x8419/NS_sprm::LN_PDyaAbs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x8419/NS_sprm::LN_PDyaAbs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x841a/NS_sprm::LN_PDxaWidth/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x841A/NS_sprm::LN_PDxaWidth/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x261b/NS_sprm::LN_PPc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x261B/NS_sprm::LN_PPc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x461c/NS_sprm::LN_PBrcTop10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x461C/NS_sprm::LN_PBrcTop10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x461d/NS_sprm::LN_PBrcLeft10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x461D/NS_sprm::LN_PBrcLeft10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x461e/NS_sprm::LN_PBrcBottom10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x461E/NS_sprm::LN_PBrcBottom10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x461f/NS_sprm::LN_PBrcRight10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x461F/NS_sprm::LN_PBrcRight10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4620/NS_sprm::LN_PBrcBetween10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4620/NS_sprm::LN_PBrcBetween10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4621/NS_sprm::LN_PBrcBar10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4621/NS_sprm::LN_PBrcBar10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4622/NS_sprm::LN_PDxaFromText10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4622/NS_sprm::LN_PDxaFromText10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2423/NS_sprm::LN_PWr/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2423/NS_sprm::LN_PWr/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6629/NS_sprm::LN_PBrcBar/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6629/NS_sprm::LN_PBrcBar/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x242a/NS_sprm::LN_PFNoAutoHyph/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x242A/NS_sprm::LN_PFNoAutoHyph/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x442b/NS_sprm::LN_PWHeightAbs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x442B/NS_sprm::LN_PWHeightAbs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x442c/NS_sprm::LN_PDcs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x442C/NS_sprm::LN_PDcs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x442d/NS_sprm::LN_PShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x442D/NS_sprm::LN_PShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x842e/NS_sprm::LN_PDyaFromText/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x842E/NS_sprm::LN_PDyaFromText/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x842f/NS_sprm::LN_PDxaFromText/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x842F/NS_sprm::LN_PDxaFromText/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2430/NS_sprm::LN_PFLocked/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2430/NS_sprm::LN_PFLocked/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2431/NS_sprm::LN_PFWidowControl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2431/NS_sprm::LN_PFWidowControl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc632/NS_sprm::LN_PRuler/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC632/NS_sprm::LN_PRuler/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2433/NS_sprm::LN_PFKinsoku/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2433/NS_sprm::LN_PFKinsoku/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2434/NS_sprm::LN_PFWordWrap/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2434/NS_sprm::LN_PFWordWrap/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2435/NS_sprm::LN_PFOverflowPunct/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2435/NS_sprm::LN_PFOverflowPunct/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2436/NS_sprm::LN_PFTopLinePunct/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2436/NS_sprm::LN_PFTopLinePunct/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2437/NS_sprm::LN_PFAutoSpaceDE/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2437/NS_sprm::LN_PFAutoSpaceDE/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2438/NS_sprm::LN_PFAutoSpaceDN/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2438/NS_sprm::LN_PFAutoSpaceDN/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4439/NS_sprm::LN_PWAlignFont/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4439/NS_sprm::LN_PWAlignFont/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x443a/NS_sprm::LN_PFrameTextFlow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x443A/NS_sprm::LN_PFrameTextFlow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x243b/NS_sprm::LN_PISnapBaseLine/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x243B/NS_sprm::LN_PISnapBaseLine/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc63e/NS_sprm::LN_PAnld/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC63E/NS_sprm::LN_PAnld/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc63f/NS_sprm::LN_PPropRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC63F/NS_sprm::LN_PPropRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2640/NS_sprm::LN_POutLvl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2640/NS_sprm::LN_POutLvl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2441/NS_sprm::LN_PFBiDi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2441/NS_sprm::LN_PFBiDi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2443/NS_sprm::LN_PFNumRMIns/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2443/NS_sprm::LN_PFNumRMIns/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2444/NS_sprm::LN_PCrLf/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2444/NS_sprm::LN_PCrLf/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc645/NS_sprm::LN_PNumRM/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC645/NS_sprm::LN_PNumRM/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6645/NS_sprm::LN_PHugePapx/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6645/NS_sprm::LN_PHugePapx/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2447/NS_sprm::LN_PFUsePgsuSettings/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2447/NS_sprm::LN_PFUsePgsuSettings/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2448/NS_sprm::LN_PFAdjustRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2448/NS_sprm::LN_PFAdjustRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0800/NS_sprm::LN_CFRMarkDel/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0800/NS_sprm::LN_CFRMarkDel/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0801/NS_sprm::LN_CFRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0801/NS_sprm::LN_CFRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0802/NS_sprm::LN_CFFldVanish/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0802/NS_sprm::LN_CFFldVanish/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6a03/NS_sprm::LN_CPicLocation/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6A03/NS_sprm::LN_CPicLocation/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4804/NS_sprm::LN_CIbstRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4804/NS_sprm::LN_CIbstRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6805/NS_sprm::LN_CDttmRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6805/NS_sprm::LN_CDttmRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0806/NS_sprm::LN_CFData/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0806/NS_sprm::LN_CFData/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4807/NS_sprm::LN_CIdslRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4807/NS_sprm::LN_CIdslRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xea08/NS_sprm::LN_CChs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xEA08/NS_sprm::LN_CChs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6a09/NS_sprm::LN_CSymbol/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6A09/NS_sprm::LN_CSymbol/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x080a/NS_sprm::LN_CFOle2/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x080A/NS_sprm::LN_CFOle2/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x480b/NS_sprm::LN_CIdCharType/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x480B/NS_sprm::LN_CIdCharType/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a0c/NS_sprm::LN_CHighlight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A0C/NS_sprm::LN_CHighlight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x680e/NS_sprm::LN_CObjLocation/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x680E/NS_sprm::LN_CObjLocation/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a10/NS_sprm::LN_CFFtcAsciSymb/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A10/NS_sprm::LN_CFFtcAsciSymb/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a30/NS_sprm::LN_CIstd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A30/NS_sprm::LN_CIstd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca31/NS_sprm::LN_CIstdPermute/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA31/NS_sprm::LN_CIstdPermute/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a32/NS_sprm::LN_CDefault/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A32/NS_sprm::LN_CDefault/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a33/NS_sprm::LN_CPlain/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A33/NS_sprm::LN_CPlain/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a34/NS_sprm::LN_CKcd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A34/NS_sprm::LN_CKcd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0835/NS_sprm::LN_CFBold/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0835/NS_sprm::LN_CFBold/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0836/NS_sprm::LN_CFItalic/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0836/NS_sprm::LN_CFItalic/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0837/NS_sprm::LN_CFStrike/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0837/NS_sprm::LN_CFStrike/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0838/NS_sprm::LN_CFOutline/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0838/NS_sprm::LN_CFOutline/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0839/NS_sprm::LN_CFShadow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0839/NS_sprm::LN_CFShadow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x083a/NS_sprm::LN_CFSmallCaps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x083A/NS_sprm::LN_CFSmallCaps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x083b/NS_sprm::LN_CFCaps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x083B/NS_sprm::LN_CFCaps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x083c/NS_sprm::LN_CFVanish/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x083C/NS_sprm::LN_CFVanish/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a3d/NS_sprm::LN_CFtcDefault/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A3D/NS_sprm::LN_CFtcDefault/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a3e/NS_sprm::LN_CKul/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A3E/NS_sprm::LN_CKul/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xea3f/NS_sprm::LN_CSizePos/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xEA3F/NS_sprm::LN_CSizePos/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x8840/NS_sprm::LN_CDxaSpace/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x8840/NS_sprm::LN_CDxaSpace/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a41/NS_sprm::LN_CLid/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A41/NS_sprm::LN_CLid/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a42/NS_sprm::LN_CIco/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A42/NS_sprm::LN_CIco/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a43/NS_sprm::LN_CHps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A43/NS_sprm::LN_CHps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a44/NS_sprm::LN_CHpsInc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A44/NS_sprm::LN_CHpsInc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4845/NS_sprm::LN_CHpsPos/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4845/NS_sprm::LN_CHpsPos/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a46/NS_sprm::LN_CHpsPosAdj/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A46/NS_sprm::LN_CHpsPosAdj/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca47/NS_sprm::LN_CMajority/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA47/NS_sprm::LN_CMajority/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a48/NS_sprm::LN_CIss/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A48/NS_sprm::LN_CIss/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca49/NS_sprm::LN_CHpsNew50/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA49/NS_sprm::LN_CHpsNew50/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca4a/NS_sprm::LN_CHpsInc1/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA4A/NS_sprm::LN_CHpsInc1/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x484b/NS_sprm::LN_CHpsKern/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x484B/NS_sprm::LN_CHpsKern/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca4c/NS_sprm::LN_CMajority50/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA4C/NS_sprm::LN_CMajority50/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a4d/NS_sprm::LN_CHpsMul/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A4D/NS_sprm::LN_CHpsMul/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x484e/NS_sprm::LN_CYsri/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x484E/NS_sprm::LN_CYsri/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a4f/NS_sprm::LN_CRgFtc0/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A4F/NS_sprm::LN_CRgFtc0/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a50/NS_sprm::LN_CRgFtc1/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A50/NS_sprm::LN_CRgFtc1/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a51/NS_sprm::LN_CRgFtc2/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A51/NS_sprm::LN_CRgFtc2/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4852/NS_sprm::LN_CCharScale/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4852/NS_sprm::LN_CCharScale/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a53/NS_sprm::LN_CFDStrike/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A53/NS_sprm::LN_CFDStrike/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0854/NS_sprm::LN_CFImprint/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0854/NS_sprm::LN_CFImprint/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0875/NS_sprm::LN_CFNoProof/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0875/NS_sprm::LN_CFNoProof/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0818/NS_sprm::LN_CFspecVanish/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0818/NS_sprm::LN_CFspecVanish/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca76/NS_sprm::LN_CFitText/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA76/NS_sprm::LN_CFitText/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x882/NS_sprm::LN_CComplexScript/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x882/NS_sprm::LN_CComplexScript/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2471/NS_sprm::LN_PTightWrap/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2471/NS_sprm::LN_PTightWrap/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0855/NS_sprm::LN_CFSpec/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0855/NS_sprm::LN_CFSpec/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0856/NS_sprm::LN_CFObj/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0856/NS_sprm::LN_CFObj/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca57/NS_sprm::LN_CPropRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA57/NS_sprm::LN_CPropRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0858/NS_sprm::LN_CFEmboss/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0858/NS_sprm::LN_CFEmboss/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2859/NS_sprm::LN_CSfxText/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2859/NS_sprm::LN_CSfxText/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x085a/NS_sprm::LN_CFBiDi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x085A/NS_sprm::LN_CFBiDi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x085b/NS_sprm::LN_CFDiacColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x085B/NS_sprm::LN_CFDiacColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x085c/NS_sprm::LN_CFBoldBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x085C/NS_sprm::LN_CFBoldBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x085d/NS_sprm::LN_CFItalicBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x085D/NS_sprm::LN_CFItalicBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a5e/NS_sprm::LN_CFtcBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A5E/NS_sprm::LN_CFtcBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x485f/NS_sprm::LN_CLidBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x485F/NS_sprm::LN_CLidBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a60/NS_sprm::LN_CIcoBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A60/NS_sprm::LN_CIcoBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a61/NS_sprm::LN_CHpsBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A61/NS_sprm::LN_CHpsBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca62/NS_sprm::LN_CDispFldRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA62/NS_sprm::LN_CDispFldRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4863/NS_sprm::LN_CIbstRMarkDel/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4863/NS_sprm::LN_CIbstRMarkDel/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6864/NS_sprm::LN_CDttmRMarkDel/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6864/NS_sprm::LN_CDttmRMarkDel/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6865/NS_sprm::LN_CBrc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6865/NS_sprm::LN_CBrc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4866/NS_sprm::LN_CShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4866/NS_sprm::LN_CShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4867/NS_sprm::LN_CIdslRMarkDel/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4867/NS_sprm::LN_CIdslRMarkDel/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0868/NS_sprm::LN_CFUsePgsuSettings/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0868/NS_sprm::LN_CFUsePgsuSettings/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x486b/NS_sprm::LN_CCpg/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x486B/NS_sprm::LN_CCpg/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x486d/NS_sprm::LN_CRgLid0/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x486D/NS_sprm::LN_CRgLid0/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x486e/NS_sprm::LN_CRgLid1/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x486E/NS_sprm::LN_CRgLid1/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x286f/NS_sprm::LN_CIdctHint/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x286F/NS_sprm::LN_CIdctHint/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2e00/NS_sprm::LN_PicBrcl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2E00/NS_sprm::LN_PicBrcl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xce01/NS_sprm::LN_PicScale/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCE01/NS_sprm::LN_PicScale/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6c02/NS_sprm::LN_PicBrcTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6C02/NS_sprm::LN_PicBrcTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6c03/NS_sprm::LN_PicBrcLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6C03/NS_sprm::LN_PicBrcLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6c04/NS_sprm::LN_PicBrcBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6C04/NS_sprm::LN_PicBrcBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6c05/NS_sprm::LN_PicBrcRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6C05/NS_sprm::LN_PicBrcRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3000/NS_sprm::LN_ScnsPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3000/NS_sprm::LN_ScnsPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3001/NS_sprm::LN_SiHeadingPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3001/NS_sprm::LN_SiHeadingPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd202/NS_sprm::LN_SOlstAnm/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD202/NS_sprm::LN_SOlstAnm/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xf203/NS_sprm::LN_SDxaColWidth/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xF203/NS_sprm::LN_SDxaColWidth/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xf204/NS_sprm::LN_SDxaColSpacing/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xF204/NS_sprm::LN_SDxaColSpacing/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3005/NS_sprm::LN_SFEvenlySpaced/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3005/NS_sprm::LN_SFEvenlySpaced/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3006/NS_sprm::LN_SFProtected/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3006/NS_sprm::LN_SFProtected/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5007/NS_sprm::LN_SDmBinFirst/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5007/NS_sprm::LN_SDmBinFirst/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5008/NS_sprm::LN_SDmBinOther/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5008/NS_sprm::LN_SDmBinOther/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3009/NS_sprm::LN_SBkc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3009/NS_sprm::LN_SBkc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x300a/NS_sprm::LN_SFTitlePage/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x300A/NS_sprm::LN_SFTitlePage/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x500b/NS_sprm::LN_SCcolumns/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x500B/NS_sprm::LN_SCcolumns/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x900c/NS_sprm::LN_SDxaColumns/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x900C/NS_sprm::LN_SDxaColumns/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x300d/NS_sprm::LN_SFAutoPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x300D/NS_sprm::LN_SFAutoPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x300e/NS_sprm::LN_SNfcPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x300E/NS_sprm::LN_SNfcPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xb00f/NS_sprm::LN_SDyaPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xB00F/NS_sprm::LN_SDyaPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xb010/NS_sprm::LN_SDxaPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xB010/NS_sprm::LN_SDxaPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3011/NS_sprm::LN_SFPgnRestart/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3011/NS_sprm::LN_SFPgnRestart/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3012/NS_sprm::LN_SFEndnote/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3012/NS_sprm::LN_SFEndnote/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3013/NS_sprm::LN_SLnc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3013/NS_sprm::LN_SLnc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3014/NS_sprm::LN_SGprfIhdt/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3014/NS_sprm::LN_SGprfIhdt/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5015/NS_sprm::LN_SNLnnMod/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5015/NS_sprm::LN_SNLnnMod/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9016/NS_sprm::LN_SDxaLnn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9016/NS_sprm::LN_SDxaLnn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xb017/NS_sprm::LN_SDyaHdrTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xB017/NS_sprm::LN_SDyaHdrTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xb018/NS_sprm::LN_SDyaHdrBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xB018/NS_sprm::LN_SDyaHdrBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3019/NS_sprm::LN_SLBetween/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3019/NS_sprm::LN_SLBetween/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x301a/NS_sprm::LN_SVjc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x301A/NS_sprm::LN_SVjc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x501b/NS_sprm::LN_SLnnMin/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x501B/NS_sprm::LN_SLnnMin/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x501c/NS_sprm::LN_SPgnStart/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x501C/NS_sprm::LN_SPgnStart/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x301d/NS_sprm::LN_SBOrientation/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x301D/NS_sprm::LN_SBOrientation/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x301e/NS_sprm::LN_SBCustomize/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x301E/NS_sprm::LN_SBCustomize/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xb01f/NS_sprm::LN_SXaPage/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xB01F/NS_sprm::LN_SXaPage/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xb020/NS_sprm::LN_SYaPage/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xB020/NS_sprm::LN_SYaPage/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xb021/NS_sprm::LN_SDxaLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xB021/NS_sprm::LN_SDxaLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xb022/NS_sprm::LN_SDxaRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xB022/NS_sprm::LN_SDxaRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9023/NS_sprm::LN_SDyaTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9023/NS_sprm::LN_SDyaTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9024/NS_sprm::LN_SDyaBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9024/NS_sprm::LN_SDyaBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xb025/NS_sprm::LN_SDzaGutter/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xB025/NS_sprm::LN_SDzaGutter/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5026/NS_sprm::LN_SDmPaperReq/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5026/NS_sprm::LN_SDmPaperReq/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd227/NS_sprm::LN_SPropRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD227/NS_sprm::LN_SPropRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3228/NS_sprm::LN_SFBiDi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3228/NS_sprm::LN_SFBiDi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3229/NS_sprm::LN_SFFacingCol/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3229/NS_sprm::LN_SFFacingCol/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x322a/NS_sprm::LN_SFRTLGutter/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x322A/NS_sprm::LN_SFRTLGutter/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x702b/NS_sprm::LN_SBrcTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x702B/NS_sprm::LN_SBrcTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x702c/NS_sprm::LN_SBrcLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x702C/NS_sprm::LN_SBrcLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x702d/NS_sprm::LN_SBrcBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x702D/NS_sprm::LN_SBrcBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x702e/NS_sprm::LN_SBrcRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x702E/NS_sprm::LN_SBrcRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x522f/NS_sprm::LN_SPgbProp/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x522F/NS_sprm::LN_SPgbProp/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7030/NS_sprm::LN_SDxtCharSpace/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7030/NS_sprm::LN_SDxtCharSpace/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9031/NS_sprm::LN_SDyaLinePitch/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9031/NS_sprm::LN_SDyaLinePitch/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5032/NS_sprm::LN_SClm/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5032/NS_sprm::LN_SClm/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5033/NS_sprm::LN_STextFlow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5033/NS_sprm::LN_STextFlow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5400/NS_sprm::LN_TJc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5400/NS_sprm::LN_TJc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9601/NS_sprm::LN_TDxaLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9601/NS_sprm::LN_TDxaLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9602/NS_sprm::LN_TDxaGapHalf/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9602/NS_sprm::LN_TDxaGapHalf/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3403/NS_sprm::LN_TFCantSplit/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3403/NS_sprm::LN_TFCantSplit/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3404/NS_sprm::LN_TTableHeader/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3404/NS_sprm::LN_TTableHeader/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd605/NS_sprm::LN_TTableBorders/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD605/NS_sprm::LN_TTableBorders/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd606/NS_sprm::LN_TDefTable10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD606/NS_sprm::LN_TDefTable10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9407/NS_sprm::LN_TDyaRowHeight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9407/NS_sprm::LN_TDyaRowHeight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd608/NS_sprm::LN_TDefTable/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD608/NS_sprm::LN_TDefTable/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd609/NS_sprm::LN_TDefTableShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD609/NS_sprm::LN_TDefTableShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd612/NS_sprm::LN_TCellShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD612/NS_sprm::LN_TCellShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x740a/NS_sprm::LN_TTlp/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x740A/NS_sprm::LN_TTlp/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x560b/NS_sprm::LN_TFBiDi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x560B/NS_sprm::LN_TFBiDi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x740c/NS_sprm::LN_THTMLProps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x740C/NS_sprm::LN_THTMLProps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd620/NS_sprm::LN_TSetBrc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD620/NS_sprm::LN_TSetBrc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7621/NS_sprm::LN_TInsert/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7621/NS_sprm::LN_TInsert/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5622/NS_sprm::LN_TDelete/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5622/NS_sprm::LN_TDelete/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7623/NS_sprm::LN_TDxaCol/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7623/NS_sprm::LN_TDxaCol/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5624/NS_sprm::LN_TMerge/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5624/NS_sprm::LN_TMerge/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5625/NS_sprm::LN_TSplit/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5625/NS_sprm::LN_TSplit/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd626/NS_sprm::LN_TSetBrc10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD626/NS_sprm::LN_TSetBrc10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7627/NS_sprm::LN_TSetShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7627/NS_sprm::LN_TSetShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7628/NS_sprm::LN_TSetShdOdd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7628/NS_sprm::LN_TSetShdOdd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7629/NS_sprm::LN_TTextFlow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7629/NS_sprm::LN_TTextFlow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd62a/NS_sprm::LN_TDiagLine/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD62A/NS_sprm::LN_TDiagLine/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd62b/NS_sprm::LN_TVertMerge/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD62B/NS_sprm::LN_TVertMerge/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd62c/NS_sprm::LN_TVertAlign/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD62C/NS_sprm::LN_TVertAlign/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd61a/NS_sprm::LN_TCellTopColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD61A/NS_sprm::LN_TCellTopColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd61b/NS_sprm::LN_TCellLeftColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD61B/NS_sprm::LN_TCellLeftColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd61c/NS_sprm::LN_TCellBottomColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD61C/NS_sprm::LN_TCellBottomColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd61d/NS_sprm::LN_TCellRightColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD61D/NS_sprm::LN_TCellRightColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd613/NS_sprm::LN_TGridLineProps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD613/NS_sprm::LN_TGridLineProps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6816/NS_sprm::LN_CIndrsid/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6816/NS_sprm::LN_CIndrsid/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6817/NS_sprm::LN_Cdelrsid/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6817/NS_sprm::LN_Cdelrsid/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6649/NS_sprm::LN_PTableDepth/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6649/NS_sprm::LN_PTableDepth/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd670/NS_sprm::LN_TCellShadow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD670/NS_sprm::LN_TCellShadow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6424/NS_sprm::LN_PBrcTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6424/NS_sprm::LN_PBrcTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6425/NS_sprm::LN_PBrcLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6425/NS_sprm::LN_PBrcLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6426/NS_sprm::LN_PBrcBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6426/NS_sprm::LN_PBrcBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6427/NS_sprm::LN_PBrcRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6427/NS_sprm::LN_PBrcRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6428/NS_sprm::LN_PBrcBetween/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6428/NS_sprm::LN_PBrcBetween/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc64e/NS_sprm::LN_PBorderTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC64E/NS_sprm::LN_PBorderTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc64f/NS_sprm::LN_PBorderLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC64F/NS_sprm::LN_PBorderLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc650/NS_sprm::LN_PBorderBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC650/NS_sprm::LN_PBorderBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc651/NS_sprm::LN_PBorderRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC651/NS_sprm::LN_PBorderRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc652/NS_sprm::LN_PBorderBetween/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC652/NS_sprm::LN_PBorderBetween/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca72/NS_sprm::LN_CBorder/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA72/NS_sprm::LN_CBorder/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xf614/NS_sprm::LN_TTPreferredWidth/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xF614/NS_sprm::LN_TTPreferredWidth/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xf661/NS_sprm::LN_TTRLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xF661/NS_sprm::LN_TTRLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca78/NS_sprm::LN_CEastAsianLayout/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA78/NS_sprm::LN_CEastAsianLayout/g" < $1 > $1.out && mv $1.out $1
diff --git a/writerfilter/source/doctok/resourceidmapper.xsl b/writerfilter/source/doctok/resourceidmapper.xsl
new file mode 100644
index 000000000000..83892770685a
--- /dev/null
+++ b/writerfilter/source/doctok/resourceidmapper.xsl
@@ -0,0 +1,125 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+
+ <!-- Key all attributes with the same name and same value -->
+ <xsl:key name="same-valued-tagged-data"
+ match="UML:TaggedValue.dataValue" use="." />
+
+ <xsl:template match="/">
+ <out>
+ <xsl:text>
+/*
+
+ THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT!
+
+*/
+
+package analyze;
+
+import java.util.LinkedHashMap;
+
+/**
+ *
+ * @author hb137859
+ */
+public class ResourceIdMap extends LinkedHashMap &lt;String, Integer &gt; {
+
+ static ResourceIdMap mInstance = new ResourceIdMap();
+
+ /** Creates a new instance of ResourceIdMap */
+ protected ResourceIdMap() {
+/* Attributes */&#xa;</xsl:text>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"][count(.//UML:Stereotype[@xmi.idref="noqname"]) = 0]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="attrid"]'>
+ <xsl:choose>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <!-- <xsl:when test='.//UML:TaggedValue.dataValue = preceding::*//UML:TaggedValue.dataValue'/>-->
+ <xsl:otherwise>
+ <xsl:text>put("</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>", </xsl:text>
+ <xsl:value-of select='10000 + position()'/>
+ <xsl:text>);&#xa;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>
+
+/* Operations */&#xa;</xsl:text>
+ <xsl:for-each select='.//UML:Operation[@name!="reserved"][count(.//UML:Stereotype[@xmi.idref="noqname"]) = 0]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="opid"]'>
+ <xsl:choose>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <xsl:otherwise>
+ <xsl:text>put("</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>", </xsl:text>
+ <xsl:value-of select='20000 + position()'/>
+ <xsl:text>); &#xa;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>
+
+/* Classes */&#xa;</xsl:text>
+ <xsl:for-each select='.//UML:Class[@name!="reserved"]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="classid"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noqname"]'/>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <xsl:otherwise>
+ <xsl:text>put("</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>", </xsl:text>
+ <xsl:value-of select='30000 + position()'/>
+ <xsl:text>); &#xa;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>
+ }
+
+ static ResourceIdMap instance() {
+ return mInstance;
+ }
+};
+</xsl:text>
+</out>
+</xsl:template>
+
+ <xsl:template name='idtoqname'>
+ <xsl:param name='id'/>rtf:<xsl:value-of select='substring-after($id, ":")'/>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/writerfilter/source/doctok/resourceidmapperback.xsl b/writerfilter/source/doctok/resourceidmapperback.xsl
new file mode 100644
index 000000000000..8f00e76d7dc1
--- /dev/null
+++ b/writerfilter/source/doctok/resourceidmapperback.xsl
@@ -0,0 +1,125 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+
+ <!-- Key all attributes with the same name and same value -->
+ <xsl:key name="same-valued-tagged-data"
+ match="UML:TaggedValue.dataValue" use="." />
+
+ <xsl:template match="/">
+ <out>
+ <xsl:text>
+/*
+
+ THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT!
+
+*/
+
+package analyze;
+
+import java.util.LinkedHashMap;
+
+/**
+ *
+ * @author hb137859
+ */
+public class ResourceIdMapBackwards extends LinkedHashMap &lt;Integer, String &gt; {
+
+ static ResourceIdMapBackwards mInstance = new ResourceIdMapBackwards();
+
+ /** Creates a new instance of ResourceIdMapBackwards */
+ protected ResourceIdMapBackwards() {
+/* Attributes */&#xa;</xsl:text>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"][count(.//UML:Stereotype[@xmi.idref="noqname"]) = 0]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="attrid"]'>
+ <xsl:choose>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <!-- <xsl:when test='.//UML:TaggedValue.dataValue = preceding::*//UML:TaggedValue.dataValue'/>-->
+ <xsl:otherwise>
+ <xsl:text>put(</xsl:text>
+ <xsl:value-of select='10000 + position()'/>
+ <xsl:text>, "</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>");&#xa;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>
+
+/* Operations */&#xa;</xsl:text>
+ <xsl:for-each select='.//UML:Operation[@name!="reserved"][count(.//UML:Stereotype[@xmi.idref="noqname"]) = 0]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="opid"]'>
+ <xsl:choose>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <xsl:otherwise>
+ <xsl:text>put(</xsl:text>
+ <xsl:value-of select='20000 + position()'/>
+ <xsl:text>, "</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>"); &#xa;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>
+
+/* Classes */&#xa;</xsl:text>
+ <xsl:for-each select='.//UML:Class[@name!="reserved"]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="classid"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noqname"]'/>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <xsl:otherwise>
+ <xsl:text>put(</xsl:text>
+ <xsl:value-of select='30000 + position()'/>
+ <xsl:text>, "</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>"); &#xa;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>
+ }
+
+ static ResourceIdMapBackwards instance() {
+ return mInstance;
+ }
+};
+</xsl:text>
+</out>
+</xsl:template>
+
+ <xsl:template name='idtoqname'>
+ <xsl:param name='id'/>rtf:<xsl:value-of select='substring-after($id, ":")'/>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/writerfilter/source/doctok/resourceids.xsl b/writerfilter/source/doctok/resourceids.xsl
new file mode 100644
index 000000000000..fb9895c1c1c6
--- /dev/null
+++ b/writerfilter/source/doctok/resourceids.xsl
@@ -0,0 +1,205 @@
+<!--
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+
+ <!-- Key all attributes with the same name and same value -->
+ <xsl:key name="same-valued-tagged-data"
+ match="UML:TaggedValue.dataValue" use="." />
+
+ <xsl:template match="/">
+ <out>
+ <xsl:text>
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * http://www.openoffice.org/license.html
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+/*
+
+ THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT!
+
+*/
+#ifndef INCLUDED_RESOURCESIDS
+#define INCLUDED_RESOURCESIDS
+
+#include &lt;sal/types.h&gt;
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+
+namespace writerfilter {
+
+namespace NS_rtf {
+
+/* Attributes */</xsl:text>
+<xsl:for-each select='.//UML:Attribute[@name!="reserved"][count(.//UML:Stereotype[@xmi.idref="noqname"]) = 0]'>
+ <xsl:variable name="pos" select="position()"/>
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="attrid"]'>
+ <xsl:choose>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <!-- <xsl:when test='.//UML:TaggedValue.dataValue = preceding::*//UML:TaggedValue.dataValue'/>-->
+ <xsl:otherwise>
+ <xsl:text>
+const Id </xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text> = </xsl:text>
+ <xsl:variable name="id" select="10000 + $pos"/>
+ <xsl:value-of select='$id'/>
+ <xsl:text>; // 0x</xsl:text>
+ <xsl:call-template name="dectohex">
+ <xsl:with-param name="number" select="$id"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+</xsl:for-each>
+<xsl:text>
+
+/* Operations */</xsl:text>
+<xsl:for-each select='.//UML:Operation[@name!="reserved"][count(.//UML:Stereotype[@xmi.idref="noqname"]) = 0]'>
+ <xsl:variable name="pos" select="position()"/>
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="opid"]'>
+ <xsl:choose>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <xsl:otherwise>
+ <xsl:text>
+const Id </xsl:text>
+<xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+</xsl:call-template>
+<xsl:text> = </xsl:text>
+<xsl:variable name="id" select="20000 + $pos"/>
+<xsl:value-of select='$id'/>
+<xsl:text>; // 0x</xsl:text>
+<xsl:call-template name="dectohex">
+ <xsl:with-param name="number" select="$id"/>
+</xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+</xsl:for-each>
+<xsl:text>
+
+/* Classes */</xsl:text>
+<xsl:for-each select='.//UML:Class[@name!="reserved"]'>
+ <xsl:variable name="pos" select="position()"/>
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="classid"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noqname"]'/>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <xsl:otherwise>
+ <xsl:text>
+const Id </xsl:text>
+<xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+</xsl:call-template>
+<xsl:text> = </xsl:text>
+<xsl:value-of select='30000 + $pos'/>
+<xsl:text>; // 0x</xsl:text>
+<xsl:call-template name="dectohex">
+ <xsl:with-param name="number" select="30000 + position()"/>
+</xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+</xsl:for-each>
+<xsl:text>
+}
+
+namespace NS_dff
+{</xsl:text>
+<xsl:for-each select='.//UML:Class[.//UML:Stereotype/@xmi.idref="dffopt"]'>
+ <xsl:variable name ="optname">
+ <xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="optname"]/UML:TaggedValue.dataValue'/>
+ </xsl:variable>
+ <xsl:variable name="fopid">
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="fopid"]'>
+ <xsl:value-of select='UML:TaggedValue.dataValue'/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:text>
+const Id </xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id"><xsl:value-of select="$optname"/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text> = </xsl:text>
+ <xsl:value-of select="$fopid"/>
+ <xsl:text>; // 0x</xsl:text>
+ <xsl:call-template name="dectohex">
+ <xsl:with-param name="number" select="$fopid"/>
+ </xsl:call-template>
+</xsl:for-each>
+<xsl:text>
+}
+
+
+}
+
+#endif // INCLUDED_RESOURCESIDS&#xa;</xsl:text></out>
+</xsl:template>
+
+<xsl:template name='idtoqname'>
+ <xsl:param name='id'/>LN_<xsl:value-of select='substring-after($id, ":")'/>
+</xsl:template>
+
+<xsl:template name='dectohex'>
+ <xsl:param name="number"/>
+ <xsl:if test="$number > 16">
+ <xsl:call-template name="dectohex">
+ <xsl:with-param name="number" select="floor($number div 16)"/>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:value-of select="substring('0123456789abcdef', $number mod 16 + 1, 1)"/>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/writerfilter/source/doctok/resources.xmi b/writerfilter/source/doctok/resources.xmi
new file mode 100644
index 000000000000..65b471e280e2
--- /dev/null
+++ b/writerfilter/source/doctok/resources.xmi
@@ -0,0 +1,54986 @@
+<?xml version="1.0"?>
+<XMI xmlns:UML="org.omg.xmi.namespace.UML" xmi.version="1.2">
+ <XMI.header>
+ <XMI.documentation/>
+ </XMI.header>
+ <XMI.content>
+ <UML:Model name="WW8Document">
+ <UML:Namespace.ownedElement>
+<!--Stereotypes -->
+ <UML:Stereotype xmi.id="access" name="access">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="plcf" name="plcf">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="withindex" name="withindex">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="withmembers" name="withmembers">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="resolvenoauto" name="resolvenoauto">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="initimpl" name="initimpl">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="resource" name="resource">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="ww8resource" name="ww8resource">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="ww8sprm" name="ww8sprm">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="ww8sprmbinary" name="ww8sprmbinary">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="debug" name="debug">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="reference" name="reference">
+ <UML:Stereotype.baseClass>Attribute</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="attribute" name="attribute">
+ <UML:Stereotype.baseClass>Attribute</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="attributeremainder" name="attribute">
+ <UML:Stereotype.baseClass>Attribute</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="noresolve" name="noresolve">
+ <UML:Stereotype.baseClass>Attribute</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="noqname" name="noqname">
+ <UML:Stereotype.baseClass>Attribute</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="array" name="array">
+ <UML:Stereotype.baseClass>Attribute</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="string" name="string">
+ <UML:Stereotype.baseClass>Attribute</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="binary" name="binary">
+ <UML:Stereotype.baseClass>Attribute</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="dffrecord" name="dffrecord">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="dffopt" name="dffopt">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="virtual" name="virtual">
+ <UML:Stereotype.baseClass>Attribute</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+<!--Stereotypes-->
+<!--Datatypes -->
+ <UML:DataType xmi.id="U8" name="U8"/>
+ <UML:DataType xmi.id="U16" name="U16"/>
+ <UML:DataType xmi.id="U32" name="U32"/>
+ <UML:DataType xmi.id="String" name="String"/>
+ <UML:DataType xmi.id="Value" name="Value"/>
+ <UML:DataType xmi.id="Sprm" name="Sprm"/>
+<!--Datatypes-->
+<!--Tag definitions -->
+ <UML:TagDefinition tagType="String" xmi.id="comment" name="comment"/>
+ <UML:TagDefinition tagType="String" xmi.id="offset" name="offset"/>
+ <UML:TagDefinition tagType="String" xmi.id="shift" name="shift"/>
+ <UML:TagDefinition tagType="String" xmi.id="mask" name="mask"/>
+ <UML:TagDefinition tagType="String" xmi.id="arraycount" name="arraycount"/>
+ <UML:TagDefinition tagType="String" xmi.id="bits" name="bits"/>
+ <UML:TagDefinition tagType="String" xmi.id="attrid" name="attrid"/>
+ <UML:TagDefinition tagType="String" xmi.id="opid" name="opid"/>
+ <UML:TagDefinition tagType="String" xmi.id="classid" name="opid"/>
+ <UML:TagDefinition tagType="String" xmi.id="size" name="size"/>
+ <UML:TagDefinition tagType="String" xmi.id="sprmcode" name="sprmcode"/>
+ <UML:TagDefinition tagType="String" xmi.id="sprmid" name="sprmid"/>
+ <UML:TagDefinition tagType="String" xmi.id="dffid" name="dffid"/>
+<!--Tag definitions -->
+<!--Classes without stereotype-->
+<!--Class Blob-->
+ <UML:Class xmi.id="Blob" name="Blob"/>
+ <UML:Generalization isSpecification="false" xmi.id="Blob-BinaryObj">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="Blob"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="BinaryObj"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class Blob-->
+<!--Class TextboxText-->
+ <UML:Class xmi.id="TextboxText" name="TextboxText"/>
+ <UML:Generalization isSpecification="false" xmi.id="TextboxText-Stream">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="TextboxText"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Stream"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class TextboxText-->
+<!--Class UPX-->
+ <UML:Class xmi.id="UPX" name="UPX"/>
+ <UML:Generalization isSpecification="false" xmi.id="UPX-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="UPX"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class UPX-->
+<!--Class SEPX-->
+ <UML:Class xmi.id="SEPX" name="SEPX"/>
+ <UML:Generalization isSpecification="false" xmi.id="SEPX-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="SEPX"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class SEPX-->
+<!--Class DffRecord-->
+ <UML:Class xmi.id="DffRecord" name="DffRecord"/>
+ <UML:Generalization isSpecification="false" xmi.id="DffRecord-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="DffRecord"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class DffRecord-->
+<!--Class Papx-->
+ <UML:Class xmi.id="Papx" name="Papx">
+ <UML:Classifier.feature>
+ <UML:Attribute name="istd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ISTD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+<!--Class Papx-->
+<!--Class dummy-->
+ <UML:Class xmi.id="dummy" name="dummy">
+ <UML:Classifier.feature>
+ <UML:Attribute name="header">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:header</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="footer">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:footer</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="headerr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:headerr</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="headerl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:headerl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="footerr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:footerr</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="footerl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:footerl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="headerf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:headerf</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="footerf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:footerf</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="footnote">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:footnote</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="endnote">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:endnote</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="annotation">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:annotation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="bookmarkname">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BOOKMARKNAME</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="XAlign">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:XAlign</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="YAlign">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:YAlign</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="XRelTo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:XRelTo</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="YRelTo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:YRelTo</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="LayoutInTableCell">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LayoutInTableCell</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="Inline">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:Inline</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dffrecord">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DffRecord</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dffattribute">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DffAttribute</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dfftype">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:dfftype</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dffheader">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:dffheader</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="instance">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:dffinstance</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dffversion">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:dffversion</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="blob">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:blob</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+<!--Class dummy-->
+<!--Classes without stereotype-->
+<!--Resources-->
+ <UML:Class xmi.id="Properties" name="Properties">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resource"/>
+ </UML:ModelElement.stereotype>
+ </UML:Class>
+ <UML:Class xmi.id="Table" name="Table">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resource"/>
+ </UML:ModelElement.stereotype>
+ </UML:Class>
+ <UML:Class xmi.id="Stream" name="Stream">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resource"/>
+ </UML:ModelElement.stereotype>
+ </UML:Class>
+ <UML:Class xmi.id="BinaryObj" name="BinaryObj">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resource"/>
+ </UML:ModelElement.stereotype>
+ </UML:Class>
+<!--Resources-->
+<!--WW8 resources-->
+<!--Class ListLevel-->
+ <UML:Class xmi.id="ListLevel" name="ListLevel">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resolvenoauto"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>28</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="iStartAt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>start at value for this list level</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ISTARTAT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="nfc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>number format code (see anld.nfc for a list of options)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x04</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:NFC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="jc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>alignment (left, right, or centered) of the paragraph
+ number.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x05</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x03</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:JC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fLegal">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>true (==1) if the level turns all inherited numbers to arabic,
+ false if it preserves their number format code (nfc)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x05</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x04</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FLEGAL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fNoRestart">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>true if the level's number sequence is not restarted by higher
+ (more significant) levels in the list</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x05</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x08</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FNORESTART</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fPrev">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Word 6 compatibility option: equivalent to anld.fPrev (see
+ ANLD)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x05</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FPREV</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fPrevSpace">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Word 6 compatibility option: equivalent to anld.fPrevSpace (see
+ ANLD)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x05</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x20</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FPREVSPACE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fWord6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>true if this level was from a converted Word 6 document. If it
+ is true, all of the Word 6 compability options become valid;
+ otherwise they are ignored.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x05</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x40</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FWORD6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused5_7">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unused.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x05</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x80</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNUSED5_7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="rgbxchNums">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>contains the character offsets into the LVL's XST of the
+ inherited numbers of previous levels. This array should be zero
+ terminated unless it is full (all 9 levels full). The XST contains
+ place holders for any paragraph numbers contained in the text of
+ the number, and the place holder contains the ilvl of the inherited
+ number, so lvl.xst[lvl.rgbxchNums[0]] == the level of the first
+ inherited number in this level.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x06</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:RGBXCHNUMS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="arraycount"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ixchFollow">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the type of character following the number text for the
+ paragraph: 0 == tab, 1 == space, 2 == nothing.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:IXCHFOLLOW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dxaSpace">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Word 6 compatibility option: equivalent to anld.dxaSpace (see
+ ANLD)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DXASPACE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dxaIndent">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Word 6 compatibility optino: equivalent to anld.dxaIndent (see
+ ANLD)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DXAINDENT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cbGrpprlChpx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length, in bytes, of the LVL's grpprlChpx</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x18</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CBGRPPRLCHPX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cbGrpprlPapx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length, in bytes, of the LVL's grpprlPapx</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x19</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CBGRPPRLPAPX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="reserved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0X1A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:RESERVED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="ListLevel-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="ListLevel"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class ListLevel-->
+<!--Class List-->
+ <UML:Class xmi.id="List" name="List">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="withindex"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>28</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="listlevel">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LISTLEVEL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="ListLevel"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Attribute name="lsid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Unique List ID</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LSID</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="tplc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Unique template code</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x04</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:TPLC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="rgistd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Array of shorts containing the istd's linked to each level of
+ the list, or istdNil (4095) if no style is linked.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x08</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>18</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:RGISTD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="arraycount"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fSimpleList">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>true if this is a simple (one-level) list; false if this is a
+ multilevel (nine-level) list.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FSIMPLELIST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fRestartHdn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Word 6 compatibility option: true if the list should start
+ numbering over at the beginning of each section</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FRESTARTHDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unsigned26_2">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xFC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNSIGNED26_2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="reserved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:RESERVED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="List-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="List"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class List-->
+<!--Class ListTable-->
+ <UML:Class xmi.id="ListTable" name="ListTable">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="plcf"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LISTTABLE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="classid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="ListTable-Table">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="ListTable"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Table"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class ListTable-->
+<!--Class LFOLevel-->
+ <UML:Class xmi.id="LFOLevel" name="LFOLevel">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resolvenoauto"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="iStartAt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>start-at value if fFormatting == false and fStartAt == true.
+ (if fFormatting == true, the start-at is stored in the LVL)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ISTARTAT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ilvl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the level to be overridden</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ILVL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fStartAt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>true if the start-at value is overridden</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FSTARTAT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fFormatting">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>true if the formatting is overriden (in which case the LFOLVL
+ should contain a pointer to a LVL)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x20</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FFORMATTING</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unsigned4_6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNSIGNED4_6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="reserved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:RESERVED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="arraycount"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="LFOLevel-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="LFOLevel"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class LFOLevel-->
+<!--Class LFO-->
+ <UML:Class xmi.id="LFO" name="LFO">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="withindex"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="lfolevel">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LFO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="LFOLevel"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Attribute name="lsid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>List ID of corresponding LSTF (see LSTF)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LSID</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused4">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNUSED4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused8">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNUSED8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="clfolvl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of levels whose format is overridden (see LFOLVL)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CLFOLVL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="reserved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:RESERVED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="arraycount"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="LFO-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="LFO"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class LFO-->
+<!--Class LFOTable-->
+ <UML:Class xmi.id="LFOTable" name="LFOTable">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="plcf"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LFOTABLE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="classid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="LFOTable-Table">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="LFOTable"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Table"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class LFOTable-->
+<!--Class FontTable-->
+ <UML:Class xmi.id="FontTable" name="FontTable">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="plcf"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FONTTABLE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="classid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FontTable-Table">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FontTable"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Table"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class FontTable-->
+<!--Class Font-->
+ <UML:Class xmi.id="Font" name="Font">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="withindex"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>40</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="f">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U32"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Operation name="altName">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ALTFONTNAME</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Operation name="xszFfn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:XSZFFN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>zero terminated string that records name of font. Possibly
+ followed by a second xsz which records the name of an alternate
+ font to use if the first named font does not exist on this system.
+ Maximal size of xszFfn is 65 characters.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Attribute name="cbFfnM1">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>total length of FFN - 1.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CBFFNM1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="prq">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>pitch request</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>03</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PRQ</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fTrueType">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when 1, font is a TrueType font</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>04</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FTRUETYPE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused1_3">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>08</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNUSED1_3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ff">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>font family id</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>70</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused1_7">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>80</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNUSED1_7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="wWeight">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>base weight of font</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:WWEIGHT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="chs">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character set identifier</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CHS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ixchSzAlt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>index into ffn.szFfn to the name of the alternate font</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:IXCHSZALT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="panose">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>? This is supposed to be of type PANOSE.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PANOSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="arraycount"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fs">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>? This is supposed to be of type FONTSIGNATURE.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>24</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="arraycount"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="Font-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="Font"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class Font-->
+<!--Class Style-->
+ <UML:Class xmi.id="Style" name="Style">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resolvenoauto"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="withindex"/>
+ </UML:ModelElement.stereotype>
+ <UML:Classifier.feature>
+ <UML:Attribute name="sti">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>invariant style identifier</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0FFF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:12</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:STI</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fScratch">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>spare field for any temporary use, always reset back to
+ zero!</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>12</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FSCRATCH</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fInvalHeight">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>PHEs of all text with this style are wrong</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>13</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FINVALHEIGHT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fHasUpe">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>UPEs have been generated</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FHASUPE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fMassCopy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>std has been mass-copied; if unused at save time, style should
+ be deleted</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FMASSCOPY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="sgc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>style type code</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:SGC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="istdBase">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>base style</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FFF0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:12</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ISTDBASE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cupx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue># of UPXs (and UPEs)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CUPX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="istdNext">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>next style</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FFF0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:12</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ISTDNEXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="bchUpe">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset to end of upx's, start of upe's</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BCHUPE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fAutoRedef">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>auto redefine style when appropriate</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xa</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0001</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FAUTOREDEF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fHidden">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>hidden from UI?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xa</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0002</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FHIDDEN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused8_3">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unused bits</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xa</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FFFC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNUSED8_3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="xstzName">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:XSTZNAME</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Operation name="xstzName1">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:XSTZNAME1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Operation name="upxstart">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UPXSTART</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U32"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="noresolve"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Operation name="upx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UPX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="UPX"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="Style-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="Style"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class Style-->
+<!--Class StyleSheet-->
+ <UML:Class xmi.id="StyleSheet" name="StyleSheet">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="plcf"/>
+ </UML:ModelElement.stereotype>
+ <UML:Classifier.feature>
+ <UML:Attribute name="size">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Size of style sheet info</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CSTD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ <UML:Attribute name="cstd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Count of styles in stylesheet</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CSTD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cbSTDBaseInFile">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Length of STD Base as stored in a file</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CBSTDBASEINFILE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fStdStylenamesWritten">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Are built-in stylenames stored?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0001</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FSTDSTYLENAMESWRITTEN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused4_2">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Spare flags</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FFFE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNUSED4_2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="stiMaxWhenSaved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Max sti known when this file was written</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:STIMAXWHENSAVED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="istdMaxFixedWhenSaved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>How many fixed-index istds are there?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ISTDMAXFIXEDWHENSAVED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="nVerBuiltInNamesWhenSaved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Current version of built-in stylenames</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:NVERBUILTINNAMESWHENSAVED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="rgftcStandardChpStsh">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>ftc used by StandardChpStsh for this document</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:RGFTCSTANDARDCHPSTSH</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="arraycount"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:STYLESHEET</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="classid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="StyleSheet-Table">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="StyleSheet"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Table"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class StyleSheet-->
+<!--Class Fib-->
+ <UML:Class xmi.id="Fib" name="Fib">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="withmembers"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>898</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="wIdent">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>(fibh) FIBH Beginning of the FIB header magic number</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:WIDENT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="nFib">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FIB version written. This will be &gt;= 101 for all Word 6.0
+ for Windows and after documents.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0002</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:NFIB</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="nProduct">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>product version written by</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0004</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:NPRODUCT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>language stamp -- localized version
+ In pre-WinWord 2.0 files this value was the nLocale. If value is
+ &lt; 999, then it is the nLocale, otherwise it is the lid.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0006</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LID</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnNext">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0008</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNNEXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fDot">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Set if this document is a template</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0001</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FDOT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fGlsy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Set if this document is a glossary</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0002</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FGLSY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fComplex">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when 1, file is in complex, fast-saved format.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0004</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCOMPLEX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fHasPic">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>set if file contains 1 or more pictures</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0008</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FHASPIC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cQuickSaves">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of times file was quicksaved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00F0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CQUICKSAVES</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fEncrypted">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Set if file is encrypted</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0100</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FENCRYPTED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fWhichTblStm">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>When 0, this fib refers to the table stream named "0Table",
+ when 1, this fib refers to the table stream named "1Table".
+ Normally, a file will have only one table stream, but under unusual
+ circumstances a file may have table streams with both names. In
+ that case, this flag must be used to decide which table stream is
+ valid.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0200</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FWHICHTBLSTM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fReadOnlyRecommended">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Set when user has recommended that file be read read-only</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0400</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FREADONLYRECOMMENDED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fWriteReservation">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Set when file owner has made the file write reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>11</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0800</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FWRITERESERVATION</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fExtChar">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Set when using extended character set in file</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>12</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FEXTCHAR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fLoadOverride">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>REVIEW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>13</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FLOADOVERRIDE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fFarEast">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>REVIEW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FFAREAST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fCrypto">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>REVIEW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCRYPTO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="nFibBack">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>This file format it compatible with readers that understand
+ nFib at or above this value.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:NFIBBACK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lKey">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>File encrypted key, only valid if fEncrypted.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LKEY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="envr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>environment in which file was created
+ 0 created by Win Word
+ 1 created by Mac Word</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0012</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ENVR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fMac">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when 1, this file was last saved in the Mac environment</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0013</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FMAC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fEmptySpecial">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0013</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FEMPTYSPECIAL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fLoadOverridePage">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0013</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>04</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FLOADOVERRIDEPAGE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fFutureSavedUndo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0013</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>08</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FFUTURESAVEDUNDO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fWord97Saved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0013</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FWORD97SAVED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fSpare0">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0013</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FSPARE0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="chs">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Default extended character set id for text in document stream.
+ (overridden by chp.chse)
+ 0 by default characters in doc stream should be interpreted using
+ the ANSI character set used by Windows
+ 256 characters in doc stream should be interpreted using the
+ Macintosh character set.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0014</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CHS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="chsTables">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Default extended character set id for text in internal data
+ structures
+ 0 by default characters stored in internal data structures should
+ be interpreted using the ANSI character set used by Windows
+ 256 characters stored in internal data structures should be
+ interpreted using the Macintosh character set.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0016</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CHSTABLES</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcMin">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>file offset of first character of text. In non-complex
+ files a CP can be transformed into an FC by the
+ following transformation:
+ fc = cp + fib.fcMin.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0018</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCMIN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcMac">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>file offset of last character of text in document text stream +
+ 1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>001C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCMAC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="csw">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Count of fields in the array of "shorts"</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0020</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CSW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="wMagicCreated">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>[Beginning of the array of shorts, rgls]
+ Unique number Identifying the File's creator 6A62 is the creator ID
+ for Word and is reserved. Other creators should choose a different
+ value.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0022</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:WMAGICCREATED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="wMagicRevised">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>identifies the File's last modifier</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0024</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:WMAGICREVISED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="wMagicCreatedPrivate">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>private data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0026</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:WMAGICCREATEDPRIVATE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="wMagicRevisedPrivate">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>private data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0028</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:WMAGICREVISEDPRIVATE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnFbpChpFirst_W6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>002A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNFBPCHPFIRST_W6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnChpFirst_W6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>002C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNCHPFIRST_W6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cpnBteChp_W6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>002E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CPNBTECHP_W6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnFbpPapFirst_W6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0030</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNFBPPAPFIRST_W6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnPapFirst_W6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0032</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNPAPFIRST_W6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cpnBtePap_W6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0034</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CPNBTEPAP_W6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnFbpLvcFirst_W6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0036</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNFBPLVCFIRST_W6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnLvcFirst_W6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0038</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNLVCFIRST_W6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cpnBteLvc_W6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>003A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CPNBTELVC_W6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lidFE">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Language id if document was written by Far East version of Word
+ (i.e. FIB.fFarEast is on)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>003C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LIDFE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="clw">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Number of fields in the array of longs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>003E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CLW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cbMac">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>[Beginning of the array of longs, rglw]
+ file offset of last byte written to file + 1.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0040</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CBMAC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lProductCreated">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>contains the build date of the creator. 10695 indicates the
+ creator program was compiled on Jan 6, 1995</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0044</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LPRODUCTCREATED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lProductRevised">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>contains the build date of the File's last modifier</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0048</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LPRODUCTREVISED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ccpText">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length of main document text stream</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>004C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CCPTEXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ccpFtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length of footnote subdocument text stream</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0050</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CCPFTN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ccpHdd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length of header subdocument text stream</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0054</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CCPHDD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ccpMcr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length of macro subdocument text stream, which should now
+ always be 0.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0058</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CCPMCR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ccpAtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length of annotation subdocument text stream</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>005C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CCPATN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ccpEdn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length of endnote subdocument text stream</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0060</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CCPEDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ccpTxbx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length of textbox subdocument text stream</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0064</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CCPTXBX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ccpHdrTxbx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length of header textbox subdocument text stream.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0068</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CCPHDRTXBX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnFbpChpFirst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when there was insufficient memory for Word to expand the
+ plcfbte at save time, the plcfbte is written to the file in a
+ linked list of 512-byte pieces starting with this pn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>006C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNFBPCHPFIRST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnChpFirst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the page number of the lowest numbered page in the document
+ that records CHPX FKP information</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0070</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNCHPFIRST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cpnBteChp">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of CHPX FKPs recorded in file. In non-complex files if
+ the number of entries in the plcfbteChpx is less than this, the
+ plcfbteChpx is incomplete.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0074</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CPNBTECHP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnFbpPapFirst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when there was insufficient memory for Word to expand the
+ plcfbte at save time, the plcfbte is written to the file in a
+ linked list of 512-byte pieces starting with this pn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0078</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNFBPPAPFIRST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnPapFirst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the page number of the lowest numbered page in the document
+ that records PAPX FKP information</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>007C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNPAPFIRST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cpnBtePap">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of PAPX FKPs recorded in file. In non-complex files if
+ the number of entries in the plcfbtePapx is less than this, the
+ plcfbtePapx is incomplete.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0080</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CPNBTEPAP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnFbpLvcFirst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when there was insufficient memory for Word to expand the
+ plcfbte at save time, the plcfbte is written to the file in a
+ linked list of 512-byte pieces starting with this pn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0084</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNFBPLVCFIRST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnLvcFirst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the page number of the lowest numbered page in the document
+ that records LVC FKP information</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0088</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNLVCFIRST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cpnBteLvc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of LVC FKPs recorded in file. In non-complex files if the
+ number of entries in the plcfbtePapx is less than this, the
+ plcfbtePapx is incomplete.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>008C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CPNBTELVC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcIslandFirst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0090</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCISLANDFIRST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcIslandLim">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0094</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCISLANDLIM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cfclcb">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Number of fields in the array of FC/LCB pairs.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0098</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CFCLCB</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcStshfOrig">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>[Beginning of array of FC/LCB pairs, rgfclcb]
+ file offset of original allocation for STSH in table stream. During
+ fast save Word will attempt to reuse this allocation if STSH is
+ small enough to fit.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>009A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTSHFORIG</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbStshfOrig">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of original STSH allocation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>009E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTSHFORIG</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcStshf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset of STSH in table stream.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00A2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTSHF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbStshf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of current STSH allocation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00A6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTSHF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffndRef">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of footnote reference PLCF of FRD
+ structures. CPs in PLC are relative to main document text stream
+ and give location of footnote references.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00AA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFNDREF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffndRef">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of footnote reference PLC== 0 if no footnotes
+ defined in document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00AE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFNDREF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffndTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of footnote text PLC. CPs in PLC are
+ relative to footnote subdocument text stream and give location of
+ beginnings of footnote text for corresponding references recorded
+ in plcffndRef. No structure is stored in this plc. There will just
+ be n+1 FC entries in this PLC when there are n
+ footnotes</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00B2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFNDTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffndTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of footnote text PLC. == 0 if no footnotes
+ defined in document</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00B6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFNDTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfandRef">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of annotation reference ATRD PLC. The
+ CPs recorded in this PLC give the offset of annotation references
+ in the main document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00BA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFANDREF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfandRef">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of annotation reference PLC.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00BE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFANDREF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfandTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of annotation text PLC. The Cps recorded
+ in this PLC give the offset of the annotation text in the
+ annotation sub document corresponding to the references stored in
+ the plcfandRef. There is a 1 to 1 correspondence between entries
+ recorded in the plcfandTxt and the plcfandRef. No structure is
+ stored in this PLC.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00C2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFANDTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfandTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of the annotation text PLC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00C6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFANDTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfsed">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of section descriptor SED PLC. CPs in
+ PLC are relative to main document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00CA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFSED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfsed">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of section descriptor PLC.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00CE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFSED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfpad">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>no longer used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00D2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFPAD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfpad">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>no longer used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00D6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFPAD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfphe">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of PHE PLC of paragraph heights. CPs in
+ PLC are relative to main document text stream. Only written for
+ files in complex format. Should not be written by third
+ party creators of Word files.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00DA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFPHE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfphe">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of paragraph height PLC. ==0 when file is
+ non-complex.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00DE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFPHE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfglsy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of glossary string table. This table
+ consists of Pascal style strings (strings stored prefixed with a
+ length byte) concatenated one after another.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00E2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFGLSY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfglsy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of glossary string table. == 0 for non-glossary
+ documents.!=0 for glossary documents.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00E6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFGLSY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfglsy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of glossary PLC. CPs in PLC are relative
+ to main document and mark the beginnings of glossary entries and
+ are in 1-1 correspondence with entries of sttbfglsy. No structure
+ is stored in this PLC. There will be n+1 FC entries
+ in this PLC when there are n glossary entries.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00EA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFGLSY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfglsy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of glossary PLC.== 0 for non-glossary
+ documents.!=0 for glossary documents.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00EE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFGLSY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfhdd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>byte offset in table stream of header HDD PLC. CPs are relative
+ to header subdocument and mark the beginnings of individual headers
+ in the header subdocument. No structure is stored in this PLC.
+ There will be n+1FC entries in this PLC when there are
+ n headers stored for the document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00F2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFHDD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfhdd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of header PLC.
+ == 0 if document contains no headers</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00F6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFHDD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfbteChpx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of character property bin table.PLC. FCs
+ in PLC are file offsets in the main stream. Describes text of main
+ document and all subdocuments.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00FA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFBTECHPX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfbteChpx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of character property bin table PLC.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00FE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFBTECHPX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfbtePapx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of paragraph property bin table.PLC. FCs
+ in PLC are file offsets in the main stream. Describes text of main
+ document and all subdocuments.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0102</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFBTEPAPX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfbtePapx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of paragraph property bin table PLC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0106</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFBTEPAPX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfsea">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of PLC reserved for private use. The
+ SEA is 6 bytes long.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>010A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFSEA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfsea">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of private use PLC.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>010E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFSEA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfffn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of font information STTBF. The sttbfffn
+ is a STTBF where is string is actually an FFN structure. The
+ nth entry in the STTBF describes the font that will be
+ displayed when the chp.ftc for text is equal to n. See the
+ FFN file structure definition.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0112</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFFFN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfffn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes in sttbfffn.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0116</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFFFN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffldMom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream to the FLD PLC of field positions in the
+ main document. The CPs point to the beginning CP of a field, the CP
+ of field separator character inside a field and the ending CP of
+ the field. A field may be nested within another field. 20 levels of
+ field nesting are allowed.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>011A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFLDMOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffldMom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes in plcffldMom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>011E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFLDMOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffldHdr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream to the FLD PLC of field positions in the
+ header subdocument.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0122</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFLDHDR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffldHdr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes in plcffldHdr</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0126</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFLDHDR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffldFtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream to the FLD PLC of field positions in the
+ footnote subdocument.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>012A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFLDFTN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffldFtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes in plcffldFtn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>012E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFLDFTN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffldAtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream to the FLD PLC of field positions in the
+ annotation subdocument.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0132</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFLDATN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffldAtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes in plcffldAtn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0136</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFLDATN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffldMcr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>no longer used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>013A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFLDMCR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffldMcr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>no longer used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>013E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFLDMCR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfbkmk">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the STTBF that records bookmark names
+ in the main document</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0142</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFBKMK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfbkmk">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0146</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFBKMK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfbkf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the PLCF that records the beginning
+ CP offsets of bookmarks in the main document. See BKF structure
+ definition</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>014A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFBKF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfbkf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>014E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFBKF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfbkl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the PLCF that records the ending CP
+ offsets of bookmarks recorded in the main document. No structure is
+ stored in this PLCF.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0152</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFBKL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfbkl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0156</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFBKL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcCmds">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the macro commands. These commands
+ are private and undocumented.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>015A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCCMDS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbCmds">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>undocument size of undocument structure not documented
+ above</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>015E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBCMDS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcmcr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>no longer used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0162</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCMCR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcmcr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0166</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCMCR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfmcr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>no longer used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>016A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFMCR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfmcr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>016E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFMCR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPrDrvr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the printer driver information (names
+ of drivers, port, etc.)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0172</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPRDRVR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPrDrvr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of the printer driver information (names of
+ drivers, port, etc.)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0176</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPRDRVR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPrEnvPort">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the print environment in portrait
+ mode.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>017A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPRENVPORT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPrEnvPort">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of the print environment in portrait mode.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>017E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPRENVPORT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPrEnvLand">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the print environment in landscape
+ mode.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0182</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPRENVLAND</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPrEnvLand">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of the print environment in landscape mode.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0186</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPRENVLAND</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcWss">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of Window Save
+ State data structure. WSS contains dimensions of
+ document's main text window and the last selection made by Word
+ user.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>018A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCWSS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbWss">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of WSS. ==0 if unable to store the window state.
+ Should not be written by third party creators of Word files.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>018E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBWSS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcDop">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of document property data
+ structure.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0192</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCDOP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbDop">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of document properties.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0196</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBDOP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfAssoc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of STTBF of associated strings. The
+ strings in this table specify document summary info and the paths
+ to special documents related to this document. See documentation of
+ the STTBFASSOC.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>019A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFASSOC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfAssoc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>019E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFASSOC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcClx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of beginning of information for
+ complex files. Consists of an encoding of all of the
+ prms quoted by the document followed by the plcpcd
+ (piece table) for the document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01A2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCCLX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbClx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of complex file information == 0 if file is
+ non-complex.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01A6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBCLX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfpgdFtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01AA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFPGDFTN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfpgdFtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01AE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFPGDFTN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcAutosaveSource">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the name of the original file.
+ fcAutosaveSource and cbAutosaveSource should both be 0 if autosave
+ is off.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01B2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCAUTOSAVESOURCE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbAutosaveSource">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of the name of the original file.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01B6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBAUTOSAVESOURCE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcGrpXstAtnOwners">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of group of strings recording the names
+ of the owners of annotations stored in the document</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01BA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCGRPXSTATNOWNERS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbGrpXstAtnOwners">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of the group of strings</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01BE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBGRPXSTATNOWNERS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfAtnbkmk">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the sttbf that records names of
+ bookmarks for the annotation subdocument</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01C2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFATNBKMK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfAtnbkmk">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length in bytes of the sttbf that records names of bookmarks
+ for the annotation subdocument</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01C6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFATNBKMK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcdoaMom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>no longer used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01CA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCDOAMOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcdoaMom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01CE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCDOAMOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcdoaHdr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>no longer used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01D2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCDOAHDR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcdoaHdr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01D6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCDOAHDR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcspaMom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the FSPA PLC for main
+ document. == 0 if document has no office art objects.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01DA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCSPAMOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcspaMom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length in bytes of the FSPA PLC of the main
+ document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01DE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCSPAMOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcspaHdr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the FSPA PLC for header
+ document. == 0 if document has no office art objects.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01E2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCSPAHDR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcspaHdr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length in bytes of the FSPA PLC of the header
+ document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01E6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCSPAHDR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfAtnbkf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of BKF (bookmark first) PLC of the
+ annotation subdocument</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01EA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFATNBKF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfAtnbkf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length in bytes of BKF (bookmark first) PLC of the annotation
+ subdocument</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01EE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFATNBKF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfAtnbkl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of BKL (bookmark last) PLC of the
+ annotation subdocument</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01F2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFATNBKL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfAtnbkl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length in bytes of PLC marking the CP limits of the annotation
+ bookmarks. No structure is stored in this PLC.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01F6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFATNBKL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPms">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of PMS (Print Merge State) information
+ block. This contains the current state of a print merge
+ operation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01FA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPMS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPms">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length in bytes of PMS. ==0 if no current print merge state.
+ Should not be written by third party creators of Word files.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01FE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPMS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcFormFldSttbf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of form field Sttbf which contains
+ strings used in form field dropdown controls</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0202</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCFORMFLDSTTBF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbFormFldSttbf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length in bytes of form field Sttbf</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0206</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBFORMFLDSTTBF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfendRef">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of endnote reference PLCF of FRD
+ structures. CPs in PLCF are relative to main document text stream
+ and give location of endnote references.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>020A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFENDREF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfendRef">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>020E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFENDREF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfendTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of PlcfendRef which points to endnote
+ text in the endnote document stream which corresponds with the
+ plcfendRef. No structure is stored in this PLC.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0212</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFENDTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfendTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0216</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFENDTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffldEdn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream to FLD PLCF of field positions in the
+ endnote subdoc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>021A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFLDEDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffldEdn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>021E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFLDEDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfpgdEdn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0222</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFPGDEDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfpgdEdn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0226</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFPGDEDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcDggInfo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the office art object table data. The
+ format of office art object table data is found in a separate
+ document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>022A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCDGGINFO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbDggInfo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length in bytes of the office art object table data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>022E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBDGGINFO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfRMark">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream to STTBF that records the author
+ abbreviations for authors who have made revisions in the
+ document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0232</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFRMARK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfRMark">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0236</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFRMARK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfCaption">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream to STTBF that records caption titles
+ used in the document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>023A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFCAPTION</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfCaption">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>023E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFCAPTION</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfAutoCaption">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream to the STTBF that records the object
+ names and indices into the caption STTBF for objects which get auto
+ captions.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0242</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFAUTOCAPTION</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfAutoCaption">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0246</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFAUTOCAPTION</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfwkb">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream to WKB PLCF that describes the
+ boundaries of contributing documents in a master document</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>024A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFWKB</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfwkb">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>024E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFWKB</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfspl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of PLCF (of SPLS structures) that
+ records spell check state</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0252</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFSPL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfspl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0256</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFSPL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcftxbxTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of PLCF that records the beginning CP in
+ the text box subdoc of the text of individual text box entries. No
+ structure is stored in this PLCF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>025A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFTXBXTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcftxbxTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>025E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFTXBXTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffldTxbx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the FLD PLCF that records field
+ boundaries recorded in the textbox subdoc.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0262</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFLDTXBX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffldTxbx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0266</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFLDTXBX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfHdrtxbxTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of PLCF that records the beginning CP in
+ the header text box subdoc of the text of individual header text
+ box entries. No structure is stored in this PLC.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>026A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFHDRTXBXTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfHdrtxbxTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>026E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFHDRTXBXTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffldHdrTxbx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the FLD PLCF that records field
+ boundaries recorded in the header textbox subdoc.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0272</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFLDHDRTXBX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffldHdrTxbx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0276</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFLDHDRTXBX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcStwUser">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Macro User storage</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>027A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTWUSER</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbStwUser">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>027E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTWUSER</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbttmbd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of embedded true type font data.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0282</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBTTMBD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbttmbd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0286</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBTTMBD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcUnused">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>028A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCUNUSED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbUnused">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>028E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBUNUSED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPgdMother">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>(FCPGD, beginning of array of fcPgd / fcBkd pairs
+ rgpgdbkd).
+ offset in table stream of the PLF that records the page descriptors
+ for the main text of the doc.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0292</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPGDMOTHER</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPgdMother">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0296</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPGDMOTHER</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcBkdMother">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the PLCF that records the break
+ descriptors for the main text of the doc.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>029A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCBKDMOTHER</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbBkdMother">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>029E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBBKDMOTHER</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPgdFtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the PLF that records the page
+ descriptors for the footnote text of the doc.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02A2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPGDFTN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPgdFtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02A6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPGDFTN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcBkdFtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the PLCF that records the break
+ descriptors for the footnote text of the doc.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02AA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCBKDFTN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbBkdFtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02AE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBBKDFTN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPgdEdn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the PLF that records the page
+ descriptors for the endnote text of the doc.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02B2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPGDEDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPgdEdn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02B6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPGDEDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcBkdEdn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the PLCF that records the break
+ descriptors for the endnote text of the doc.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02BA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCBKDEDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbBkdEdn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02BE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBBKDEDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfIntlFld">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the STTBF containing field keywords.
+ This is only used in a small number of the international versions
+ of word. This field is no longer written to the file for nFib &gt;=
+ 167.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02C2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFINTLFLD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfIntlFld">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Always 0 for nFib &gt;= 167.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02C6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFINTLFLD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcRouteSlip">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of a mailer routing slip.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02CA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCROUTESLIP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbRouteSlip">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02CE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBROUTESLIP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbSavedBy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of STTBF recording the names of the
+ users who have saved this document alternating with the save
+ locations.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02D2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBSAVEDBY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbSavedBy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02D6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBSAVEDBY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbFnm">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of STTBF recording filenames of
+ documents which are referenced by this document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02DA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFNM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbFnm">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02DE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFNM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfLst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in the table stream of list format information.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02E2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFLST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfLst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02E6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFLST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlfLfo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in the table stream of list format override
+ information.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02EA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLFLFO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlfLfo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02EE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLFLFO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcftxbxBkd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in the table stream of the textbox break table (a PLCF
+ of BKDs) for the main document</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02F2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFTXBXBKD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcftxbxBkd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02F6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFTXBXBKD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcftxbxHdrBkd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in the table stream of the textbox break table (a PLCF
+ of BKDs) for the header subdocument</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02FA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFTXBXHDRBKD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcftxbxHdrBkd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02FE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFTXBXHDRBKD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcDocUndo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in main stream of undocumented undo / versioning
+ data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0302</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCDOCUNDO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbDocUndo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0306</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBDOCUNDO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcRgbuse">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in main stream of undocumented undo / versioning
+ data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>030A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCRGBUSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbRgbuse">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>030E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBRGBUSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcUsp">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in main stream of undocumented undo / versioning
+ data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0312</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCUSP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbUsp">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0316</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBUSP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcUskf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of undocumented undo / versioning
+ data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>031A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCUSKF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbUskf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>031E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBUSKF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcupcRgbuse">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of undocumented undo / versioning
+ data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0322</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCUPCRGBUSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcupcRgbuse">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0326</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCUPCRGBUSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcupcUsp">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of undocumented undo / versioning
+ data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>032A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCUPCUSP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcupcUsp">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>032E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCUPCUSP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbGlsyStyle">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of string table of style names for
+ glossary entries</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0332</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBGLSYSTYLE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbGlsyStyle">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0336</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBGLSYSTYLE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlgosl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of undocumented grammar options PL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>033A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLGOSL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlgosl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>033E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLGOSL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcocx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of undocumented ocx data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0342</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCOCX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcocx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0346</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCOCX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfbteLvc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of character property bin table.PLC. FCs
+ in PLC are file offsets. Describes text of main document and all
+ subdocuments.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>034A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFBTELVC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfbteLvc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>034E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFBTELVC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dwLowDateTime">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>(a.k.a FILETIME ftModified)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0352</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DWLOWDATETIME</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dwHighDateTime">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0356</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DWHIGHDATETIME</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcflvc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of LVC PLCF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>035A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFLVC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcflvc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>size of LVC PLCF, ==0 for non-complex files</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>035E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFLVC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcasumy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of autosummary ASUMY PLCF.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0362</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCASUMY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcasumy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0366</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCASUMY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfgram">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of PLCF (of SPLS structures) which
+ records grammar check state</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>036A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFGRAM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfgram">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>036E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFGRAM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbListNames">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of list names string table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0372</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBLISTNAMES</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbListNames">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0376</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBLISTNAMES</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfUssr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of undocumented undo / versioning
+ data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>037A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFUSSR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfUssr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>037E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFUSSR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="Fib-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="Fib"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class Fib-->
+<!--Class BKD-->
+ <UML:Class xmi.id="BKD" name="BKD">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ibkl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>index to BKL entry in plcfbkl that describes the
+ ending position of this bookmark in the CP stream.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:IBKL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="itcFirst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when bkf.fCol is 1, this is the index to the first column of a
+ table column bookmark.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>007F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ITCFIRST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fPub">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when 1, this indicates that this bookmark is marking the range
+ of a Macintosh Publisher section.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0080</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FPUB</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="itcLim">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when bkf.fCol is 1, this is the index to limit column of a
+ table column bookmark.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>7F00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ITCLIM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fCol">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when 1, this bookmark marks a range of columns in a table
+ specified by [bkf.itcFirst, bkf.itcLim).</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCOL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="BKD-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="BKD"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class BKD-->
+<!--Class SED-->
+ <UML:Class xmi.id="SED" name="SED">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="needsdocument"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>12</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>used internally by Word</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSepx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>file offset in main stream to beginning of SEPX stored for
+ section. If sed.fcSepx == 0xFFFFFFFF, the section properties for
+ the section are equal to the standard SEP (see SEP
+ definition).</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSEPX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fnMpr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>used internally by Word</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FNMPR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcMpr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>points to offset in FC space of main stream where the Macintosh
+ Print Record for a document created on a Mac will be stored</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCMPR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="sepx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sed</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="SEPX"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="SED-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="SED"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class SED-->
+<!--Class SHD-->
+ <UML:Class xmi.id="SHD" name="SHD">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="icoFore">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>foreground color (see chp.ico)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>001F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ICOFORE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="icoBack">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>background color (see chp.ico)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>03E0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ICOBACK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ipat">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>shading pattern (see ipat table below)
+ 0 Automatic
+ 1 Solid
+ 2 5 Percent
+ 3 10 Percent
+ 4 20 Percent
+ 5 25 Percent
+ 6 30 Percent
+ 7 40 Percent
+ 8 50 Percent
+ 9 60 Percent
+ 10 70 Percent
+ 11 75 Percent
+ 12 80 Percent
+ 13 90 Percent
+ 14 Dark Horizontal
+ 15 Dark Vertical
+ 16 Dark Forward Diagonal
+ 17 Dark Backward Diagonal
+ 18 Dark Cross
+ 19 Dark Diagonal Cross
+ 20 Horizontal
+ 21 Vertical
+ 22 Forward Diagonal
+ 23 Backward Diagonal
+ 24 Cross
+ 25 Diagonal Cross
+ 35 2.5 Percent
+ 36 7.5 Percent
+ 37 12.5 Percent
+ 38 15 Percent
+ 39 17.5 Percent
+ 40 22.5 Percent
+ 41 27.5 Percent
+ 42 32.5 Percent
+ 43 35 Percent
+ 44 37.5 Percent
+ 45 42.5 Percent
+ 46 45 Percent
+ 47 47.5 Percent
+ 48 52.5 Percent
+ 49 55 Percent
+ 50 57.5 Percent
+ 51 62.5 Percent
+ 52 65 Percent
+ 53 67.5 Percent
+ 54 72.5 Percent
+ 55 77.5 Percent
+ 56 82.5 Percent
+ 57 85 Percent
+ 58 87.5 Percent
+ 59 92.5 Percent
+ 60 95 Percent
+ 61 97.5 Percent
+ 62 97 Percent</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FC00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:IPAT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="SHD-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="SHD"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class SHD-->
+<!--Class CellShd-->
+ <UML:Class xmi.id="CellShd" name="CellShd">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shdForeColor">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>foreground color</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:SHDFORECOLOR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shdBackColor">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>background color</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:SHDBACKCOLOR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shdPattern">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>pattern</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:SHDPATTERN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="cellShd-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="CellShd"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class CellShd-->
+<!--Class BRC-->
+ <UML:Class xmi.id="BRC" name="BRC">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dptLineWidth">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>width of a single line in 1/8 pt, max of 32 pt.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00FF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DPTLINEWIDTH</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcType">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>border type code:
+ 0 none
+ 1 single
+ 2 thick
+ 3 double
+ 5 hairline
+ 6 dot
+ 7 dash large gap
+ 8 dot dash
+ 9 dot dot dash
+ 10 triple
+ 11 thin-thick small gap
+ 12 thick-thin small gap
+ 13 thin-thick-thin small gap
+ 14 thin-thick medium gap
+ 15 thick-thin medium gap
+ 16 thin-thick-thin medium gap
+ 17 thin-thick large gap
+ 18 thick-thin large gap
+ 19 thin-thick-thin large gap
+ 20 wave
+ 21 double wave
+ 22 dash small gap
+ 23 dash dot stroked
+ 24 emboss 3D
+ 25 engrave 3D
+ codes 64 - 230 represent border art types and are used only for
+ page borders.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FF00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCTYPE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ico">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>color code (see chp.ico)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00FF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ICO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dptSpace">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>width of space to maintain between border and text within
+ border. Must be 0 when BRC is a substructure of TC. Stored in
+ points.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1F00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DPTSPACE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fShadow">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when 1, border is drawn with shadow. Must be 0 when BRC is a
+ substructure of the TC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>13</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FSHADOW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fFrame">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FFRAME</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused2_15">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNUSED2_15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="BRC-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="BRC"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class BRC-->
+<!--Class TC-->
+ <UML:Class xmi.id="TC" name="TC">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>20</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fFirstMerged">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>set to 1 when cell is first cell of a range of cells that have
+ been merged. When a cell is merged, the display areas of the merged
+ cells are consolidated and the text within the cells is interpreted
+ as belonging to one text stream for purposes of calculating line
+ breaks.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0001</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FFIRSTMERGED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fMerged">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>set to 1 when cell has been merged with preceding cell.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0002</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FMERGED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fVertical">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>set to 1 when cell has vertical text flow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0004</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FVERTICAL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fBackward">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>for a vertical table cell, text flow is bottom to top when 1
+ and is bottom to top when 0.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0008</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FBACKWARD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fRotateFont">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>set to 1 when cell has rotated characters (i.e. uses
+ @font)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0010</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FROTATEFONT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fVertMerge">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>set to 1 when cell is vertically merged with the cell(s) above
+ and/or below. When cells are vertically merged, the display area of
+ the merged cells are consolidated. The consolidated area is used to
+ display the contents of the first vertically merged cell (the cell
+ with fVertRestart set to 1), and all other vertically merged cells
+ (those with fVertRestart set to 0) must be empty. Cells can only be
+ merged vertically if their left and right boundaries are (nearly)
+ identical (i.e. if corresponding entries in rgdxaCenter of the
+ table rows differ by at most 3).</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0020</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FVERTMERGE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fVertRestart">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>set to 1 when the cell is the first of a set of vertically
+ merged cells. The contents of a cell with fVertStart set to 1 are
+ displayed in the consolidated area belonging to the entire set of
+ vertically merged cells. Vertically merged cells with fVertRestart
+ set to 0 must be empty.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0040</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FVERTRESTART</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="vertAlign">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>specifies the alignment of the cell contents relative to text
+ flow (e.g. in a cell with bottom to top text flow and bottom
+ vertical alignment, the text is shifted horizontally to match the
+ cell's right boundary):
+ 0 top
+ 1 center
+ 2 bottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0180</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:VERTALIGN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fUnused">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FE00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FUNUSED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="CellPreferredSize">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>preferred size of cell</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CellPrefferedSize</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcTop">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>BRC[cbrcTc] rgbrc: notational convenience for referring to
+ brcTop, brcLeft, etc. fields.
+ specification of the top border of a table cell</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCTOP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcLeft">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>specification of left border of table row</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCLEFT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcBottom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>specification of bottom border of table row</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCBOTTOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcRight">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>specification of right border of table row.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCRIGHT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="TC-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="TC"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class TC-->
+<!--Class BKF-->
+ <UML:Class name="BKF" xmi.id="BKF">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ibkl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>index to BKL entry in plcfbkl that describes the
+ ending position of this bookmark in the CP stream.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:IBKL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="itcFirst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when bkf.fCol is 1, this is the index to the first column of a
+ table column bookmark.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>007F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ITCFIRST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fPub">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when 1, this indicates that this bookmark is marking the range
+ of a Macintosh Publisher section.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0080</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FPUB</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="itcLim">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when bkf.fCol is 1, this is the index to limit column of a
+ table column bookmark.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>7F00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ITCLIM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fCol">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when 1, this bookmark marks a range of columns in a table
+ specified by [bkf.itcFirst, bkf.itcLim).</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCOL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="BKF-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="BKF"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class BKF-->
+<!--Class LineProps-->
+ <UML:Class name="LineProps" xmi.id="LineProps">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linecolor">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>color of line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINECOLOR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linewidth">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>width of line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEWIDTH</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linetype">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>type of line, see border type code (BRC)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINETYPE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="LineProps-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="LineProps"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class LineProps-->
+<!--Class TBD-->
+ <UML:Class xmi.id="TBD" name="TBD">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:Classifier.feature>
+ <UML:Attribute name="jc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>justification code
+ 0 left tab
+ 1 centered tab
+ 2 right tab
+ 3 decimal tab
+ 4 bar</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>07</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:JC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="tlc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>tab leader code
+ 0 no leader
+ 1 dotted leader
+ 2 hyphenated leader
+ 3 single line leader
+ 4 heavy line leader</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>38</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:TLC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused0_6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>C0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNUSED0_6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="TBD-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="TBD"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class TBD-->
+<!--Class METAFILEPICT-->
+ <UML:Class xmi.id="METAFILEPICT" name="METAFILEPICT">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:Classifier.feature>
+ <UML:Attribute name="mm">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Specifies the mapping mode in which the picture is drawn. </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:MM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="xExt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Specifies the size of the metafile picture for all modes except
+ the MM_ISOTROPIC and MM_ANISOTROPIC modes. (For more information
+ about these modes, see the yExt member.) The x-extent specifies the
+ width of the rectangle within which the picture is drawn. The
+ coordinates are in units that correspond to the mapping mode.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:XEXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="yExt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Specifies the size of the metafile picture for all modes except
+ the MM_ISOTROPIC and MM_ANISOTROPIC modes. The y-extent specifies
+ the height of the rectangle within which the picture is drawn. The
+ coordinates are in units that correspond to the mapping mode.
+ For MM_ISOTROPIC and MM_ANISOTROPIC modes, which can be scaled,
+ the xExt and yExt members contain an optional suggested size in
+ MM_HIMETRIC units.
+ For MM_ANISOTROPIC pictures, xExt and yExt can be zero when no
+ suggested size is supplied. For MM_ISOTROPIC pictures, an aspect
+ ratio must be supplied even when no suggested size is given. (If a
+ suggested size is given, the aspect ratio is implied by the size.)
+ To give an aspect ratio without implying a suggested size, set xExt
+ and yExt to negative values whose ratio is the appropriate aspect
+ ratio. The magnitude of the negative xExt and yExt values is
+ ignored; only the ratio is used.
+ </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:YEXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="hMF">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Identifies a memory metafile.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:HMF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="METAFILEPICT-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="METAFILEPICT"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class METAFILEPICT-->
+<!--Class FFDATA-->
+ <UML:Class xmi.id="FFDATA" name="FFDATA">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resolvenoauto"/>
+ </UML:ModelElement.stereotype>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unknown">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unkonwn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dropdownIndex">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unkonwn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xfc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:dropdownIndex</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fTooltip">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>tool tip</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:tooltip</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fNomark">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>no mark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:nomark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fUseSize">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>use size</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:useSize</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fNumersOnly">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>numbers only</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:numbersOnly</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fDateOnly">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>date only</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:dateOnly</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fUnused">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unused</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xe0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:unused</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="size">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>size</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:size</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="hpsCheckbox">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:hpsCheckbox</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="title">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>title of the field</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xa</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fftitle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="String"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="FLT">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FLT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U32"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="default">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ffdefault</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="checked">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ffchecked</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U16"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="formatting">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ffformatting</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="help">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ffhelp</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="tooltip">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fftooltip</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FFDATA-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FFDATA"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class FFDATA-->
+<!--Class PICF-->
+ <UML:Class xmi.id="PICF" name="PICF">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resolvenoauto"/>
+ </UML:ModelElement.stereotype>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcb">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>number of bytes in the PIC structure plus size of following
+ picture data which may be a Window's metafile, a bitmap, or the
+ filename of a TIFF file. In the case of a Macintosh PICT picture,
+ this includes the size of the PIC, the standard "x" metafile, and
+ the Macintosh PICT data. See Appendix B for more information.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCB</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cbHeader">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>number of bytes in the PIC (to allow for future
+ expansion).</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CBHEADER</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="mfp">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>If a Windows metafile is stored immediately following the PIC
+ structure, the mfp is a Window's METAFILEPICT structure. When the
+ data immediately following the PIC is a TIFF filename, mfp.mm == 98
+ If a bitmap is stored after the pic, mfp.mm == 99
+ When the PIC describes a bitmap, mfp.xExt is the width of the
+ bitmap in pixels and mfp.yExt is the height of the bitmap in
+ pixels..
+ </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:MFP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="METAFILEPICT"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="bm_rcWinMF">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Window's bitmap structure when PIC describes a BITMAP (14
+ bytes).
+ Rect for window origin and extents when metafile is stored --
+ ignored if 0 (8 bytes).</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BM_RCWINMF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="arraycount"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dxaGoal">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>horizontal measurement in twips of the rectangle the picture
+ should be imaged within. when scaling bitmaps, dxaGoal and dyaGoal
+ may be ignored if the operation would cause the bitmap to shrink or
+ grow by a non -power-of-two factor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DXAGOAL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dyaGoal">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>vertical measurement in twips of the rectangle the picture
+ should be imaged within.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DYAGOAL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="mx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>horizontal scaling factor supplied by user expressed in .001%
+ units.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>20</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:MX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="my">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>vertical scaling factor supplied by user expressed in .001%
+ units.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>22</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:MY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dxaCropLeft">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the amount the picture has been cropped on the left in twips.
+ for all of the Crop values, a positive measurement means the
+ specified border has been moved inward from its original setting
+ and a negative measurement means the border has been moved outward
+ from its original setting.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>24</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DXACROPLEFT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dyaCropTop">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the amount the picture has been cropped on the top in
+ twips.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>26</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DYACROPTOP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dxaCropRight">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the amount the picture has been cropped on the right in
+ twips.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>28</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DXACROPRIGHT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dyaCropBottom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the amount the picture has been cropped on the bottom in
+ twips.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DYACROPBOTTOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Obsolete, superseded by brcTop, etc. In WinWord 1.x, it was the
+ type of border to place around picture
+ 0 single
+ 1 thick
+ 2 double
+ 3 shadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fFrameEmpty">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>picture consists of a single frame</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0010</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FFRAMEEMPTY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fBitmap">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>==1, when picture is just a bitmap</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0020</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FBITMAP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fDrawHatch">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>==1, when picture is an active OLE object</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0040</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FDRAWHATCH</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fError">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>==1, when picture is just an error message</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0080</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FERROR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="bpp">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>bits per pixel
+ 0 unknown
+ 1 monochrome
+ 4 VGA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FF00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BPP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcTop">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>specification for border above picture</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCTOP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcLeft">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>specification for border to the left of picture</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCLEFT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcBottom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>specification for border below picture</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>36</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCBOTTOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcRight">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>specification for border to the right of picture</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCRIGHT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dxaOrigin">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>horizontal offset of hand annotation origin</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DXAORIGIN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dyaOrigin">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>vertical offset of hand annotation origin</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>40</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DYAORIGIN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cProps">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unused</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>42</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CPROPS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="DffRecord">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DffRecord</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="DffRecord"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="noresolve"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="ffdata">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ffdata</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="FFDATA"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="noresolve"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="PICF-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="PICF"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class PICF-->
+<!--Class FSPA-->
+ <UML:Class xmi.id="FSPA" name="FSPA">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>26</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="spid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape Identifier. Used in conjunction with the office art data
+ (found via fcDggInfo in the FIB) to find the actual
+ data for this shape.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:SPID</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="xaLeft">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>xa left of rectangle enclosing shape relative to the origin of
+ the shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:XALEFT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="yaTop">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>ya top of rectangle enclosing shape relative to the origin of
+ the shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:YATOP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="xaRight">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>xa right of rectangle enclosing shape relative to the origin of
+ the shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:XARIGHT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="yaBottom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>ya bottom of the rectangle enclosing shape relative to the
+ origin of the shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:YABOTTOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fHdr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1 in the undo doc when shape is from the header doc, 0
+ otherwise (undefined when not in the undo doc)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0001</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FHDR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="bx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>x position of shape relative to anchor CP
+ 0 relative to page margin
+ 1 relative to top of page
+ 2 relative to text (column for horizontal text; paragraph for
+ vertical text)
+ 3 reserved for future use</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0006</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="by">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>y position of shape relative to anchor CP
+ 0 relative to page margin
+ 1 relative to top of page
+ 2 relative to text (paragraph for horizontal text; column for
+ vertical text)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0018</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="wr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>text wrapping mode
+ 0 like 2, but doesn't require absolute object
+ 1 no text next to shape
+ 2 wrap around absolute object
+ 3 wrap as if no object present
+ 4 wrap tightly around object
+ 5 wrap tightly, but allow holes
+ 6-15 reserved for future use</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01E0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:WR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="wrk">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>text wrapping mode type (valid only for wrapping modes 2 and
+ 4
+ 0 wrap both sides
+ 1 wrap only on left
+ 2 wrap only on right
+ 3 wrap only on largest side</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1E00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:WRK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fRcaSimple">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when set, temporarily overrides bx, by, forcing the xaLeft,
+ xaRight, yaTop, and yaBottom fields to all be page relative.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>13</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FRCASIMPLE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fBelowText">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1 shape is below text
+ 0 shape is above text</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FBELOWTEXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fAnchorLock">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1 anchor is locked
+ 0 anchor is not locked</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FANCHORLOCK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cTxbx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of textboxes in shape (undo doc only)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CTXBX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="shape">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="DffRecord"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FSPA-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FSPA"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class FSPA-->
+<!--Class FLD-->
+ <UML:Class xmi.id="FLD" name="FLD">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ch">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>type of field boundary the FLD describes:
+ 19 field begin mark
+ 20 field separator mark
+ 21 field end mark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CH</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused0_5">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>E0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNUSED0_5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="flt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>fld.ch == 19 (field begin mark) -&gt; U8 field type (see flt
+ table below).
+ fld.ch == 20 (field separator mark) -&gt; not present
+ fld.ch == 21 (field end mark) -&gt;
+ fDiffer:1 - ignored for saved file
+ fZombieEmbed:1 - 1 when result still believes this field is an
+ EMBED or LINK field.
+ fResultDirty:1 - when user has edited or formatted the result. ==
+ 0 otherwise.
+ fResultEdited:1 - 1 when user has inserted text into or deleted
+ text from the result.
+ fLocked:1 - 1 when field is locked from recalc.
+ fPrivateResult:1 - 1 whenever the result of the field is never to
+ be shown.
+ fNested:1 - 1 when field is nested within another field.
+ fHasSep:1 - 1 when field has a field separator.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FLT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FLD-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FLD"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class FLD-->
+<!--Class Rectangle-->
+ <UML:Class xmi.id="Rectangle" name="Rectangle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="left">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>left margin</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="top">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>top margin</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="right">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>right margin</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="bottom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>bottom margin</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="Rectangle-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="Rectangle"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class Rectangle-->
+<!--Class FOPTE-->
+ <UML:Class xmi.id="FOPTE" name="FOPTE">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="withindex"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resolvenoauto"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Property ID</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3fff</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shppid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fBid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>value is a blip ID u2013 only valid if fComplex is FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfBid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fComplex">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>complex property, value is length</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfComplex</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="op">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="name">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpname</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="value">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpvalue</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="Value"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="stringValue">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpstringvalue</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="Value"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="noresolve"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FOPTE-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FOPTE"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class FOPTE-->
+<!--Class FDGG-->
+ <UML:Class xmi.id="FDGG" name="FDGG">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="spidMax">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The current maximum shape ID</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpspidMax</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cidcl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The number of ID clusters (FIDCLs)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpcidcl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cspSaved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The total number of shapes saved (including deleted shapes, if undo information was saved)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpcspSaved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cdgSaved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The total number of drawings saved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpcdgSaved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FDGG-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FDGG"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class FDGG-->
+<!--Class FIDCL-->
+ <UML:Class xmi.id="FIDCL" name="FIDCL">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dgid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>DG owning the SPIDs in this cluster</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpdgid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cspidCur">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>number of SPIDs used so far</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpcspidCur</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FIDCL-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FIDCL"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class FIDCL-->
+<!--Class FBSE-->
+ <UML:Class xmi.id="FBSE" name="FBSE">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x24</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="btWin32">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Required type on Win32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpbtWin32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="btMacOS">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Required type on Mac</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpbtMacOS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="rgbUid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Identifier of blip</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shprgbUid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="arraycount"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="tag">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>currently unused</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x12</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shptag</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="size">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip size in stream</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpsize</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cRef">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Reference count on the blip</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x18</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpcRef</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="foDelay">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>File offset in the delay stream</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfoDelay</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="usage">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>How this blip is used (MSOBLIPUSAGE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x20</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpusage</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cbName">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length of the blip name</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x21</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpcbName</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused2">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>for the future</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x22</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpunused2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused3">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>for the future</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x23</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpunused3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FBSE-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FBSE"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class FBSE-->
+<!--Class FRD-->
+ <UML:Class xmi.id="FRD" name="FRD">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FRD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FRD-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FRD"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class FRD-->
+<!--Class ATRD-->
+ <UML:Class xmi.id="ATRD" name="ATRD">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>28</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ibst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>index into GrpXstAtnOwners</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:IBST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ak">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unused</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0003</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:AK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused22_2">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unused</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FFFC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNUSED22_2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="grfbmc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unused</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>18</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:GRFBMC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lTagBkmk">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when not -1, this tag identifies the annotation bookmark that
+ locates the range of CPs in the main document which this annotation
+ references.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LTAGBKMK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="xstUsrInitl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:xstUsrInitl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>pascal-style string holding initials of annotation author</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="ATRD-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="ATRD"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class ATRD-->
+<!--Class FTXBXS-->
+ <UML:Class xmi.id="FTXBXS" name="FTXBXS">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>22</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cTxbx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when not fReusable, counts the number of textboxes in this
+ story chain</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CTXBX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="iNextReuse">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when fReusable, the index of the next in the linked list of
+ reusable FTXBXSs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:INEXTREUSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cReusable">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>if fReusable, counts the number of reusable FTXBXSs follow this
+ one in the linked list</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CREUSABLE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fReusable">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>this FTXBXS is not currently in use</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FREUSABLE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="reserved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:RESERVED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape Identifier (see FSPA) for first Office Shape in textbox
+ chain.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LID</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="txidUndo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>12</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:TXIDUNDO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FTXBXS-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FTXBXS"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class FTXBXS-->
+<!--Class FDG-->
+ <UML:Class xmi.id="FDG" name="FDG">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:Classifier.feature>
+ <UML:Attribute name="csp">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The number of shapes in this drawing</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:csp</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="spidCur">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The last MSOSPID given to an SP in this DG</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:spidCur</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FDG-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FDG"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--Class FDG-->
+<!--WW8 resources-->
+<!--SPRMS-->
+<!--SPRM sprmPContextualSpacing-->
+ <UML:Class xmi.id="sprmPContextualSpacing" name="sprmPContextualSpacing">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x246D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPIContextualSpacing</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPContextualSpacing-->
+<!--SPRM sprmPIstdPermute-->
+ <UML:Class xmi.id="sprmPIstdPermute" name="sprmPIstdPermute">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC601</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPIstdPermute</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPIstdPermute-->
+<!--SPRM sprmPTabProps-->
+ <UML:Class xmi.id="sprmPTabProps" name="sprmPTabProps">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x646B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPTabProps</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPTabProps-->
+<!--SPRM sprmTFCantSplit90-->
+ <UML:Class xmi.id="sprmTFCantSplit90" name="sprmTFCantSplit90">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3466</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTFCantSplit90</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTFCantSplit90-->
+<!--SPRM sprmTCantSplit-->
+ <UML:Class xmi.id="sprmTCantSplit" name="sprmTCantSplit">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3644</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTCantSplit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTCantSplit-->
+<!--SPRM sprmPIncLvl-->
+ <UML:Class xmi.id="sprmPIncLvl" name="sprmPIncLvl">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2602</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPIncLvl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPIncLvl-->
+<!--SPRM sprmPJcExtra-->
+ <UML:Class xmi.id="sprmPJcExtra" name="sprmPJcExtra">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2461</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPJcExtra</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPJcExtra-->
+<!--SPRM sprmPJc-->
+ <UML:Class xmi.id="sprmPJc" name="sprmPJc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2403</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPJc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPJc-->
+<!--SPRM sprmPFSideBySide-->
+ <UML:Class xmi.id="sprmPFSideBySide" name="sprmPFSideBySide">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2404</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFSideBySide</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFSideBySide-->
+<!--SPRM sprmPFKeep-->
+ <UML:Class xmi.id="sprmPFKeep" name="sprmPFKeep">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2405</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFKeep</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFKeep-->
+<!--SPRM sprmPFKeepFollow-->
+ <UML:Class xmi.id="sprmPFKeepFollow" name="sprmPFKeepFollow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2406</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFKeepFollow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFKeepFollow-->
+<!--SPRM sprmPFPageBreakBefore-->
+ <UML:Class xmi.id="sprmPFPageBreakBefore" name="sprmPFPageBreakBefore">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2407</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFPageBreakBefore</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFPageBreakBefore-->
+<!--SPRM sprmPBrcl-->
+ <UML:Class xmi.id="sprmPBrcl" name="sprmPBrcl">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2408</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPBrcl-->
+<!--SPRM sprmPBrcp-->
+ <UML:Class xmi.id="sprmPBrcp" name="sprmPBrcp">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2409</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcp</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPBrcp-->
+<!--SPRM sprmPIlvl-->
+ <UML:Class xmi.id="sprmPIlvl" name="sprmPIlvl">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x260A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPIlvl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPIlvl-->
+<!--SPRM sprmPIlfo-->
+ <UML:Class xmi.id="sprmPIlfo" name="sprmPIlfo">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x460B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPIlfo</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPIlfo-->
+<!--SPRM sprmPFNoLineNumb-->
+ <UML:Class xmi.id="sprmPFNoLineNumb" name="sprmPFNoLineNumb">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x240C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFNoLineNumb</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFNoLineNumb-->
+<!--SPRM sprmPChgTabsPapx-->
+ <UML:Class xmi.id="sprmPChgTabsPapx" name="sprmPChgTabsPapx">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC60D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPChgTabsPapx</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="dxaDel">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:dxaDel</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>array of tab positions for which tabs should be deleted</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="S16"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Operation name="dxaAdd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:dxaAdd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>array of tab positions for which tabs should be added</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="S16"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Operation name="tbdAdd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:tbdAdd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>array of tab descriptors corresponding to rgdxaAdd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="TBD"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPChgTabsPapx-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPChgTabsPapx"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmPChgTabsPapx-->
+<!--SPRM sprmPDxaRight-->
+ <UML:Class xmi.id="sprmPDxaRight" name="sprmPDxaRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x840E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDxaRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPDxaRight-->
+<!--SPRM sprmPDxaLeft-->
+ <UML:Class xmi.id="sprmPDxaLeft" name="sprmPDxaLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x840F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDxaLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPDxaLeft-->
+<!--SPRM sprmPNest-->
+ <UML:Class xmi.id="sprmPNest" name="sprmPNest">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4610</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPNest</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPNest-->
+<!--SPRM sprmPDxaLeft1-->
+ <UML:Class xmi.id="sprmPDxaLeft1" name="sprmPDxaLeft1">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8411</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDxaLeft1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPDxaLeft1-->
+<!--SPRM sprmPDyaLine-->
+ <UML:Class xmi.id="sprmPDyaLine" name="sprmPDyaLine">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6412</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDyaLine</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPDyaLine-->
+<!--SPRM sprmPDyaBefore-->
+ <UML:Class xmi.id="sprmPDyaBefore" name="sprmPDyaBefore">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xA413</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDyaBefore</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPDyaBefore-->
+<!--SPRM sprmPDyaAfter-->
+ <UML:Class xmi.id="sprmPDyaAfter" name="sprmPDyaAfter">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xA414</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDyaAfter</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPDyaAfter-->
+<!--SPRM sprmPChgTabs-->
+ <UML:Class xmi.id="sprmPChgTabs" name="sprmPChgTabs">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC615</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPChgTabs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPChgTabs-->
+<!--SPRM sprmPFInTable-->
+ <UML:Class xmi.id="sprmPFInTable" name="sprmPFInTable">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2416</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFInTable</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFInTable-->
+<!--SPRM sprmPCell-->
+ <UML:Class xmi.id="sprmPCell" name="sprmPCell">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x244b</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPCell</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPCell-->
+<!--SPRM sprmPRow-->
+ <UML:Class xmi.id="sprmPRow" name="sprmPRow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x244c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPRow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPRow-->
+<!--SPRM sprmPFTtp-->
+ <UML:Class xmi.id="sprmPFTtp" name="sprmPFTtp">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2417</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFTtp</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFTtp-->
+<!--SPRM sprmPDxaAbs-->
+ <UML:Class xmi.id="sprmPDxaAbs" name="sprmPDxaAbs">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8418</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDxaAbs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPDxaAbs-->
+<!--SPRM sprmPDyaAbs-->
+ <UML:Class xmi.id="sprmPDyaAbs" name="sprmPDyaAbs">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8419</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDyaAbs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPDyaAbs-->
+<!--SPRM sprmPDxaWidth-->
+ <UML:Class xmi.id="sprmPDxaWidth" name="sprmPDxaWidth">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x841A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDxaWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPDxaWidth-->
+<!--SPRM sprmPPc-->
+ <UML:Class xmi.id="sprmPPc" name="sprmPPc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x261B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPPc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPPc-->
+<!--SPRM sprmPBrcTop10-->
+ <UML:Class xmi.id="sprmPBrcTop10" name="sprmPBrcTop10">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x461C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcTop10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPBrcTop10-->
+<!--SPRM sprmPBrcLeft10-->
+ <UML:Class xmi.id="sprmPBrcLeft10" name="sprmPBrcLeft10">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x461D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcLeft10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPBrcLeft10-->
+<!--SPRM sprmPBrcBottom10-->
+ <UML:Class xmi.id="sprmPBrcBottom10" name="sprmPBrcBottom10">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x461E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcBottom10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPBrcBottom10-->
+<!--SPRM sprmPBrcRight10-->
+ <UML:Class xmi.id="sprmPBrcRight10" name="sprmPBrcRight10">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x461F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcRight10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPBrcRight10-->
+<!--SPRM sprmPBrcBetween10-->
+ <UML:Class xmi.id="sprmPBrcBetween10" name="sprmPBrcBetween10">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4620</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcBetween10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPBrcBetween10-->
+<!--SPRM sprmPBrcBar10-->
+ <UML:Class xmi.id="sprmPBrcBar10" name="sprmPBrcBar10">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4621</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcBar10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPBrcBar10-->
+<!--SPRM sprmPDxaFromText10-->
+ <UML:Class xmi.id="sprmPDxaFromText10" name="sprmPDxaFromText10">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4622</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDxaFromText10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPDxaFromText10-->
+<!--SPRM sprmPWr-->
+ <UML:Class xmi.id="sprmPWr" name="sprmPWr">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2423</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPWr</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPWr-->
+<!--SPRM sprmPBrcBar-->
+ <UML:Class xmi.id="sprmPBrcBar" name="sprmPBrcBar">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6629</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcBar</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBrcBar-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBrcBar"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmPBrcBar-->
+<!--SPRM sprmPFNoAutoHyph-->
+ <UML:Class xmi.id="sprmPFNoAutoHyph" name="sprmPFNoAutoHyph">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x242A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFNoAutoHyph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFNoAutoHyph-->
+<!--SPRM sprmPWHeightAbs-->
+ <UML:Class xmi.id="sprmPWHeightAbs" name="sprmPWHeightAbs">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x442B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPWHeightAbs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPWHeightAbs-->
+<!--SPRM sprmPDcs-->
+ <UML:Class xmi.id="sprmPDcs" name="sprmPDcs">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x442C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDcs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPDcs-->
+<!--SPRM sprmPShd-->
+ <UML:Class xmi.id="sprmPShd" name="sprmPShd">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x442D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPShd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPShd-->
+<!--SPRM sprmPDyaFromText-->
+ <UML:Class xmi.id="sprmPDyaFromText" name="sprmPDyaFromText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x842E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDyaFromText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPDyaFromText-->
+<!--SPRM sprmPDxaFromText-->
+ <UML:Class xmi.id="sprmPDxaFromText" name="sprmPDxaFromText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x842F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDxaFromText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPDxaFromText-->
+<!--SPRM sprmPFLocked-->
+ <UML:Class xmi.id="sprmPFLocked" name="sprmPFLocked">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2430</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFLocked</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFLocked-->
+<!--SPRM sprmPFWidowControl-->
+ <UML:Class xmi.id="sprmPFWidowControl" name="sprmPFWidowControl">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2431</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFWidowControl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFWidowControl-->
+<!--SPRM sprmPRuler-->
+ <UML:Class xmi.id="sprmPRuler" name="sprmPRuler">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC632</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPRuler</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPRuler-->
+<!--SPRM sprmPFKinsoku-->
+ <UML:Class xmi.id="sprmPFKinsoku" name="sprmPFKinsoku">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2433</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFKinsoku</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFKinsoku-->
+<!--SPRM sprmPFWordWrap-->
+ <UML:Class xmi.id="sprmPFWordWrap" name="sprmPFWordWrap">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2434</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFWordWrap</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFWordWrap-->
+<!--SPRM sprmPFOverflowPunct-->
+ <UML:Class xmi.id="sprmPFOverflowPunct" name="sprmPFOverflowPunct">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2435</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFOverflowPunct</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFOverflowPunct-->
+<!--SPRM sprmPFTopLinePunct-->
+ <UML:Class xmi.id="sprmPFTopLinePunct" name="sprmPFTopLinePunct">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2436</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFTopLinePunct</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFTopLinePunct-->
+<!--SPRM sprmPFAutoSpaceDE-->
+ <UML:Class xmi.id="sprmPFAutoSpaceDE" name="sprmPFAutoSpaceDE">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2437</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFAutoSpaceDE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFAutoSpaceDE-->
+<!--SPRM sprmPFAutoSpaceDN-->
+ <UML:Class xmi.id="sprmPFAutoSpaceDN" name="sprmPFAutoSpaceDN">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2438</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFAutoSpaceDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFAutoSpaceDN-->
+<!--SPRM sprmPWAlignFont-->
+ <UML:Class xmi.id="sprmPWAlignFont" name="sprmPWAlignFont">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4439</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPWAlignFont</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPWAlignFont-->
+<!--SPRM sprmPFrameTextFlow-->
+ <UML:Class xmi.id="sprmPFrameTextFlow" name="sprmPFrameTextFlow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x443A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFrameTextFlow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFrameTextFlow-->
+<!--SPRM sprmPISnapBaseLine-->
+ <UML:Class xmi.id="sprmPISnapBaseLine" name="sprmPISnapBaseLine">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x243B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPISnapBaseLine</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPISnapBaseLine-->
+<!--SPRM sprmPAnld-->
+ <UML:Class xmi.id="sprmPAnld" name="sprmPAnld">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC63E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPAnld</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPAnld-->
+<!--SPRM sprmPPropRMark-->
+ <UML:Class xmi.id="sprmPPropRMark" name="sprmPPropRMark">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC63F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPPropRMark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPPropRMark-->
+<!--SPRM sprmPOutLvl-->
+ <UML:Class xmi.id="sprmPOutLvl" name="sprmPOutLvl">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2640</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPOutLvl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPOutLvl-->
+<!--SPRM sprmPFBiDi-->
+ <UML:Class xmi.id="sprmPFBiDi" name="sprmPFBiDi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2441</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFBiDi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFBiDi-->
+<!--SPRM sprmPFNumRMIns-->
+ <UML:Class xmi.id="sprmPFNumRMIns" name="sprmPFNumRMIns">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2443</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFNumRMIns</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFNumRMIns-->
+<!--SPRM sprmPCrLf-->
+ <UML:Class xmi.id="sprmPCrLf" name="sprmPCrLf">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2444</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPCrLf</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPCrLf-->
+<!--SPRM sprmPNumRM-->
+ <UML:Class xmi.id="sprmPNumRM" name="sprmPNumRM">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC645</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPNumRM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPNumRM-->
+<!--SPRM sprmPHugePapx-->
+ <UML:Class xmi.id="sprmPHugePapx" name="sprmPHugePapx">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6645</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPHugePapx</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPHugePapx-->
+<!--SPRM sprmPFUsePgsuSettings-->
+ <UML:Class xmi.id="sprmPFUsePgsuSettings" name="sprmPFUsePgsuSettings">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2447</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFUsePgsuSettings</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFUsePgsuSettings-->
+<!--SPRM sprmPFAdjustRight-->
+ <UML:Class xmi.id="sprmPFAdjustRight" name="sprmPFAdjustRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2448</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFAdjustRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPFAdjustRight-->
+<!--SPRM sprmCFRMarkDel-->
+ <UML:Class xmi.id="sprmCFRMarkDel" name="sprmCFRMarkDel">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0800</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFRMarkDel</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFRMarkDel-->
+<!--SPRM sprmCFRMark-->
+ <UML:Class xmi.id="sprmCFRMark" name="sprmCFRMark">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0801</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFRMark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFRMark-->
+<!--SPRM sprmCFFldVanish-->
+ <UML:Class xmi.id="sprmCFFldVanish" name="sprmCFFldVanish">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0802</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFFldVanish</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFFldVanish-->
+<!--SPRM sprmCPicLocation-->
+ <UML:Class xmi.id="sprmCPicLocation" name="sprmCPicLocation">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6A03</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCPicLocation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPic">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>picture location</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fcPic</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmCPicLocation-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmCPicLocation"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmCPicLocation-->
+<!--SPRM sprmCIbstRMark-->
+ <UML:Class xmi.id="sprmCIbstRMark" name="sprmCIbstRMark">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4804</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIbstRMark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCIbstRMark-->
+<!--SPRM sprmCDttmRMark-->
+ <UML:Class xmi.id="sprmCDttmRMark" name="sprmCDttmRMark">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6805</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCDttmRMark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCDttmRMark-->
+<!--SPRM sprmCFData-->
+ <UML:Class xmi.id="sprmCFData" name="sprmCFData">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0806</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFData</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFData-->
+<!--SPRM sprmCIdslRMark-->
+ <UML:Class xmi.id="sprmCIdslRMark" name="sprmCIdslRMark">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4807</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIdslRMark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCIdslRMark-->
+<!--SPRM sprmCChs-->
+ <UML:Class xmi.id="sprmCChs" name="sprmCChs">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xEA08</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCChs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCChs-->
+<!--SPRM sprmCSymbol-->
+ <UML:Class xmi.id="sprmCSymbol" name="sprmCSymbol">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6A09</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCSymbol</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="font">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>index of font for symbol in font table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FONT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="char">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character code of symbol</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x04</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CHAR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmCSymbol-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmCSymbol"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmCSymbol-->
+<!--SPRM sprmCFOle2-->
+ <UML:Class xmi.id="sprmCFOle2" name="sprmCFOle2">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x080A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFOle2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFOle2-->
+<!--SPRM sprmCIdCharType-->
+ <UML:Class xmi.id="sprmCIdCharType" name="sprmCIdCharType">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x480B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIdCharType</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCIdCharType-->
+<!--SPRM sprmCHighlight-->
+ <UML:Class xmi.id="sprmCHighlight" name="sprmCHighlight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A0C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHighlight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCHighlight-->
+<!--SPRM sprmCObjLocation-->
+ <UML:Class xmi.id="sprmCObjLocation" name="sprmCObjLocation">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x680E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCObjLocation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCObjLocation-->
+<!--SPRM sprmCFFtcAsciSymb-->
+ <UML:Class xmi.id="sprmCFFtcAsciSymb" name="sprmCFFtcAsciSymb">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFFtcAsciSymb</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFFtcAsciSymb-->
+<!--SPRM sprmCIstd-->
+ <UML:Class xmi.id="sprmCIstd" name="sprmCIstd">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A30</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIstd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCIstd-->
+<!--SPRM sprmCIstdPermute-->
+ <UML:Class xmi.id="sprmCIstdPermute" name="sprmCIstdPermute">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCA31</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIstdPermute</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCIstdPermute-->
+<!--SPRM sprmCDefault-->
+ <UML:Class xmi.id="sprmCDefault" name="sprmCDefault">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCDefault</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCDefault-->
+<!--SPRM sprmCPlain-->
+ <UML:Class xmi.id="sprmCPlain" name="sprmCPlain">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A33</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCPlain</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCPlain-->
+<!--SPRM sprmCKcd-->
+ <UML:Class xmi.id="sprmCKcd" name="sprmCKcd">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A34</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCKcd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCKcd-->
+<!--SPRM sprmCFBold-->
+ <UML:Class xmi.id="sprmCFBold" name="sprmCFBold">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0835</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFBold</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFBold-->
+<!--SPRM sprmCFItalic-->
+ <UML:Class xmi.id="sprmCFItalic" name="sprmCFItalic">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0836</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFItalic</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFItalic-->
+<!--SPRM sprmCFStrike-->
+ <UML:Class xmi.id="sprmCFStrike" name="sprmCFStrike">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0837</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFStrike</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFStrike-->
+<!--SPRM sprmCFOutline-->
+ <UML:Class xmi.id="sprmCFOutline" name="sprmCFOutline">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0838</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFOutline</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFOutline-->
+<!--SPRM sprmCFShadow-->
+ <UML:Class xmi.id="sprmCFShadow" name="sprmCFShadow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0839</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFShadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFShadow-->
+<!--SPRM sprmCFSmallCaps-->
+ <UML:Class xmi.id="sprmCFSmallCaps" name="sprmCFSmallCaps">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x083A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFSmallCaps</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFSmallCaps-->
+<!--SPRM sprmCFCaps-->
+ <UML:Class xmi.id="sprmCFCaps" name="sprmCFCaps">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x083B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFCaps</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFCaps-->
+<!--SPRM sprmCFVanish-->
+ <UML:Class xmi.id="sprmCFVanish" name="sprmCFVanish">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x083C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFVanish</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFVanish-->
+<!--SPRM sprmCFtcDefault-->
+ <UML:Class xmi.id="sprmCFtcDefault" name="sprmCFtcDefault">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A3D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFtcDefault</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFtcDefault-->
+<!--SPRM sprmCKul-->
+ <UML:Class xmi.id="sprmCKul" name="sprmCKul">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A3E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCKul</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCKul-->
+<!--SPRM sprmCSizePos-->
+ <UML:Class xmi.id="sprmCSizePos" name="sprmCSizePos">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xEA3F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCSizePos</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCSizePos-->
+<!--SPRM sprmCDxaSpace-->
+ <UML:Class xmi.id="sprmCDxaSpace" name="sprmCDxaSpace">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8840</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCDxaSpace</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCDxaSpace-->
+<!--SPRM sprmCLid-->
+ <UML:Class xmi.id="sprmCLid" name="sprmCLid">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A41</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCLid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCLid-->
+<!--SPRM sprmCIco-->
+ <UML:Class xmi.id="sprmCIco" name="sprmCIco">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A42</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIco</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCIco-->
+<!--SPRM sprmCHps-->
+ <UML:Class xmi.id="sprmCHps" name="sprmCHps">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A43</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHps</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCHps-->
+<!--SPRM sprmCHpsInc-->
+ <UML:Class xmi.id="sprmCHpsInc" name="sprmCHpsInc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A44</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHpsInc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCHpsInc-->
+<!--SPRM sprmCHpsPos-->
+ <UML:Class xmi.id="sprmCHpsPos" name="sprmCHpsPos">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4845</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHpsPos</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCHpsPos-->
+<!--SPRM sprmCHpsPosAdj-->
+ <UML:Class xmi.id="sprmCHpsPosAdj" name="sprmCHpsPosAdj">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A46</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHpsPosAdj</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCHpsPosAdj-->
+<!--SPRM sprmCMajority-->
+ <UML:Class xmi.id="sprmCMajority" name="sprmCMajority">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCA47</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCMajority</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCMajority-->
+<!--SPRM sprmCIss-->
+ <UML:Class xmi.id="sprmCIss" name="sprmCIss">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A48</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIss</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCIss-->
+<!--SPRM sprmCHpsNew50-->
+ <UML:Class xmi.id="sprmCHpsNew50" name="sprmCHpsNew50">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCA49</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHpsNew50</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCHpsNew50-->
+<!--SPRM sprmCHpsInc1-->
+ <UML:Class xmi.id="sprmCHpsInc1" name="sprmCHpsInc1">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCA4A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHpsInc1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCHpsInc1-->
+<!--SPRM sprmCHpsKern-->
+ <UML:Class xmi.id="sprmCHpsKern" name="sprmCHpsKern">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x484B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHpsKern</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCHpsKern-->
+<!--SPRM sprmCMajority50-->
+ <UML:Class xmi.id="sprmCMajority50" name="sprmCMajority50">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCA4C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCMajority50</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCMajority50-->
+<!--SPRM sprmCHpsMul-->
+ <UML:Class xmi.id="sprmCHpsMul" name="sprmCHpsMul">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A4D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHpsMul</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCHpsMul-->
+<!--SPRM sprmCYsri-->
+ <UML:Class xmi.id="sprmCYsri" name="sprmCYsri">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x484E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCYsri</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCYsri-->
+<!--SPRM sprmCRgFtc0-->
+ <UML:Class xmi.id="sprmCRgFtc0" name="sprmCRgFtc0">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A4F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCRgFtc0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCRgFtc0-->
+<!--SPRM sprmCRgFtc1-->
+ <UML:Class xmi.id="sprmCRgFtc1" name="sprmCRgFtc1">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A50</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCRgFtc1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCRgFtc1-->
+<!--SPRM sprmCRgFtc2-->
+ <UML:Class xmi.id="sprmCRgFtc2" name="sprmCRgFtc2">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A51</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCRgFtc2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCRgFtc2-->
+<!--SPRM sprmCCharScale-->
+ <UML:Class xmi.id="sprmCCharScale" name="sprmCCharScale">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4852</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCCharScale</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCCharScale-->
+<!--SPRM sprmCFDStrike-->
+ <UML:Class xmi.id="sprmCFDStrike" name="sprmCFDStrike">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A53</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFDStrike</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFDStrike-->
+<!--SPRM sprmCFImprint-->
+ <UML:Class xmi.id="sprmCFImprint" name="sprmCFImprint">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0854</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFImprint</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFImprint-->
+<!--SPRM sprmCFNoProof-->
+ <UML:Class xmi.id="sprmCFNoProof" name="sprmCFNoProof">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0875</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFNoProof</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFNoProof-->
+<!--SPRM sprmCFspecVanish-->
+ <UML:Class xmi.id="sprmCFspecVanish" name="sprmCFspecVanish">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0818</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFspecVanish</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFspecVanish-->
+<!--SPRM sprmCFitText-->
+ <UML:Class xmi.id="sprmCFitText" name="sprmCFitText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xca76</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFitText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFitText-->
+<!--SPRM sprmCComplexScript-->
+ <UML:Class xmi.id="sprmCComplexScript" name="sprmCComplexScript">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x882</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCComplexScript</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCComplexScript-->
+<!--SPRM sprmPTightWrap-->
+ <UML:Class xmi.id="sprmPTightWrap" name="sprmPTightWrap">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2471</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPTightWrap</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPTightWrap-->
+<!--SPRM sprmCFSpec-->
+ <UML:Class xmi.id="sprmCFSpec" name="sprmCFSpec">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0855</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFSpec</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFSpec-->
+<!--SPRM sprmCFObj-->
+ <UML:Class xmi.id="sprmCFObj" name="sprmCFObj">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0856</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFObj</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFObj-->
+<!--SPRM sprmCPropRMark-->
+ <UML:Class xmi.id="sprmCPropRMark" name="sprmCPropRMark">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCA57</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCPropRMark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCPropRMark-->
+<!--SPRM sprmCFEmboss-->
+ <UML:Class xmi.id="sprmCFEmboss" name="sprmCFEmboss">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0858</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFEmboss</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFEmboss-->
+<!--SPRM sprmCSfxText-->
+ <UML:Class xmi.id="sprmCSfxText" name="sprmCSfxText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2859</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCSfxText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCSfxText-->
+<!--SPRM sprmCFBiDi-->
+ <UML:Class xmi.id="sprmCFBiDi" name="sprmCFBiDi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x085A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFBiDi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFBiDi-->
+<!--SPRM sprmCFDiacColor-->
+ <UML:Class xmi.id="sprmCFDiacColor" name="sprmCFDiacColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x085B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFDiacColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFDiacColor-->
+<!--SPRM sprmCFBoldBi-->
+ <UML:Class xmi.id="sprmCFBoldBi" name="sprmCFBoldBi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x085C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFBoldBi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFBoldBi-->
+<!--SPRM sprmCFItalicBi-->
+ <UML:Class xmi.id="sprmCFItalicBi" name="sprmCFItalicBi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x085D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFItalicBi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFItalicBi-->
+<!--SPRM sprmCFtcBi-->
+ <UML:Class xmi.id="sprmCFtcBi" name="sprmCFtcBi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A5E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFtcBi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFtcBi-->
+<!--SPRM sprmCLidBi-->
+ <UML:Class xmi.id="sprmCLidBi" name="sprmCLidBi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x485F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCLidBi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCLidBi-->
+<!--SPRM sprmCIcoBi-->
+ <UML:Class xmi.id="sprmCIcoBi" name="sprmCIcoBi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A60</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIcoBi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCIcoBi-->
+<!--SPRM sprmCHpsBi-->
+ <UML:Class xmi.id="sprmCHpsBi" name="sprmCHpsBi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A61</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHpsBi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCHpsBi-->
+<!--SPRM sprmCDispFldRMark-->
+ <UML:Class xmi.id="sprmCDispFldRMark" name="sprmCDispFldRMark">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCA62</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCDispFldRMark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCDispFldRMark-->
+<!--SPRM sprmCIbstRMarkDel-->
+ <UML:Class xmi.id="sprmCIbstRMarkDel" name="sprmCIbstRMarkDel">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4863</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIbstRMarkDel</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCIbstRMarkDel-->
+<!--SPRM sprmCDttmRMarkDel-->
+ <UML:Class xmi.id="sprmCDttmRMarkDel" name="sprmCDttmRMarkDel">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6864</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCDttmRMarkDel</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCDttmRMarkDel-->
+<!--SPRM sprmCBrc-->
+ <UML:Class xmi.id="sprmCBrc" name="sprmCBrc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6865</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCBrc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCBrc-->
+<!--SPRM sprmCShd-->
+ <UML:Class xmi.id="sprmCShd" name="sprmCShd">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4866</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCShd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCShd-->
+<!--SPRM sprmCIdslRMarkDel-->
+ <UML:Class xmi.id="sprmCIdslRMarkDel" name="sprmCIdslRMarkDel">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4867</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIdslRMarkDel</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCIdslRMarkDel-->
+<!--SPRM sprmCFUsePgsuSettings-->
+ <UML:Class xmi.id="sprmCFUsePgsuSettings" name="sprmCFUsePgsuSettings">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0868</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFUsePgsuSettings</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCFUsePgsuSettings-->
+<!--SPRM sprmCCpg-->
+ <UML:Class xmi.id="sprmCCpg" name="sprmCCpg">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x486B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCCpg</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCCpg-->
+<!--SPRM sprmCRgLid0-->
+ <UML:Class xmi.id="sprmCRgLid0" name="sprmCRgLid0">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x486D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCRgLid0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCRgLid0-->
+<!--SPRM sprmCRgLid1-->
+ <UML:Class xmi.id="sprmCRgLid1" name="sprmCRgLid1">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x486E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCRgLid1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCRgLid1-->
+<!--SPRM sprmCIdctHint-->
+ <UML:Class xmi.id="sprmCIdctHint" name="sprmCIdctHint">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x286F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIdctHint</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCIdctHint-->
+<!--SPRM sprmPicBrcl-->
+ <UML:Class xmi.id="sprmPicBrcl" name="sprmPicBrcl">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2E00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPicBrcl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPicBrcl-->
+<!--SPRM sprmPicScale-->
+ <UML:Class xmi.id="sprmPicScale" name="sprmPicScale">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCE01</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPicScale</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPicScale-->
+<!--SPRM sprmPicBrcTop-->
+ <UML:Class xmi.id="sprmPicBrcTop" name="sprmPicBrcTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6C02</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPicBrcTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPicBrcTop-->
+<!--SPRM sprmPicBrcLeft-->
+ <UML:Class xmi.id="sprmPicBrcLeft" name="sprmPicBrcLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6C03</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPicBrcLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPicBrcLeft-->
+<!--SPRM sprmPicBrcBottom-->
+ <UML:Class xmi.id="sprmPicBrcBottom" name="sprmPicBrcBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6C04</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPicBrcBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPicBrcBottom-->
+<!--SPRM sprmPicBrcRight-->
+ <UML:Class xmi.id="sprmPicBrcRight" name="sprmPicBrcRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6C05</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPicBrcRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPicBrcRight-->
+<!--SPRM sprmScnsPgn-->
+ <UML:Class xmi.id="sprmScnsPgn" name="sprmScnsPgn">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmScnsPgn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmScnsPgn-->
+<!--SPRM sprmSiHeadingPgn-->
+ <UML:Class xmi.id="sprmSiHeadingPgn" name="sprmSiHeadingPgn">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3001</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSiHeadingPgn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSiHeadingPgn-->
+<!--SPRM sprmSOlstAnm-->
+ <UML:Class xmi.id="sprmSOlstAnm" name="sprmSOlstAnm">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD202</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSOlstAnm</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSOlstAnm-->
+<!--SPRM sprmSDxaColWidth-->
+ <UML:Class xmi.id="sprmSDxaColWidth" name="sprmSDxaColWidth">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xF203</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDxaColWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSDxaColWidth-->
+<!--SPRM sprmSDxaColSpacing-->
+ <UML:Class xmi.id="sprmSDxaColSpacing" name="sprmSDxaColSpacing">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xF204</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDxaColSpacing</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSDxaColSpacing-->
+<!--SPRM sprmSFEvenlySpaced-->
+ <UML:Class xmi.id="sprmSFEvenlySpaced" name="sprmSFEvenlySpaced">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3005</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSFEvenlySpaced</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSFEvenlySpaced-->
+<!--SPRM sprmSFProtected-->
+ <UML:Class xmi.id="sprmSFProtected" name="sprmSFProtected">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3006</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSFProtected</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSFProtected-->
+<!--SPRM sprmSDmBinFirst-->
+ <UML:Class xmi.id="sprmSDmBinFirst" name="sprmSDmBinFirst">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5007</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDmBinFirst</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSDmBinFirst-->
+<!--SPRM sprmSDmBinOther-->
+ <UML:Class xmi.id="sprmSDmBinOther" name="sprmSDmBinOther">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5008</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDmBinOther</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSDmBinOther-->
+<!--SPRM sprmSBkc-->
+ <UML:Class xmi.id="sprmSBkc" name="sprmSBkc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3009</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSBkc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSBkc-->
+<!--SPRM sprmSFTitlePage-->
+ <UML:Class xmi.id="sprmSFTitlePage" name="sprmSFTitlePage">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x300A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSFTitlePage</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSFTitlePage-->
+<!--SPRM sprmSCcolumns-->
+ <UML:Class xmi.id="sprmSCcolumns" name="sprmSCcolumns">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x500B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSCcolumns</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSCcolumns-->
+<!--SPRM sprmSDxaColumns-->
+ <UML:Class xmi.id="sprmSDxaColumns" name="sprmSDxaColumns">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x900C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDxaColumns</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSDxaColumns-->
+<!--SPRM sprmSFAutoPgn-->
+ <UML:Class xmi.id="sprmSFAutoPgn" name="sprmSFAutoPgn">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x300D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSFAutoPgn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSFAutoPgn-->
+<!--SPRM sprmSNfcPgn-->
+ <UML:Class xmi.id="sprmSNfcPgn" name="sprmSNfcPgn">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x300E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSNfcPgn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSNfcPgn-->
+<!--SPRM sprmSDyaPgn-->
+ <UML:Class xmi.id="sprmSDyaPgn" name="sprmSDyaPgn">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xB00F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDyaPgn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSDyaPgn-->
+<!--SPRM sprmSDxaPgn-->
+ <UML:Class xmi.id="sprmSDxaPgn" name="sprmSDxaPgn">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xB010</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDxaPgn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSDxaPgn-->
+<!--SPRM sprmSFPgnRestart-->
+ <UML:Class xmi.id="sprmSFPgnRestart" name="sprmSFPgnRestart">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3011</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSFPgnRestart</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSFPgnRestart-->
+<!--SPRM sprmSFEndnote-->
+ <UML:Class xmi.id="sprmSFEndnote" name="sprmSFEndnote">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3012</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSFEndnote</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSFEndnote-->
+<!--SPRM sprmSLnc-->
+ <UML:Class xmi.id="sprmSLnc" name="sprmSLnc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3013</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSLnc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSLnc-->
+<!--SPRM sprmSGprfIhdt-->
+ <UML:Class xmi.id="sprmSGprfIhdt" name="sprmSGprfIhdt">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3014</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSGprfIhdt</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSGprfIhdt-->
+<!--SPRM sprmSNLnnMod-->
+ <UML:Class xmi.id="sprmSNLnnMod" name="sprmSNLnnMod">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5015</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSNLnnMod</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSNLnnMod-->
+<!--SPRM sprmSDxaLnn-->
+ <UML:Class xmi.id="sprmSDxaLnn" name="sprmSDxaLnn">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x9016</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDxaLnn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSDxaLnn-->
+<!--SPRM sprmSDyaHdrTop-->
+ <UML:Class xmi.id="sprmSDyaHdrTop" name="sprmSDyaHdrTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xB017</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDyaHdrTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSDyaHdrTop-->
+<!--SPRM sprmSDyaHdrBottom-->
+ <UML:Class xmi.id="sprmSDyaHdrBottom" name="sprmSDyaHdrBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xB018</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDyaHdrBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSDyaHdrBottom-->
+<!--SPRM sprmSLBetween-->
+ <UML:Class xmi.id="sprmSLBetween" name="sprmSLBetween">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3019</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSLBetween</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSLBetween-->
+<!--SPRM sprmSVjc-->
+ <UML:Class xmi.id="sprmSVjc" name="sprmSVjc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x301A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSVjc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSVjc-->
+<!--SPRM sprmSLnnMin-->
+ <UML:Class xmi.id="sprmSLnnMin" name="sprmSLnnMin">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x501B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSLnnMin</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSLnnMin-->
+<!--SPRM sprmSPgnStart-->
+ <UML:Class xmi.id="sprmSPgnStart" name="sprmSPgnStart">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x501C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSPgnStart</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSPgnStart-->
+<!--SPRM sprmSBOrientation-->
+ <UML:Class xmi.id="sprmSBOrientation" name="sprmSBOrientation">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x301D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSBOrientation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSBOrientation-->
+<!--SPRM sprmSBCustomize-->
+ <UML:Class xmi.id="sprmSBCustomize" name="sprmSBCustomize">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x301E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSBCustomize</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSBCustomize-->
+<!--SPRM sprmSXaPage-->
+ <UML:Class xmi.id="sprmSXaPage" name="sprmSXaPage">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xB01F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSXaPage</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSXaPage-->
+<!--SPRM sprmSYaPage-->
+ <UML:Class xmi.id="sprmSYaPage" name="sprmSYaPage">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xB020</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSYaPage</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSYaPage-->
+<!--SPRM sprmSDxaLeft-->
+ <UML:Class xmi.id="sprmSDxaLeft" name="sprmSDxaLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xB021</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDxaLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSDxaLeft-->
+<!--SPRM sprmSDxaRight-->
+ <UML:Class xmi.id="sprmSDxaRight" name="sprmSDxaRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xB022</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDxaRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSDxaRight-->
+<!--SPRM sprmSDyaTop-->
+ <UML:Class xmi.id="sprmSDyaTop" name="sprmSDyaTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x9023</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDyaTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSDyaTop-->
+<!--SPRM sprmSDyaBottom-->
+ <UML:Class xmi.id="sprmSDyaBottom" name="sprmSDyaBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x9024</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDyaBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSDyaBottom-->
+<!--SPRM sprmSDzaGutter-->
+ <UML:Class xmi.id="sprmSDzaGutter" name="sprmSDzaGutter">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xB025</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDzaGutter</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSDzaGutter-->
+<!--SPRM sprmSDmPaperReq-->
+ <UML:Class xmi.id="sprmSDmPaperReq" name="sprmSDmPaperReq">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5026</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDmPaperReq</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSDmPaperReq-->
+<!--SPRM sprmSPropRMark-->
+ <UML:Class xmi.id="sprmSPropRMark" name="sprmSPropRMark">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD227</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSPropRMark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSPropRMark-->
+<!--SPRM sprmSFBiDi-->
+ <UML:Class xmi.id="sprmSFBiDi" name="sprmSFBiDi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3228</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSFBiDi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSFBiDi-->
+<!--SPRM sprmSFFacingCol-->
+ <UML:Class xmi.id="sprmSFFacingCol" name="sprmSFFacingCol">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3229</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSFFacingCol</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSFFacingCol-->
+<!--SPRM sprmSFRTLGutter-->
+ <UML:Class xmi.id="sprmSFRTLGutter" name="sprmSFRTLGutter">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x322A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSFRTLGutter</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSFRTLGutter-->
+<!--SPRM sprmSBrcTop-->
+ <UML:Class xmi.id="sprmSBrcTop" name="sprmSBrcTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x702B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSBrcTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSBrcTop-->
+<!--SPRM sprmSBrcLeft-->
+ <UML:Class xmi.id="sprmSBrcLeft" name="sprmSBrcLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x702C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSBrcLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSBrcLeft-->
+<!--SPRM sprmSBrcBottom-->
+ <UML:Class xmi.id="sprmSBrcBottom" name="sprmSBrcBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x702D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSBrcBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSBrcBottom-->
+<!--SPRM sprmSBrcRight-->
+ <UML:Class xmi.id="sprmSBrcRight" name="sprmSBrcRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x702E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSBrcRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSBrcRight-->
+<!--SPRM sprmSPgbProp-->
+ <UML:Class xmi.id="sprmSPgbProp" name="sprmSPgbProp">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x522F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSPgbProp</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSPgbProp-->
+<!--SPRM sprmSDxtCharSpace-->
+ <UML:Class xmi.id="sprmSDxtCharSpace" name="sprmSDxtCharSpace">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x7030</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDxtCharSpace</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSDxtCharSpace-->
+<!--SPRM sprmSDyaLinePitch-->
+ <UML:Class xmi.id="sprmSDyaLinePitch" name="sprmSDyaLinePitch">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x9031</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDyaLinePitch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSDyaLinePitch-->
+<!--SPRM sprmSClm-->
+ <UML:Class xmi.id="sprmSClm" name="sprmSClm">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5032</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSClm</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSClm-->
+<!--SPRM sprmSTextFlow-->
+ <UML:Class xmi.id="sprmSTextFlow" name="sprmSTextFlow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5033</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSTextFlow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmSTextFlow-->
+<!--SPRM sprmTJc-->
+ <UML:Class xmi.id="sprmTJc" name="sprmTJc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5400</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTJc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTJc-->
+<!--SPRM sprmTDxaLeft-->
+ <UML:Class xmi.id="sprmTDxaLeft" name="sprmTDxaLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x9601</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDxaLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTDxaLeft-->
+<!--SPRM sprmTDxaGapHalf-->
+ <UML:Class xmi.id="sprmTDxaGapHalf" name="sprmTDxaGapHalf">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x9602</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDxaGapHalf</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTDxaGapHalf-->
+<!--SPRM sprmTFCantSplit-->
+ <UML:Class xmi.id="sprmTFCantSplit" name="sprmTFCantSplit">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3403</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTFCantSplit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTFCantSplit-->
+<!--SPRM sprmTTableHeader-->
+ <UML:Class xmi.id="sprmTTableHeader" name="sprmTTableHeader">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3404</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTTableHeader</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTTableHeader-->
+<!--SPRM sprmTTableBorders-->
+ <UML:Class xmi.id="sprmTTableBorders" name="sprmTTableBorders">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD605</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTTableBorders</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="rgbbrc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:rgbrc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="BRC"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTTableBorders-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTTableBorders"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmTTableBorders-->
+<!--SPRM sprmTDefTable10-->
+ <UML:Class xmi.id="sprmTDefTable10" name="sprmTDefTable10">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD606</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDefTable10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTDefTable10-->
+<!--SPRM sprmTDyaRowHeight-->
+ <UML:Class xmi.id="sprmTDyaRowHeight" name="sprmTDyaRowHeight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x9407</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDyaRowHeight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTDyaRowHeight-->
+<!--SPRM sprmTDefTable-->
+ <UML:Class xmi.id="sprmTDefTable" name="sprmTDefTable">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD608</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDefTable</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="cellx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:cellx</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U16"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Operation name="tc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:tc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="TC"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTDefTable-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTDefTable"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmTDefTable-->
+<!--SPRM sprmTDefTableShd-->
+ <UML:Class xmi.id="sprmTDefTableShd" name="sprmTDefTableShd">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD609</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDefTableShd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="shd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="SHD"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTDefTableShd-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTDefTableShd"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmTDefTableShd-->
+<!--SPRM sprmTCellShd-->
+ <UML:Class xmi.id="sprmTCellShd" name="sprmTCellShd">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD612</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTCellShd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="shd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:cellShd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="CellShd"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTCelShd-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTCellShd"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmTCellShd-->
+<!--SPRM sprmTTlp-->
+ <UML:Class xmi.id="sprmTTlp" name="sprmTTlp">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x740A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTTlp</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTTlp-->
+<!--SPRM sprmTFBiDi-->
+ <UML:Class xmi.id="sprmTFBiDi" name="sprmTFBiDi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x560B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTFBiDi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTFBiDi-->
+<!--SPRM sprmTHTMLProps-->
+ <UML:Class xmi.id="sprmTHTMLProps" name="sprmTHTMLProps">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x740C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTHTMLProps</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTHTMLProps-->
+<!--SPRM sprmTSetBrc-->
+ <UML:Class xmi.id="sprmTSetBrc" name="sprmTSetBrc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD620</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTSetBrc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTSetBrc-->
+<!--SPRM sprmTInsert-->
+ <UML:Class xmi.id="sprmTInsert" name="sprmTInsert">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x7621</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTInsert</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTInsert-->
+<!--SPRM sprmTDelete-->
+ <UML:Class xmi.id="sprmTDelete" name="sprmTDelete">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5622</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDelete</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTDelete-->
+<!--SPRM sprmTDxaCol-->
+ <UML:Class xmi.id="sprmTDxaCol" name="sprmTDxaCol">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x7623</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDxaCol</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTDxaCol-->
+<!--SPRM sprmTMerge-->
+ <UML:Class xmi.id="sprmTMerge" name="sprmTMerge">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5624</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTMerge</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTMerge-->
+<!--SPRM sprmTSplit-->
+ <UML:Class xmi.id="sprmTSplit" name="sprmTSplit">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5625</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTSplit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTSplit-->
+<!--SPRM sprmTSetBrc10-->
+ <UML:Class xmi.id="sprmTSetBrc10" name="sprmTSetBrc10">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD626</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTSetBrc10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTSetBrc10-->
+<!--SPRM sprmTSetShd-->
+ <UML:Class xmi.id="sprmTSetShd" name="sprmTSetShd">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x7627</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTSetShd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTSetShd-->
+<!--SPRM sprmTSetShdOdd-->
+ <UML:Class xmi.id="sprmTSetShdOdd" name="sprmTSetShdOdd">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x7628</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTSetShdOdd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTSetShdOdd-->
+<!--SPRM sprmTTextFlow-->
+ <UML:Class xmi.id="sprmTTextFlow" name="sprmTTextFlow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x7629</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTTextFlow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTTextFlow-->
+<!--SPRM sprmTDiagLine-->
+ <UML:Class xmi.id="sprmTDiagLine" name="sprmTDiagLine">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD62A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDiagLine</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTDiagLine-->
+<!--SPRM sprmTVertMerge-->
+ <UML:Class xmi.id="sprmTVertMerge" name="sprmTVertMerge">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD62B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTVertMerge</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTVertMerge-->
+<!--SPRM sprmTVertAlign-->
+ <UML:Class xmi.id="sprmTVertAlign" name="sprmTVertAlign">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD62C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTVertAlign</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmTVertAlign-->
+<!--SPRM sprmTCellTopColor-->
+ <UML:Class xmi.id="sprmTCellTopColor" name="sprmTCellTopColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD61A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTCellTopColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="cellTopColor">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:cellTopColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U32"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTCellTopColor-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTCellTopColor"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmTCellTopColor-->
+<!--SPRM sprmTCellLeftColor-->
+ <UML:Class xmi.id="sprmTCellLeftColor" name="sprmTCellLeftColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD61B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTCellLeftColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="cellLeftColor">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:cellLeftColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U32"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTCellLeftColor-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTCellLeftColor"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmTCellLeftColor-->
+<!--SPRM sprmTCellBottomColor-->
+ <UML:Class xmi.id="sprmTCellBottomColor" name="sprmTCellBottomColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD61C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTCellBottomColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="cellBottomColor">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:cellBottomColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U32"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTCellBottomColor-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTCellBottomColor"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmTCellBottomColor-->
+<!--SPRM sprmTCellRightColor-->
+ <UML:Class xmi.id="sprmTCellRightColor" name="sprmTCellRightColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD61D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTCellRightColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="cellRightColor">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:cellRightColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U32"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTCellRightColor-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTCellRightColor"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmTCellRightColor-->
+<!--SPRM sprmTGridLineProps-->
+ <UML:Class xmi.id="sprmTGridLineProps" name="sprmTGridLineProps">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD613</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTGridLineProps</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x33</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+<!--
+ <UML:Operation name="gridLineProps" >
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:gridLineProps</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid" />
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return" >
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="LineProps" />
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array" />
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ -->
+ <UML:Attribute name="linePropsTop">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>top line properties</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSTOP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsLeft">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>left line properties</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>b</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSLEFT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsBottom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>bottom line properties</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>13</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSBOTTOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsRight">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>right line properties</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1b</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSRIGHT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsHorizontal">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>horizontal line properties</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>23</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSHORIZONTAL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsVertical">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>vertical line properties</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2b</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSVERTICAL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTGridLineProps-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTGridLineProps"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmTGridLineProps-->
+<!--SPRM sprmCInsrsid-->
+ <UML:Class xmi.id="sprmCInsrsid" name="sprmCIndrsid">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6816</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:insrsid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCInsrsid-->
+<!--SPRM sprmCdelrsid-->
+ <UML:Class xmi.id="sprmCdelrsid" name="sprmCdelrsid">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6817</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:delrsid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmCdelrsid-->
+<!--SPRM sprmPTableDepth-->
+ <UML:Class xmi.id="sprmPTableDepth" name="sprmPTableDepth">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6649</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPTableDepth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--SPRM sprmPTableDepth-->
+<!--SPRM sprmTCellShadow-->
+ <UML:Class xmi.id="sprmTCellShadow" name="sprmTCellShadow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xd670</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTCellShadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="cellShadow">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CELLSHADOW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="CellShd"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTCellShadow-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTCellShadow"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmTCellShadow-->
+<!--SPRM sprmPBrcTop-->
+ <UML:Class xmi.id="sprmPBrcTop" name="sprmPBrcTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6424</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcTop">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>BRC of top line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCTOP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBrcTop-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBrcTop"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmPBrcTop-->
+<!--SPRM sprmPBrcLeft-->
+ <UML:Class xmi.id="sprmPBrcLeft" name="sprmPBrcLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6425</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcLeft">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>BRC of left line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCLEFT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBrcLeft-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBrcLeft"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmPBrcLeft-->
+<!--SPRM sprmPBrcBottom-->
+ <UML:Class xmi.id="sprmPBrcBottom" name="sprmPBrcBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6426</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcBottom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>BRC of bottom line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCLEFT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBrcBottom-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBrcBottom"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmPBrcBottom-->
+<!--SPRM sprmPBrcRight-->
+ <UML:Class xmi.id="sprmPBrcRight" name="sprmPBrcRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6427</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcRight">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>BRC of top line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCRIGHT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBrcRight-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBrcRight"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmPBrcRight-->
+<!--SPRM sprmPBrcBetween-->
+ <UML:Class xmi.id="sprmPBrcBetween" name="sprmPBrcBetween">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6428</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcBetween</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcBetween">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>BRC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCBETWEEN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBrcBetween-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBrcBetween"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmPBrcBetween-->
+<!--SPRM sprmPBorderTop-->
+ <UML:Class xmi.id="sprmPBorderTop" name="sprmPBorderTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xc64e</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBorderTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsTop">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>properties of top line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSTOP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBorderTop-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBorderTop"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmPBorderTop-->
+<!--SPRM sprmPBorderLeft-->
+ <UML:Class xmi.id="sprmPBorderLeft" name="sprmPBorderLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xc64f</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBorderLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsLeft">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>properties of left line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSLEFT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBorderLeft-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBorderLeft"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmPBorderLeft-->
+<!--SPRM sprmPBorderBottom-->
+ <UML:Class xmi.id="sprmPBorderBottom" name="sprmPBorderBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xc650</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBorderBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsBottom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>properties of bottom line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSBOTTOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBorderBottom-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBorderBottom"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmPBorderBottom-->
+<!--SPRM sprmPBorderRight-->
+ <UML:Class xmi.id="sprmPBorderRight" name="sprmPBorderRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xc651</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBorderRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsRight">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>properties of right line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSRIGHT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBorderRight-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBorderRight"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmPBorderRight-->
+<!--SPRM sprmPBorderBetween-->
+ <UML:Class xmi.id="sprmPBorderBetween" name="sprmPBorderBetween">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xc652</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBorderBetween</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsBetween">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>properties of line in between</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSBETWEEN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBorderBetween-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBorderBetween"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmPBorderBetween-->
+<!--SPRM sprmCBorder-->
+ <UML:Class xmi.id="sprmCBorder" name="sprmCBorder">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xca72</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBorderBetween</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lineProps">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>properties of line in between</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmCBorder-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmCBorder"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmCBorder-->
+<!--SPRM sprmTTPreferredWidth-->
+ <UML:Class xmi.id="sprmTTPreferredWidth" name="sprmTTPreferredWidth">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTTPreferredWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf614</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unit">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:unit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="preferredWidth">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>preferred width</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:preferredWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTTPreferredWidth-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTTPreferredWidth"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmTTPreferredWidth-->
+<!--SPRM sprmTTRLeft-->
+ <UML:Class xmi.id="sprmTTRLeft" name="sprmTTRLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTTRLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf661</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unit">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:unit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="trleft">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table indent from left</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:trleft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTTRLeft-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTTRLeft"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmTTRLeft-->
+<!--SPRM sprmCEastAsianLayout-->
+ <UML:Class xmi.id="sprmCEastAsianLayout" name="sprmCEastAsianLayout">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCA78</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCEastAsianLayout</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcEastAsianLayout">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>East Asian Typography Setting</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fcEastAsianLayout</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmCEastAsianLayout-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmCEastAsianLayout"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--SPRM sprmCEastAsianLayout-->
+<!--SPRMS-->
+<!--DFFS-->
+<!--DFF UDefProp-->
+ <UML:Class xmi.id="UDefProp" name="UDefProp">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resolvenoauto"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf122</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="UDefProp-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="UDefProp"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--DFF UDefProp-->
+<!--DFF FSPGR-->
+ <UML:Class xmi.id="FSPGR" name="FSPGR">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf009</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="rectangle">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the rectangle of the grouped shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:rectangle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="Rectangle"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FSPGR-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FSPGR"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--DFF FSPGR-->
+<!--DFF OPT-->
+ <UML:Class xmi.id="OPT" name="OPT">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf00b</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="property">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpopt</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="FOPTE"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Operation name="extraoffset">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpoptextraoffset</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U32"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="noresolve"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="OPT-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="OPT"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--DFF OPT-->
+<!--DFF FSP-->
+ <UML:Class xmi.id="FSP" name="FSP">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf00a</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shptype">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>shape type</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>12</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xfff0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shptype</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="shptypename">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shptypename</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>shape id</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfGroup">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>This shape is a group shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfGroup</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfChild">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Not a top-level shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfChild</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfPatriarch">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>This is the topmost group shape. Exactly one of these per drawing.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfPatriarch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfDeleted">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The shape has been deleted</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfDeleted</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfOleShape">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The shape is an OLE object</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfOleShape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfHaveMaster">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape has a hspMaster property</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x20</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfHaveMaster</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfFlipH">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape is flipped horizontally</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x40</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfFlipH</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfFlipV">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape is flipped vertically</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x80</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfFlipV</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfConnector">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Connector type of shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x100</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfConnector</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfHaveAnchor">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape has an anchor of some kind</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x200</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfHaveAnchor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfBackground">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Background shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x400</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfBackground</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfHaveSpt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape has a shape type property</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x800</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>11</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfHaveSpt</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="reserved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Not yet used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>20</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xfffff000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FSP-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FSP"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--DFF FSP-->
+<!--DFF DGG-->
+ <UML:Class xmi.id="DGG" name="DGG">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf006</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fdgg">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the dgg structure</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpdgg</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="FDGG"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="fidcl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpdgg</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="FIDCL"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="DGG-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="DGG"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--DFF DGG-->
+<!--DFF BSE-->
+ <UML:Class xmi.id="BSE" name="BSE">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf007</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fbse">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the FBSE structure</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfbse</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="FBSE"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="blipname">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpblipbname</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature><UML:Operation name="blip"><UML:ModelElement.taggedValue><UML:TaggedValue><UML:TaggedValue.dataValue>rtf:blip</UML:TaggedValue.dataValue><UML:TaggedValue.type><UML:TagDefinition xmi.idref="opid"/></UML:TaggedValue.type></UML:TaggedValue></UML:ModelElement.taggedValue><UML:BehavioralFeature.parameter><UML:Parameter kind="return" name="return"><UML:Parameter.type><UML:Class xmi.idref="DffRecord"/></UML:Parameter.type></UML:Parameter></UML:BehavioralFeature.parameter><UML:ModelElement.stereotype><UML:Stereotype xmi.idref="attribute"/></UML:ModelElement.stereotype></UML:Operation>
+ g </UML:Classifier.feature>
+<!--
+ <UML:Classifier.feature>
+ <UML:Operation name="binary">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:binary</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="Binary"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="binary"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ -->
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="BSE-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="BSE"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--DFF BSE-->
+<!--DFF BlipPng-->
+ <UML:Class xmi.id="BlipPng" name="BlipPng">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf01e</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="payload">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the actual PNG</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x19</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:payload</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="Blob"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attributeremainder"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="BlipPng-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="BlipPng"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--DFF BlipPng-->
+<!--DFF BlipDib-->
+ <UML:Class xmi.id="BlipDib" name="BlipDib">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf01f</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="payload">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the actual DIB</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x19</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:payload</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="Blob"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attributeremainder"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="BlipDib-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="BlipDib"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--DFF BlipDib-->
+<!--DFF SpContainer-->
+ <UML:Class xmi.id="SpContainer" name="SpContainer">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf004</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="blip">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:blip</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="BSE"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="shptxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shptxt</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="TextboxText"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="SpContainer-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="SpContainer"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--DFF SpContainer-->
+<!--DFF Dg-->
+ <UML:Class xmi.id="Dg" name="Dg">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf008</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fdg">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The FDG data structure</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>64</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fdg</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="FDG"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="Dg-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="Dg"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+<!--DFF Dg-->
+<!--DFFS-->
+<!--DFFOPT-->
+<!--DFFOPT rotation-->
+ <UML:Class xmi.id="rotation" name="rotation">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shprotation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>fixed point: 16.16
+ degrees</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT rotation-->
+<!--DFFOPT fLockRotation-->
+ <UML:Class xmi.id="fLockRotation" name="fLockRotation">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockRotation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>119</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>No rotation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fLockRotation-->
+<!--DFFOPT fLockAspectRatio-->
+ <UML:Class xmi.id="fLockAspectRatio" name="fLockAspectRatio">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockAspectRatio</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>120</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Don't allow changes in
+ aspect ratio</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fLockAspectRatio-->
+<!--DFFOPT fLockPosition-->
+ <UML:Class xmi.id="fLockPosition" name="fLockPosition">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockPosition</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>121</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Don't allow the shape to
+ be moved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fLockPosition-->
+<!--DFFOPT fLockAgainstSelect-->
+ <UML:Class xmi.id="fLockAgainstSelect" name="fLockAgainstSelect">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockAgainstSelect</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>122</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape may not be
+ selected</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fLockAgainstSelect-->
+<!--DFFOPT fLockCropping-->
+ <UML:Class xmi.id="fLockCropping" name="fLockCropping">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockCropping</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>123</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>No cropping this
+ shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fLockCropping-->
+<!--DFFOPT fLockVertices-->
+ <UML:Class xmi.id="fLockVertices" name="fLockVertices">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockVertices</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>124</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Edit Points not
+ allowed</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fLockVertices-->
+<!--DFFOPT fLockText-->
+ <UML:Class xmi.id="fLockText" name="fLockText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>125</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Do not edit
+ text</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fLockText-->
+<!--DFFOPT fLockAdjustHandles-->
+ <UML:Class xmi.id="fLockAdjustHandles" name="fLockAdjustHandles">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockAdjustHandles</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>126</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Do not adjust</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fLockAdjustHandles-->
+<!--DFFOPT fLockAgainstGrouping-->
+ <UML:Class xmi.id="fLockAgainstGrouping" name="fLockAgainstGrouping">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockAgainstGrouping</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>127</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Do not group this
+ shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fLockAgainstGrouping-->
+<!--DFFOPT lTxid-->
+ <UML:Class xmi.id="lTxid" name="lTxid">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplTxid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>128</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>id for the text, value
+ determined by the host</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lTxid-->
+<!--DFFOPT dxTextLeft-->
+ <UML:Class xmi.id="dxTextLeft" name="dxTextLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdxTextLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>129</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1/10 inch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>margins relative to
+ shape's inscribed text rectangle (in EMUs)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT dxTextLeft-->
+<!--DFFOPT dyTextTop-->
+ <UML:Class xmi.id="dyTextTop" name="dyTextTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdyTextTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>130</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1/20 inch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT dyTextTop-->
+<!--DFFOPT dxTextRight-->
+ <UML:Class xmi.id="dxTextRight" name="dxTextRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdxTextRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>131</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1/10 inch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT dxTextRight-->
+<!--DFFOPT dyTextBottom-->
+ <UML:Class xmi.id="dyTextBottom" name="dyTextBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdyTextBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>132</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1/20 inch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT dyTextBottom-->
+<!--DFFOPT WrapText-->
+ <UML:Class xmi.id="WrapText" name="WrapText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpWrapText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>133</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Wrap text at shape
+ margins</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT WrapText-->
+<!--DFFOPT scaleText-->
+ <UML:Class xmi.id="scaleText" name="scaleText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpscaleText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>134</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Text zoom/scale (used if
+ fFitTextToShape)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT scaleText-->
+<!--DFFOPT anchorText-->
+ <UML:Class xmi.id="anchorText" name="anchorText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpanchorText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>135</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Top</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>How to anchor the
+ text</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT anchorText-->
+<!--DFFOPT txflTextFlow-->
+ <UML:Class xmi.id="txflTextFlow" name="txflTextFlow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shptxflTextFlow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>136</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>HorzN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Text flow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT txflTextFlow-->
+<!--DFFOPT cdirFont-->
+ <UML:Class xmi.id="cdirFont" name="cdirFont">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpcdirFont</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>137</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>msocdir0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Font rotation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT cdirFont-->
+<!--DFFOPT hspNext-->
+ <UML:Class xmi.id="hspNext" name="hspNext">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shphspNext</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>138</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>ID of the next shape
+ (used by Word for linked textboxes)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT hspNext-->
+<!--DFFOPT txdir-->
+ <UML:Class xmi.id="txdir" name="txdir">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shptxdir</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>139</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>LTR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Bi-Di Text
+ direction</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT txdir-->
+<!--DFFOPT fSelectText-->
+ <UML:Class xmi.id="fSelectText" name="fSelectText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfSelectText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>187</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE if single click
+ selects text, FALSE if two clicks</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fSelectText-->
+<!--DFFOPT fAutoTextMargin-->
+ <UML:Class xmi.id="fAutoTextMargin" name="fAutoTextMargin">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfAutoTextMargin</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>188</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>use host's margin
+ calculations</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fAutoTextMargin-->
+<!--DFFOPT fRotateText-->
+ <UML:Class xmi.id="fRotateText" name="fRotateText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfRotateText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>189</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Rotate text with
+ shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fRotateText-->
+<!--DFFOPT fFitShapeToText-->
+ <UML:Class xmi.id="fFitShapeToText" name="fFitShapeToText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfFitShapeToText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>190</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Size shape to fit text
+ size</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fFitShapeToText-->
+<!--DFFOPT fFitTextToShape-->
+ <UML:Class xmi.id="fFitTextToShape" name="fFitTextToShape">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfFitTextToShape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>191</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Size text to fit shape
+ size</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fFitTextToShape-->
+<!--DFFOPT gtextUNICODE-->
+ <UML:Class xmi.id="gtextUNICODE" name="gtextUNICODE">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextUNICODE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>192</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>String</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>UNICODE text
+ string</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextUNICODE-->
+<!--DFFOPT gtextRTF-->
+ <UML:Class xmi.id="gtextRTF" name="gtextRTF">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextRTF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>193</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>RTF text
+ string</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextRTF-->
+<!--DFFOPT gtextAlign-->
+ <UML:Class xmi.id="gtextAlign" name="gtextAlign">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextAlign</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>194</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Center</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>alignment on
+ curve</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextAlign-->
+<!--DFFOPT gtextSize-->
+ <UML:Class xmi.id="gtextSize" name="gtextSize">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextSize</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>195</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>36&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>default point
+ size</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextSize-->
+<!--DFFOPT gtextSpacing-->
+ <UML:Class xmi.id="gtextSpacing" name="gtextSpacing">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextSpacing</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>196</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>fixed point
+ 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextSpacing-->
+<!--DFFOPT gtextFont-->
+ <UML:Class xmi.id="gtextFont" name="gtextFont">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFont</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>197</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>String</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>font family
+ name</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextFont-->
+<!--DFFOPT gtextFReverseRows-->
+ <UML:Class xmi.id="gtextFReverseRows" name="gtextFReverseRows">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFReverseRows</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>240</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Reverse row
+ order</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextFReverseRows-->
+<!--DFFOPT fGtext-->
+ <UML:Class xmi.id="fGtext" name="fGtext">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfGtext</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>241</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Has text
+ effect</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fGtext-->
+<!--DFFOPT gtextFVertical-->
+ <UML:Class xmi.id="gtextFVertical" name="gtextFVertical">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFVertical</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>242</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Rotate
+ characters</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextFVertical-->
+<!--DFFOPT gtextFKern-->
+ <UML:Class xmi.id="gtextFKern" name="gtextFKern">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFKern</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>243</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Kern
+ characters</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextFKern-->
+<!--DFFOPT gtextFTight-->
+ <UML:Class xmi.id="gtextFTight" name="gtextFTight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFTight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>244</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Tightening or
+ tracking</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextFTight-->
+<!--DFFOPT gtextFStretch-->
+ <UML:Class xmi.id="gtextFStretch" name="gtextFStretch">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFStretch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>245</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Stretch to fit
+ shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextFStretch-->
+<!--DFFOPT gtextFShrinkFit-->
+ <UML:Class xmi.id="gtextFShrinkFit" name="gtextFShrinkFit">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFShrinkFit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>246</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Char bounding
+ box</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextFShrinkFit-->
+<!--DFFOPT gtextFBestFit-->
+ <UML:Class xmi.id="gtextFBestFit" name="gtextFBestFit">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFBestFit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>247</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Scale
+ text-on-path</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextFBestFit-->
+<!--DFFOPT gtextFNormalize-->
+ <UML:Class xmi.id="gtextFNormalize" name="gtextFNormalize">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFNormalize</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>248</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Stretch char
+ height</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextFNormalize-->
+<!--DFFOPT gtextFDxMeasure-->
+ <UML:Class xmi.id="gtextFDxMeasure" name="gtextFDxMeasure">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFDxMeasure</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>249</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Do not measure along
+ path</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextFDxMeasure-->
+<!--DFFOPT gtextFBold-->
+ <UML:Class xmi.id="gtextFBold" name="gtextFBold">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFBold</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>250</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Bold font</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextFBold-->
+<!--DFFOPT gtextFItalic-->
+ <UML:Class xmi.id="gtextFItalic" name="gtextFItalic">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFItalic</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>251</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Italic font</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextFItalic-->
+<!--DFFOPT gtextFUnderline-->
+ <UML:Class xmi.id="gtextFUnderline" name="gtextFUnderline">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFUnderline</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>252</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Underline
+ font</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextFUnderline-->
+<!--DFFOPT gtextFShadow-->
+ <UML:Class xmi.id="gtextFShadow" name="gtextFShadow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFShadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>253</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shadow font</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextFShadow-->
+<!--DFFOPT gtextFSmallcaps-->
+ <UML:Class xmi.id="gtextFSmallcaps" name="gtextFSmallcaps">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFSmallcaps</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>254</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Small caps
+ font</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextFSmallcaps-->
+<!--DFFOPT gtextFStrikethrough-->
+ <UML:Class xmi.id="gtextFStrikethrough" name="gtextFStrikethrough">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFStrikethrough</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>255</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Strike through
+ font</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT gtextFStrikethrough-->
+<!--DFFOPT cropFromTop-->
+ <UML:Class xmi.id="cropFromTop" name="cropFromTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpcropFromTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>256</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16.16
+ fraction times total image width or height, as
+ appropriate.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT cropFromTop-->
+<!--DFFOPT cropFromBottom-->
+ <UML:Class xmi.id="cropFromBottom" name="cropFromBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpcropFromBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>257</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT cropFromBottom-->
+<!--DFFOPT cropFromLeft-->
+ <UML:Class xmi.id="cropFromLeft" name="cropFromLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpcropFromLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>258</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT cropFromLeft-->
+<!--DFFOPT cropFromRight-->
+ <UML:Class xmi.id="cropFromRight" name="cropFromRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpcropFromRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>259</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT cropFromRight-->
+<!--DFFOPT pib-->
+ <UML:Class xmi.id="pib" name="pib">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppib</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>260</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip to
+ display</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pib-->
+<!--DFFOPT pibName-->
+ <UML:Class xmi.id="pibName" name="pibName">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppibName</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>261</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>String</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip file
+ name</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pibName-->
+<!--DFFOPT pibFlags-->
+ <UML:Class xmi.id="pibFlags" name="pibFlags">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppibFlags</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>262</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Comment</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip
+ flags</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pibFlags-->
+<!--DFFOPT pictureTransparent-->
+ <UML:Class xmi.id="pictureTransparent" name="pictureTransparent">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureTransparent</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>263</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>~0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>transparent
+ color (none if ~0UL)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pictureTransparent-->
+<!--DFFOPT pictureContrast-->
+ <UML:Class xmi.id="pictureContrast" name="pictureContrast">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureContrast</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>264</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>contrast
+ setting</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pictureContrast-->
+<!--DFFOPT pictureBrightness-->
+ <UML:Class xmi.id="pictureBrightness" name="pictureBrightness">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureBrightness</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>265</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>brightness
+ setting</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pictureBrightness-->
+<!--DFFOPT pictureGamma-->
+ <UML:Class xmi.id="pictureGamma" name="pictureGamma">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureGamma</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>266</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16.16
+ gamma</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pictureGamma-->
+<!--DFFOPT pictureId-->
+ <UML:Class xmi.id="pictureId" name="pictureId">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureId</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>267</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Host-defined
+ ID for OLE objects (usually a pointer)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pictureId-->
+<!--DFFOPT pictureDblCrMod-->
+ <UML:Class xmi.id="pictureDblCrMod" name="pictureDblCrMod">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureDblCrMod</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>268</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>This</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Modification
+ used if shape has double shadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pictureDblCrMod-->
+<!--DFFOPT pictureFillCrMod-->
+ <UML:Class xmi.id="pictureFillCrMod" name="pictureFillCrMod">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureFillCrMod</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>269</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>undefined</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pictureFillCrMod-->
+<!--DFFOPT pictureLineCrMod-->
+ <UML:Class xmi.id="pictureLineCrMod" name="pictureLineCrMod">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureLineCrMod</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>270</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>undefined</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pictureLineCrMod-->
+<!--DFFOPT pibPrint-->
+ <UML:Class xmi.id="pibPrint" name="pibPrint">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppibPrint</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>271</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip to
+ display when printing</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pibPrint-->
+<!--DFFOPT pibPrintName-->
+ <UML:Class xmi.id="pibPrintName" name="pibPrintName">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppibPrintName</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>272</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>String</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip file
+ name</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pibPrintName-->
+<!--DFFOPT pibPrintFlags-->
+ <UML:Class xmi.id="pibPrintFlags" name="pibPrintFlags">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppibPrintFlags</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>273</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Comment</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip
+ flags</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pibPrintFlags-->
+<!--DFFOPT fNoHitTestPicture-->
+ <UML:Class xmi.id="fNoHitTestPicture" name="fNoHitTestPicture">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfNoHitTestPicture</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>316</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Do not hit
+ test the picture</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fNoHitTestPicture-->
+<!--DFFOPT pictureGray-->
+ <UML:Class xmi.id="pictureGray" name="pictureGray">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureGray</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>317</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>grayscale
+ display</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pictureGray-->
+<!--DFFOPT pictureBiLevel-->
+ <UML:Class xmi.id="pictureBiLevel" name="pictureBiLevel">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureBiLevel</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>318</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>bi-level
+ display</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pictureBiLevel-->
+<!--DFFOPT pictureActive-->
+ <UML:Class xmi.id="pictureActive" name="pictureActive">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureActive</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>319</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Server is
+ active (OLE objects only)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pictureActive-->
+<!--DFFOPT geoLeft-->
+ <UML:Class xmi.id="geoLeft" name="geoLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgeoLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>320</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Defines the G (geometry)
+ coordinate space.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT geoLeft-->
+<!--DFFOPT geoTop-->
+ <UML:Class xmi.id="geoTop" name="geoTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgeoTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>321</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT geoTop-->
+<!--DFFOPT geoRight-->
+ <UML:Class xmi.id="geoRight" name="geoRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgeoRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>322</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>21600</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT geoRight-->
+<!--DFFOPT geoBottom-->
+ <UML:Class xmi.id="geoBottom" name="geoBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgeoBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>323</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>21600</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT geoBottom-->
+<!--DFFOPT shapePath-->
+ <UML:Class xmi.id="shapePath" name="shapePath">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshapePath</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>324</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>msoshapeLinesClosed</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT shapePath-->
+<!--DFFOPT pVertices-->
+ <UML:Class xmi.id="pVertices" name="pVertices">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppVertices</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>325</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>An array of points, in G
+ units.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pVertices-->
+<!--DFFOPT pSegmentInfo-->
+ <UML:Class xmi.id="pSegmentInfo" name="pSegmentInfo">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppSegmentInfo</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>326</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pSegmentInfo-->
+<!--DFFOPT adjustValue-->
+ <UML:Class xmi.id="adjustValue" name="adjustValue">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjustValue</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>327</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Adjustment values
+ corresponding to the positions of the adjust handles of the shape.
+ The number of values used and their allowable ranges vary from
+ shape type to shape type.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT adjustValue-->
+<!--DFFOPT adjust2Value-->
+ <UML:Class xmi.id="adjust2Value" name="adjust2Value">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjust2Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>328</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT adjust2Value-->
+<!--DFFOPT adjust3Value-->
+ <UML:Class xmi.id="adjust3Value" name="adjust3Value">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjust3Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>329</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT adjust3Value-->
+<!--DFFOPT adjust4Value-->
+ <UML:Class xmi.id="adjust4Value" name="adjust4Value">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjust4Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>330</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT adjust4Value-->
+<!--DFFOPT adjust5Value-->
+ <UML:Class xmi.id="adjust5Value" name="adjust5Value">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjust5Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>331</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT adjust5Value-->
+<!--DFFOPT adjust6Value-->
+ <UML:Class xmi.id="adjust6Value" name="adjust6Value">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjust6Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>332</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT adjust6Value-->
+<!--DFFOPT adjust7Value-->
+ <UML:Class xmi.id="adjust7Value" name="adjust7Value">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjust7Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>333</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT adjust7Value-->
+<!--DFFOPT adjust8Value-->
+ <UML:Class xmi.id="adjust8Value" name="adjust8Value">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjust8Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>334</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT adjust8Value-->
+<!--DFFOPT adjust9Value-->
+ <UML:Class xmi.id="adjust9Value" name="adjust9Value">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjust9Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>335</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT adjust9Value-->
+<!--DFFOPT adjust10Value-->
+ <UML:Class xmi.id="adjust10Value" name="adjust10Value">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjust10Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>336</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT adjust10Value-->
+<!--DFFOPT fShadowOK-->
+ <UML:Class xmi.id="fShadowOK" name="fShadowOK">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfShadowOK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>378</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shadow may be
+ set</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fShadowOK-->
+<!--DFFOPT f3DOK-->
+ <UML:Class xmi.id="f3DOK" name="f3DOK">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpf3DOK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>379</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3D may be set</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT f3DOK-->
+<!--DFFOPT fLineOK-->
+ <UML:Class xmi.id="fLineOK" name="fLineOK">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLineOK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>380</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Line style may be
+ set</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fLineOK-->
+<!--DFFOPT fGtextOK-->
+ <UML:Class xmi.id="fGtextOK" name="fGtextOK">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfGtextOK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>381</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Text effect (WordArt)
+ supported</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fGtextOK-->
+<!--DFFOPT fFillShadeShapeOK-->
+ <UML:Class xmi.id="fFillShadeShapeOK" name="fFillShadeShapeOK">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfFillShadeShapeOK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>382</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fFillShadeShapeOK-->
+<!--DFFOPT fFillOK-->
+ <UML:Class xmi.id="fFillOK" name="fFillOK">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfFillOK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>383</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>OK to fill the shape
+ through the UI or VBA?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fFillOK-->
+<!--DFFOPT fillType-->
+ <UML:Class xmi.id="fillType" name="fillType">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillType</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>384</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Solid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Type of
+ fill</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillType-->
+<!--DFFOPT fillColor-->
+ <UML:Class xmi.id="fillColor" name="fillColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>385</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>white</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Foreground
+ color</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillColor-->
+<!--DFFOPT fillOpacity-->
+ <UML:Class xmi.id="fillOpacity" name="fillOpacity">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillOpacity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>386</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fixed
+ 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillOpacity-->
+<!--DFFOPT fillBackColor-->
+ <UML:Class xmi.id="fillBackColor" name="fillBackColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillBackColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>387</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>white</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Background
+ color</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillBackColor-->
+<!--DFFOPT fillBackOpacity-->
+ <UML:Class xmi.id="fillBackOpacity" name="fillBackOpacity">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillBackOpacity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>388</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shades
+ only</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillBackOpacity-->
+<!--DFFOPT fillCrMod-->
+ <UML:Class xmi.id="fillCrMod" name="fillCrMod">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillCrMod</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>389</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>undefined</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Modification
+ for BW views</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillCrMod-->
+<!--DFFOPT fillBlip-->
+ <UML:Class xmi.id="fillBlip" name="fillBlip">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillBlip</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>390</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Pattern/texture</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillBlip-->
+<!--DFFOPT fillBlipName-->
+ <UML:Class xmi.id="fillBlipName" name="fillBlipName">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillBlipName</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>391</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>String</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip file
+ name</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillBlipName-->
+<!--DFFOPT fillBlipFlags-->
+ <UML:Class xmi.id="fillBlipFlags" name="fillBlipFlags">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillBlipFlags</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>392</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Comment</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip
+ flags</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillBlipFlags-->
+<!--DFFOPT fillWidth-->
+ <UML:Class xmi.id="fillWidth" name="fillWidth">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>393</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>How big (A
+ units) to make a metafile texture.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillWidth-->
+<!--DFFOPT fillHeight-->
+ <UML:Class xmi.id="fillHeight" name="fillHeight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillHeight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>394</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillHeight-->
+<!--DFFOPT fillAngle-->
+ <UML:Class xmi.id="fillAngle" name="fillAngle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillAngle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>395</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fade angle -
+ degrees in 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillAngle-->
+<!--DFFOPT fillFocus-->
+ <UML:Class xmi.id="fillFocus" name="fillFocus">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillFocus</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>396</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Linear shaded
+ fill focus percent</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillFocus-->
+<!--DFFOPT fillToLeft-->
+ <UML:Class xmi.id="fillToLeft" name="fillToLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillToLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>397</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fraction
+ 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillToLeft-->
+<!--DFFOPT fillToTop-->
+ <UML:Class xmi.id="fillToTop" name="fillToTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillToTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>398</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fraction
+ 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillToTop-->
+<!--DFFOPT fillToRight-->
+ <UML:Class xmi.id="fillToRight" name="fillToRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillToRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>399</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fraction
+ 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillToRight-->
+<!--DFFOPT fillToBottom-->
+ <UML:Class xmi.id="fillToBottom" name="fillToBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillToBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>400</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fraction
+ 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillToBottom-->
+<!--DFFOPT fillRectLeft-->
+ <UML:Class xmi.id="fillRectLeft" name="fillRectLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillRectLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>401</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>For shaded
+ fills, use the specified rectangle instead of the shape's bounding
+ rect to define how large the fade is going to be.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillRectLeft-->
+<!--DFFOPT fillRectTop-->
+ <UML:Class xmi.id="fillRectTop" name="fillRectTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillRectTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>402</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillRectTop-->
+<!--DFFOPT fillRectRight-->
+ <UML:Class xmi.id="fillRectRight" name="fillRectRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillRectRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>403</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillRectRight-->
+<!--DFFOPT fillRectBottom-->
+ <UML:Class xmi.id="fillRectBottom" name="fillRectBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillRectBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>404</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillRectBottom-->
+<!--DFFOPT fillDztype-->
+ <UML:Class xmi.id="fillDztype" name="fillDztype">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillDztype</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>405</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Default</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillDztype-->
+<!--DFFOPT fillShadePreset-->
+ <UML:Class xmi.id="fillShadePreset" name="fillShadePreset">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillShadePreset</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>406</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Special
+ shades</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillShadePreset-->
+<!--DFFOPT fillShadeColors-->
+ <UML:Class xmi.id="fillShadeColors" name="fillShadeColors">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillShadeColors</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>407</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>a preset
+ array of colors</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillShadeColors-->
+<!--DFFOPT fillOriginX-->
+ <UML:Class xmi.id="fillOriginX" name="fillOriginX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillOriginX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>408</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillOriginX-->
+<!--DFFOPT fillOriginY-->
+ <UML:Class xmi.id="fillOriginY" name="fillOriginY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillOriginY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>409</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillOriginY-->
+<!--DFFOPT fillShapeOriginX-->
+ <UML:Class xmi.id="fillShapeOriginX" name="fillShapeOriginX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillShapeOriginX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>410</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillShapeOriginX-->
+<!--DFFOPT fillShapeOriginY-->
+ <UML:Class xmi.id="fillShapeOriginY" name="fillShapeOriginY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillShapeOriginY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>411</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillShapeOriginY-->
+<!--DFFOPT fillShadeType-->
+ <UML:Class xmi.id="fillShadeType" name="fillShadeType">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillShadeType</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>412</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Default</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Type of
+ shading, if a shaded (gradient) fill.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillShadeType-->
+<!--DFFOPT fFilled-->
+ <UML:Class xmi.id="fFilled" name="fFilled">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfFilled</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>443</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Is shape
+ filled?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fFilled-->
+<!--DFFOPT fHitTestFill-->
+ <UML:Class xmi.id="fHitTestFill" name="fHitTestFill">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfHitTestFill</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>444</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Should we hit
+ test fill?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fHitTestFill-->
+<!--DFFOPT fillShape-->
+ <UML:Class xmi.id="fillShape" name="fillShape">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillShape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>445</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Register
+ pattern on shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillShape-->
+<!--DFFOPT fillUseRect-->
+ <UML:Class xmi.id="fillUseRect" name="fillUseRect">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillUseRect</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>446</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Use the large
+ rect?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fillUseRect-->
+<!--DFFOPT fNoFillHitTest-->
+ <UML:Class xmi.id="fNoFillHitTest" name="fNoFillHitTest">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfNoFillHitTest</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>447</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Hit test a
+ shape as though filled</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fNoFillHitTest-->
+<!--DFFOPT lineColor-->
+ <UML:Class xmi.id="lineColor" name="lineColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>448</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>black</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Color of line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineColor-->
+<!--DFFOPT lineOpacity-->
+ <UML:Class xmi.id="lineOpacity" name="lineOpacity">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineOpacity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>449</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Not
+ implemented</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineOpacity-->
+<!--DFFOPT lineBackColor-->
+ <UML:Class xmi.id="lineBackColor" name="lineBackColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineBackColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>450</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>white</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Background
+ color</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineBackColor-->
+<!--DFFOPT lineCrMod-->
+ <UML:Class xmi.id="lineCrMod" name="lineCrMod">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineCrMod</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>451</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>undefined</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Modification for BW
+ views</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineCrMod-->
+<!--DFFOPT lineType-->
+ <UML:Class xmi.id="lineType" name="lineType">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineType</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>452</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Solid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Type of line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineType-->
+<!--DFFOPT lineFillBlip-->
+ <UML:Class xmi.id="lineFillBlip" name="lineFillBlip">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineFillBlip</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>453</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Pattern/texture</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineFillBlip-->
+<!--DFFOPT lineFillBlipName-->
+ <UML:Class xmi.id="lineFillBlipName" name="lineFillBlipName">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineFillBlipName</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>454</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>String</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip file
+ name</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineFillBlipName-->
+<!--DFFOPT lineFillBlipFlags-->
+ <UML:Class xmi.id="lineFillBlipFlags" name="lineFillBlipFlags">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineFillBlipFlags</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>455</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Comment</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip flags</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineFillBlipFlags-->
+<!--DFFOPT lineFillWidth-->
+ <UML:Class xmi.id="lineFillWidth" name="lineFillWidth">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineFillWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>456</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>How big (A units) to make
+ a metafile texture.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineFillWidth-->
+<!--DFFOPT lineFillHeight-->
+ <UML:Class xmi.id="lineFillHeight" name="lineFillHeight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineFillHeight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>457</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineFillHeight-->
+<!--DFFOPT lineFillDztype-->
+ <UML:Class xmi.id="lineFillDztype" name="lineFillDztype">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineFillDztype</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>458</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Default</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>How to interpret
+ fillWidth/Height numbers.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineFillDztype-->
+<!--DFFOPT lineWidth-->
+ <UML:Class xmi.id="lineWidth" name="lineWidth">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>459</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9525</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>A units; 1pt == 12700
+ EMUs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineWidth-->
+<!--DFFOPT lineMiterLimit-->
+ <UML:Class xmi.id="lineMiterLimit" name="lineMiterLimit">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineMiterLimit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>460</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>ratio (16.16) of
+ width</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineMiterLimit-->
+<!--DFFOPT lineStyle-->
+ <UML:Class xmi.id="lineStyle" name="lineStyle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineStyle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>461</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Simple</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Draw parallel
+ lines?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineStyle-->
+<!--DFFOPT lineDashing-->
+ <UML:Class xmi.id="lineDashing" name="lineDashing">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineDashing</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>462</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Solid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Can be overridden
+ by:</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineDashing-->
+<!--DFFOPT lineDashStyle-->
+ <UML:Class xmi.id="lineDashStyle" name="lineDashStyle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineDashStyle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>463</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>As Win32
+ ExtCreatePen</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineDashStyle-->
+<!--DFFOPT lineStartArrowhead-->
+ <UML:Class xmi.id="lineStartArrowhead" name="lineStartArrowhead">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineStartArrowhead</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>464</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NoEnd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Arrow at
+ start</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineStartArrowhead-->
+<!--DFFOPT lineEndArrowhead-->
+ <UML:Class xmi.id="lineEndArrowhead" name="lineEndArrowhead">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineEndArrowhead</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>465</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NoEnd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Arrow at end</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineEndArrowhead-->
+<!--DFFOPT lineStartArrowWidth-->
+ <UML:Class xmi.id="lineStartArrowWidth" name="lineStartArrowWidth">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineStartArrowWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>466</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>MediumWidthArrow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Arrow at
+ start</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineStartArrowWidth-->
+<!--DFFOPT lineStartArrowLength-->
+ <UML:Class xmi.id="lineStartArrowLength" name="lineStartArrowLength">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineStartArrowLength</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>467</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>MediumLenArrow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Arrow at end</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineStartArrowLength-->
+<!--DFFOPT lineEndArrowWidth-->
+ <UML:Class xmi.id="lineEndArrowWidth" name="lineEndArrowWidth">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineEndArrowWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>468</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>MediumWidthArrow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Arrow at
+ start</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineEndArrowWidth-->
+<!--DFFOPT lineEndArrowLength-->
+ <UML:Class xmi.id="lineEndArrowLength" name="lineEndArrowLength">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineEndArrowLength</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>469</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>MediumLenArrow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Arrow at end</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineEndArrowLength-->
+<!--DFFOPT lineJoinStyle-->
+ <UML:Class xmi.id="lineJoinStyle" name="lineJoinStyle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineJoinStyle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>470</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>JoinRound</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>How to join
+ lines</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineJoinStyle-->
+<!--DFFOPT lineEndCapStyle-->
+ <UML:Class xmi.id="lineEndCapStyle" name="lineEndCapStyle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineEndCapStyle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>471</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>EndCapFlat</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>How to end
+ lines</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineEndCapStyle-->
+<!--DFFOPT fArrowheadsOK-->
+ <UML:Class xmi.id="fArrowheadsOK" name="fArrowheadsOK">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfArrowheadsOK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>507</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Allow arrowheads if prop.
+ is set</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fArrowheadsOK-->
+<!--DFFOPT fLine-->
+ <UML:Class xmi.id="fLine" name="fLine">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLine</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>508</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Any line?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fLine-->
+<!--DFFOPT fHitTestLine-->
+ <UML:Class xmi.id="fHitTestLine" name="fHitTestLine">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfHitTestLine</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>509</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Should we hit test
+ lines?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fHitTestLine-->
+<!--DFFOPT lineFillShape-->
+ <UML:Class xmi.id="lineFillShape" name="lineFillShape">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineFillShape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>510</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Register pattern on
+ shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lineFillShape-->
+<!--DFFOPT fNoLineDrawDash-->
+ <UML:Class xmi.id="fNoLineDrawDash" name="fNoLineDrawDash">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfNoLineDrawDash</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>511</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Draw a dashed line if no
+ line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fNoLineDrawDash-->
+<!--DFFOPT shadowType-->
+ <UML:Class xmi.id="shadowType" name="shadowType">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowType</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>512</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Offset</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Type of
+ effect</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT shadowType-->
+<!--DFFOPT shadowColor-->
+ <UML:Class xmi.id="shadowColor" name="shadowColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>513</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x808080</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Foreground
+ color</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT shadowColor-->
+<!--DFFOPT shadowHighlight-->
+ <UML:Class xmi.id="shadowHighlight" name="shadowHighlight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowHighlight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>514</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCBCBCB</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Embossed
+ color</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT shadowHighlight-->
+<!--DFFOPT shadowCrMod-->
+ <UML:Class xmi.id="shadowCrMod" name="shadowCrMod">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowCrMod</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>515</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>undefined</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Modification for BW
+ views</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT shadowCrMod-->
+<!--DFFOPT shadowOpacity-->
+ <UML:Class xmi.id="shadowOpacity" name="shadowOpacity">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowOpacity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>516</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fixed 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT shadowOpacity-->
+<!--DFFOPT shadowOffsetX-->
+ <UML:Class xmi.id="shadowOffsetX" name="shadowOffsetX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowOffsetX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>517</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>25400</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Offset shadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT shadowOffsetX-->
+<!--DFFOPT shadowOffsetY-->
+ <UML:Class xmi.id="shadowOffsetY" name="shadowOffsetY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowOffsetY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>518</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>25400</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Offset shadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT shadowOffsetY-->
+<!--DFFOPT shadowSecondOffsetX-->
+ <UML:Class xmi.id="shadowSecondOffsetX" name="shadowSecondOffsetX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowSecondOffsetX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>519</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Double offset
+ shadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT shadowSecondOffsetX-->
+<!--DFFOPT shadowSecondOffsetY-->
+ <UML:Class xmi.id="shadowSecondOffsetY" name="shadowSecondOffsetY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowSecondOffsetY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>520</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Double offset
+ shadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT shadowSecondOffsetY-->
+<!--DFFOPT shadowScaleXToX-->
+ <UML:Class xmi.id="shadowScaleXToX" name="shadowScaleXToX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowScaleXToX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>521</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT shadowScaleXToX-->
+<!--DFFOPT shadowScaleYToX-->
+ <UML:Class xmi.id="shadowScaleYToX" name="shadowScaleYToX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowScaleYToX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>522</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT shadowScaleYToX-->
+<!--DFFOPT shadowScaleXToY-->
+ <UML:Class xmi.id="shadowScaleXToY" name="shadowScaleXToY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowScaleXToY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>523</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT shadowScaleXToY-->
+<!--DFFOPT shadowScaleYToY-->
+ <UML:Class xmi.id="shadowScaleYToY" name="shadowScaleYToY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowScaleYToY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>524</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT shadowScaleYToY-->
+<!--DFFOPT shadowPerspectiveX-->
+ <UML:Class xmi.id="shadowPerspectiveX" name="shadowPerspectiveX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowPerspectiveX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>525</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16.16 /
+ weight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT shadowPerspectiveX-->
+<!--DFFOPT shadowPerspectiveY-->
+ <UML:Class xmi.id="shadowPerspectiveY" name="shadowPerspectiveY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowPerspectiveY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>526</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16.16 /
+ weight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT shadowPerspectiveY-->
+<!--DFFOPT shadowWeight-->
+ <UML:Class xmi.id="shadowWeight" name="shadowWeight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowWeight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>527</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>scaling
+ factor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT shadowWeight-->
+<!--DFFOPT shadowOriginX-->
+ <UML:Class xmi.id="shadowOriginX" name="shadowOriginX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowOriginX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>528</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT shadowOriginX-->
+<!--DFFOPT shadowOriginY-->
+ <UML:Class xmi.id="shadowOriginY" name="shadowOriginY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowOriginY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>529</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT shadowOriginY-->
+<!--DFFOPT fShadow-->
+ <UML:Class xmi.id="fShadow" name="fShadow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfShadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>574</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Any shadow?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fShadow-->
+<!--DFFOPT fshadowObscured-->
+ <UML:Class xmi.id="fshadowObscured" name="fshadowObscured">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfshadowObscured</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>575</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Excel5-style
+ shadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fshadowObscured-->
+<!--DFFOPT perspectiveType-->
+ <UML:Class xmi.id="perspectiveType" name="perspectiveType">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveType</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>576</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Where transform
+ applies</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT perspectiveType-->
+<!--DFFOPT perspectiveOffsetX-->
+ <UML:Class xmi.id="perspectiveOffsetX" name="perspectiveOffsetX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveOffsetX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>577</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The LONG values define a
+ transformation matrix, effectively, each value is scaled by the
+ perspectiveWeight parameter.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT perspectiveOffsetX-->
+<!--DFFOPT perspectiveOffsetY-->
+ <UML:Class xmi.id="perspectiveOffsetY" name="perspectiveOffsetY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveOffsetY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>578</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT perspectiveOffsetY-->
+<!--DFFOPT perspectiveScaleXToX-->
+ <UML:Class xmi.id="perspectiveScaleXToX" name="perspectiveScaleXToX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveScaleXToX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>579</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT perspectiveScaleXToX-->
+<!--DFFOPT perspectiveScaleYToX-->
+ <UML:Class xmi.id="perspectiveScaleYToX" name="perspectiveScaleYToX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveScaleYToX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>580</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT perspectiveScaleYToX-->
+<!--DFFOPT perspectiveScaleXToY-->
+ <UML:Class xmi.id="perspectiveScaleXToY" name="perspectiveScaleXToY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveScaleXToY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>581</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT perspectiveScaleXToY-->
+<!--DFFOPT perspectiveScaleYToY-->
+ <UML:Class xmi.id="perspectiveScaleYToY" name="perspectiveScaleYToY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveScaleYToY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>582</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT perspectiveScaleYToY-->
+<!--DFFOPT perspectivePerspectiveX-->
+ <UML:Class xmi.id="perspectivePerspectiveX" name="perspectivePerspectiveX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectivePerspectiveX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>583</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT perspectivePerspectiveX-->
+<!--DFFOPT perspectivePerspectiveY-->
+ <UML:Class xmi.id="perspectivePerspectiveY" name="perspectivePerspectiveY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectivePerspectiveY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>584</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT perspectivePerspectiveY-->
+<!--DFFOPT perspectiveWeight-->
+ <UML:Class xmi.id="perspectiveWeight" name="perspectiveWeight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveWeight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>585</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Scaling
+ factor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT perspectiveWeight-->
+<!--DFFOPT perspectiveOriginX-->
+ <UML:Class xmi.id="perspectiveOriginX" name="perspectiveOriginX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveOriginX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>586</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT perspectiveOriginX-->
+<!--DFFOPT perspectiveOriginY-->
+ <UML:Class xmi.id="perspectiveOriginY" name="perspectiveOriginY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveOriginY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>587</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT perspectiveOriginY-->
+<!--DFFOPT fPerspective-->
+ <UML:Class xmi.id="fPerspective" name="fPerspective">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfPerspective</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>639</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>On/off</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fPerspective-->
+<!--DFFOPT c3DSpecularAmt-->
+ <UML:Class xmi.id="c3DSpecularAmt" name="c3DSpecularAmt">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DSpecularAmt</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>640</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fixed-point
+ 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DSpecularAmt-->
+<!--DFFOPT c3DDiffuseAmt-->
+ <UML:Class xmi.id="c3DDiffuseAmt" name="c3DDiffuseAmt">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DDiffuseAmt</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>641</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>65536</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fixed-point
+ 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DDiffuseAmt-->
+<!--DFFOPT c3DShininess-->
+ <UML:Class xmi.id="c3DShininess" name="c3DShininess">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DShininess</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>642</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Default gives
+ OK results</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DShininess-->
+<!--DFFOPT c3DEdgeThickness-->
+ <UML:Class xmi.id="c3DEdgeThickness" name="c3DEdgeThickness">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DEdgeThickness</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>643</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>12700</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Specular edge
+ thickness</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DEdgeThickness-->
+<!--DFFOPT c3DExtrudeForward-->
+ <UML:Class xmi.id="c3DExtrudeForward" name="c3DExtrudeForward">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DExtrudeForward</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>644</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Distance of
+ extrusion in EMUs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DExtrudeForward-->
+<!--DFFOPT c3DExtrudeBackward-->
+ <UML:Class xmi.id="c3DExtrudeBackward" name="c3DExtrudeBackward">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DExtrudeBackward</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>645</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>457200</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DExtrudeBackward-->
+<!--DFFOPT c3DExtrudePlane-->
+ <UML:Class xmi.id="c3DExtrudePlane" name="c3DExtrudePlane">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DExtrudePlane</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>646</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Extrusion
+ direction</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DExtrudePlane-->
+<!--DFFOPT c3DExtrusionColor-->
+ <UML:Class xmi.id="c3DExtrusionColor" name="c3DExtrusionColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DExtrusionColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>647</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FillThenLine</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Basic color
+ of extruded part of shape; the lighting model used will determine
+ the exact shades used when rendering.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DExtrusionColor-->
+<!--DFFOPT c3DCrMod-->
+ <UML:Class xmi.id="c3DCrMod" name="c3DCrMod">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DCrMod</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>648</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>undefined</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Modification
+ for BW views</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DCrMod-->
+<!--DFFOPT f3D-->
+ <UML:Class xmi.id="f3D" name="f3D">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpf3D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>700</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Does this
+ shape have a 3D effect?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT f3D-->
+<!--DFFOPT fc3DMetallic-->
+ <UML:Class xmi.id="fc3DMetallic" name="fc3DMetallic">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfc3DMetallic</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>701</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Use metallic
+ specularity?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fc3DMetallic-->
+<!--DFFOPT fc3DUseExtrusionColor-->
+ <UML:Class xmi.id="fc3DUseExtrusionColor" name="fc3DUseExtrusionColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfc3DUseExtrusionColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>702</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fc3DUseExtrusionColor-->
+<!--DFFOPT fc3DLightFace-->
+ <UML:Class xmi.id="fc3DLightFace" name="fc3DLightFace">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfc3DLightFace</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>703</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fc3DLightFace-->
+<!--DFFOPT c3DYRotationAngle-->
+ <UML:Class xmi.id="c3DYRotationAngle" name="c3DYRotationAngle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DYRotationAngle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>704</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>degrees (16.16) about y
+ axis</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DYRotationAngle-->
+<!--DFFOPT c3DXRotationAngle-->
+ <UML:Class xmi.id="c3DXRotationAngle" name="c3DXRotationAngle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DXRotationAngle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>705</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>degrees (16.16) about x
+ axis</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DXRotationAngle-->
+<!--DFFOPT c3DRotationAxisX-->
+ <UML:Class xmi.id="c3DRotationAxisX" name="c3DRotationAxisX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DRotationAxisX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>706</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>100</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>These specify the
+ rotation axis; only their relative magnitudes matter.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DRotationAxisX-->
+<!--DFFOPT c3DRotationAxisY-->
+ <UML:Class xmi.id="c3DRotationAxisY" name="c3DRotationAxisY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DRotationAxisY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>707</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DRotationAxisY-->
+<!--DFFOPT c3DRotationAxisZ-->
+ <UML:Class xmi.id="c3DRotationAxisZ" name="c3DRotationAxisZ">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DRotationAxisZ</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>708</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DRotationAxisZ-->
+<!--DFFOPT c3DRotationAngle-->
+ <UML:Class xmi.id="c3DRotationAngle" name="c3DRotationAngle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DRotationAngle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>709</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>degrees (16.16) about
+ axis</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DRotationAngle-->
+<!--DFFOPT c3DRotationCenterX-->
+ <UML:Class xmi.id="c3DRotationCenterX" name="c3DRotationCenterX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DRotationCenterX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>710</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rotation center x (16.16
+ or g-units)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DRotationCenterX-->
+<!--DFFOPT c3DRotationCenterY-->
+ <UML:Class xmi.id="c3DRotationCenterY" name="c3DRotationCenterY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DRotationCenterY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>711</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rotation center y (16.16
+ or g-units)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DRotationCenterY-->
+<!--DFFOPT c3DRotationCenterZ-->
+ <UML:Class xmi.id="c3DRotationCenterZ" name="c3DRotationCenterZ">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DRotationCenterZ</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>712</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rotation center z
+ (absolute (emus))</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DRotationCenterZ-->
+<!--DFFOPT c3DRenderMode-->
+ <UML:Class xmi.id="c3DRenderMode" name="c3DRenderMode">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DRenderMode</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>713</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FullRender</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Full,wireframe, or
+ bcube</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DRenderMode-->
+<!--DFFOPT c3DTolerance-->
+ <UML:Class xmi.id="c3DTolerance" name="c3DTolerance">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DTolerance</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>714</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>30000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>pixels
+ (16.16)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DTolerance-->
+<!--DFFOPT c3DXViewpoint-->
+ <UML:Class xmi.id="c3DXViewpoint" name="c3DXViewpoint">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DXViewpoint</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>715</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1250000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>X view point
+ (emus)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DXViewpoint-->
+<!--DFFOPT c3DYViewpoint-->
+ <UML:Class xmi.id="c3DYViewpoint" name="c3DYViewpoint">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DYViewpoint</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>716</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>-1250000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Y view point
+ (emus)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DYViewpoint-->
+<!--DFFOPT c3DZViewpoint-->
+ <UML:Class xmi.id="c3DZViewpoint" name="c3DZViewpoint">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DZViewpoint</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>717</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9000000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Z view distance
+ (emus)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DZViewpoint-->
+<!--DFFOPT c3DOriginX-->
+ <UML:Class xmi.id="c3DOriginX" name="c3DOriginX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DOriginX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>718</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32768</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DOriginX-->
+<!--DFFOPT c3DOriginY-->
+ <UML:Class xmi.id="c3DOriginY" name="c3DOriginY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DOriginY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>719</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>-32768</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DOriginY-->
+<!--DFFOPT c3DSkewAngle-->
+ <UML:Class xmi.id="c3DSkewAngle" name="c3DSkewAngle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DSkewAngle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>720</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>-8847360</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>degree (16.16) skew
+ angle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DSkewAngle-->
+<!--DFFOPT c3DSkewAmount-->
+ <UML:Class xmi.id="c3DSkewAmount" name="c3DSkewAmount">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DSkewAmount</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>721</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>50</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Percentage skew
+ amount</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DSkewAmount-->
+<!--DFFOPT c3DAmbientIntensity-->
+ <UML:Class xmi.id="c3DAmbientIntensity" name="c3DAmbientIntensity">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DAmbientIntensity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>722</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>20000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fixed point
+ intensity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DAmbientIntensity-->
+<!--DFFOPT c3DKeyX-->
+ <UML:Class xmi.id="c3DKeyX" name="c3DKeyX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DKeyX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>723</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>50000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Key light source
+ direc-</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DKeyX-->
+<!--DFFOPT c3DKeyY-->
+ <UML:Class xmi.id="c3DKeyY" name="c3DKeyY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DKeyY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>724</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>tion; only their
+ relative</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DKeyY-->
+<!--DFFOPT c3DKeyZ-->
+ <UML:Class xmi.id="c3DKeyZ" name="c3DKeyZ">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DKeyZ</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>725</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>magnitudes
+ matter</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DKeyZ-->
+<!--DFFOPT c3DKeyIntensity-->
+ <UML:Class xmi.id="c3DKeyIntensity" name="c3DKeyIntensity">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DKeyIntensity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>726</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>38000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fixed point
+ intensity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DKeyIntensity-->
+<!--DFFOPT c3DFillX-->
+ <UML:Class xmi.id="c3DFillX" name="c3DFillX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DFillX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>727</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>-50000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fill light source
+ direc-</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DFillX-->
+<!--DFFOPT c3DFillY-->
+ <UML:Class xmi.id="c3DFillY" name="c3DFillY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DFillY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>728</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>tion; only their
+ relative</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DFillY-->
+<!--DFFOPT c3DFillZ-->
+ <UML:Class xmi.id="c3DFillZ" name="c3DFillZ">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DFillZ</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>729</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>magnitudes
+ matter</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DFillZ-->
+<!--DFFOPT c3DFillIntensity-->
+ <UML:Class xmi.id="c3DFillIntensity" name="c3DFillIntensity">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DFillIntensity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>730</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>38000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fixed point
+ intensity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT c3DFillIntensity-->
+<!--DFFOPT fc3DConstrainRotation-->
+ <UML:Class xmi.id="fc3DConstrainRotation" name="fc3DConstrainRotation">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfc3DConstrainRotation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>763</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fc3DConstrainRotation-->
+<!--DFFOPT fc3DRotationCenterAuto-->
+ <UML:Class xmi.id="fc3DRotationCenterAuto" name="fc3DRotationCenterAuto">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfc3DRotationCenterAuto</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>764</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fc3DRotationCenterAuto-->
+<!--DFFOPT fc3DParallel-->
+ <UML:Class xmi.id="fc3DParallel" name="fc3DParallel">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfc3DParallel</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>765</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Parallel
+ projection?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fc3DParallel-->
+<!--DFFOPT fc3DKeyHarsh-->
+ <UML:Class xmi.id="fc3DKeyHarsh" name="fc3DKeyHarsh">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfc3DKeyHarsh</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>766</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Is key lighting
+ harsh?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fc3DKeyHarsh-->
+<!--DFFOPT fc3DFillHarsh-->
+ <UML:Class xmi.id="fc3DFillHarsh" name="fc3DFillHarsh">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfc3DFillHarsh</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>767</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Is fill lighting
+ harsh?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fc3DFillHarsh-->
+<!--DFFOPT hspMaster-->
+ <UML:Class xmi.id="hspMaster" name="hspMaster">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shphspMaster</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>769</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>master
+ shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT hspMaster-->
+<!--DFFOPT cxstyle-->
+ <UML:Class xmi.id="cxstyle" name="cxstyle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpcxstyle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>771</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>None</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Type of
+ connector</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT cxstyle-->
+<!--DFFOPT bWMode-->
+ <UML:Class xmi.id="bWMode" name="bWMode">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpbWMode</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>772</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Automatic</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Settings for
+ modifications to be made when in different forms of black-and-white
+ mode.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT bWMode-->
+<!--DFFOPT bWModePureBW-->
+ <UML:Class xmi.id="bWModePureBW" name="bWModePureBW">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpbWModePureBW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>773</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Automatic</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT bWModePureBW-->
+<!--DFFOPT bWModeBW-->
+ <UML:Class xmi.id="bWModeBW" name="bWModeBW">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpbWModeBW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>774</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Automatic</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT bWModeBW-->
+<!--DFFOPT fOleIcon-->
+ <UML:Class xmi.id="fOleIcon" name="fOleIcon">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfOleIcon</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>826</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>For OLE
+ objects, whether the object is in icon form</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fOleIcon-->
+<!--DFFOPT fPreferRelativeResize-->
+ <UML:Class xmi.id="fPreferRelativeResize" name="fPreferRelativeResize">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfPreferRelativeResize</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>827</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>For UI only.
+ Prefer relative resizing.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fPreferRelativeResize-->
+<!--DFFOPT fLockShapeType-->
+ <UML:Class xmi.id="fLockShapeType" name="fLockShapeType">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockShapeType</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>828</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Lock the
+ shape type (don't allow Change Shape)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fLockShapeType-->
+<!--DFFOPT fDeleteAttachedObject-->
+ <UML:Class xmi.id="fDeleteAttachedObject" name="fDeleteAttachedObject">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfDeleteAttachedObject</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>830</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fDeleteAttachedObject-->
+<!--DFFOPT fBackground-->
+ <UML:Class xmi.id="fBackground" name="fBackground">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfBackground</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>831</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>If TRUE, this
+ is the background shape.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fBackground-->
+<!--DFFOPT spcot-->
+ <UML:Class xmi.id="spcot" name="spcot">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpspcot</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>832</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TwoSegment</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Callout type</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT spcot-->
+<!--DFFOPT dxyCalloutGap-->
+ <UML:Class xmi.id="dxyCalloutGap" name="dxyCalloutGap">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdxyCalloutGap</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>833</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1/12 inch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Distance from box to
+ first point.(EMUs)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT dxyCalloutGap-->
+<!--DFFOPT spcoa-->
+ <UML:Class xmi.id="spcoa" name="spcoa">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpspcoa</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>834</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Any</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Callout angle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT spcoa-->
+<!--DFFOPT spcod-->
+ <UML:Class xmi.id="spcod" name="spcod">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpspcod</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>835</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Specified</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Callout drop
+ type</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT spcod-->
+<!--DFFOPT dxyCalloutDropSpecified-->
+ <UML:Class xmi.id="dxyCalloutDropSpecified" name="dxyCalloutDropSpecified">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdxyCalloutDropSpecified</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>836</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9 points</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>if msospcodSpecified, the
+ actual drop distance</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT dxyCalloutDropSpecified-->
+<!--DFFOPT dxyCalloutLengthSpecified-->
+ <UML:Class xmi.id="dxyCalloutLengthSpecified" name="dxyCalloutLengthSpecified">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdxyCalloutLengthSpecified</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>837</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>if
+ fCalloutLengthSpecified, the actual distance</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT dxyCalloutLengthSpecified-->
+<!--DFFOPT fCallout-->
+ <UML:Class xmi.id="fCallout" name="fCallout">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfCallout</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>889</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Is the shape a
+ callout?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fCallout-->
+<!--DFFOPT fCalloutAccentBar-->
+ <UML:Class xmi.id="fCalloutAccentBar" name="fCalloutAccentBar">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfCalloutAccentBar</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>890</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>does callout have accent
+ bar</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fCalloutAccentBar-->
+<!--DFFOPT fCalloutTextBorder-->
+ <UML:Class xmi.id="fCalloutTextBorder" name="fCalloutTextBorder">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfCalloutTextBorder</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>891</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>does callout have a text
+ border</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fCalloutTextBorder-->
+<!--DFFOPT fCalloutMinusX-->
+ <UML:Class xmi.id="fCalloutMinusX" name="fCalloutMinusX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfCalloutMinusX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>892</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fCalloutMinusX-->
+<!--DFFOPT fCalloutMinusY-->
+ <UML:Class xmi.id="fCalloutMinusY" name="fCalloutMinusY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfCalloutMinusY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>893</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fCalloutMinusY-->
+<!--DFFOPT fCalloutDropAuto-->
+ <UML:Class xmi.id="fCalloutDropAuto" name="fCalloutDropAuto">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfCalloutDropAuto</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>894</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>If true, then we
+ occasionally invert the drop distance</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fCalloutDropAuto-->
+<!--DFFOPT fCalloutLengthSpecified-->
+ <UML:Class xmi.id="fCalloutLengthSpecified" name="fCalloutLengthSpecified">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfCalloutLengthSpecified</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>895</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>if true, we look at
+ dxyCalloutLengthSpecified</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fCalloutLengthSpecified-->
+<!--DFFOPT wzName-->
+ <UML:Class xmi.id="wzName" name="wzName">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpwzName</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>896</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>String</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape Name (present only
+ if explicitly set)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT wzName-->
+<!--DFFOPT wzDescription-->
+ <UML:Class xmi.id="wzDescription" name="wzDescription">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpwzDescription</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>897</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>String</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>alternate
+ text</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT wzDescription-->
+<!--DFFOPT pihlShape-->
+ <UML:Class xmi.id="pihlShape" name="pihlShape">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppihlShape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>898</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The hyperlink in the
+ shape.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pihlShape-->
+<!--DFFOPT pWrapPolygonVertices-->
+ <UML:Class xmi.id="pWrapPolygonVertices" name="pWrapPolygonVertices">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppWrapPolygonVertices</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>899</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The polygon that text
+ will be wrapped around (Word)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT pWrapPolygonVertices-->
+<!--DFFOPT dxWrapDistLeft-->
+ <UML:Class xmi.id="dxWrapDistLeft" name="dxWrapDistLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdxWrapDistLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>900</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1/8 inch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Left wrapping distance
+ from text (Word)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT dxWrapDistLeft-->
+<!--DFFOPT dyWrapDistTop-->
+ <UML:Class xmi.id="dyWrapDistTop" name="dyWrapDistTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdyWrapDistTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>901</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Top wrapping distance
+ from text (Word)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT dyWrapDistTop-->
+<!--DFFOPT dxWrapDistRight-->
+ <UML:Class xmi.id="dxWrapDistRight" name="dxWrapDistRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdxWrapDistRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>902</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1/8 inch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Right wrapping distance
+ from text (Word)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT dxWrapDistRight-->
+<!--DFFOPT dyWrapDistBottom-->
+ <UML:Class xmi.id="dyWrapDistBottom" name="dyWrapDistBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdyWrapDistBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>903</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Bottom wrapping distance
+ from text (Word)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT dyWrapDistBottom-->
+<!--DFFOPT lidRegroup-->
+ <UML:Class xmi.id="lidRegroup" name="lidRegroup">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplidRegroup</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>904</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Regroup ID</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT lidRegroup-->
+<!--DFFOPT fEditedWrap-->
+ <UML:Class xmi.id="fEditedWrap" name="fEditedWrap">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfEditedWrap</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>953</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Has the wrap polygon been
+ edited?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fEditedWrap-->
+<!--DFFOPT fBehindDocument-->
+ <UML:Class xmi.id="fBehindDocument" name="fBehindDocument">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfBehindDocument</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>954</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Word-only (shape is
+ behind text)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fBehindDocument-->
+<!--DFFOPT fOnDblClickNotify-->
+ <UML:Class xmi.id="fOnDblClickNotify" name="fOnDblClickNotify">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfOnDblClickNotify</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>955</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Notify client on a double
+ click</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fOnDblClickNotify-->
+<!--DFFOPT fIsButton-->
+ <UML:Class xmi.id="fIsButton" name="fIsButton">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfIsButton</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>956</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>A button shape (i.e.,
+ clicking performs an action). Set for shapes with attached
+ hyperlinks or macros.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fIsButton-->
+<!--DFFOPT fOneD-->
+ <UML:Class xmi.id="fOneD" name="fOneD">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfOneD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>957</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1D adjustment</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fOneD-->
+<!--DFFOPT fHidden-->
+ <UML:Class xmi.id="fHidden" name="fHidden">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfHidden</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>958</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Do not
+ display</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fHidden-->
+<!--DFFOPT fPrint-->
+ <UML:Class xmi.id="fPrint" name="fPrint">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfPrint</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>959</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Print this
+ shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+<!--DFFOPT fPrint-->
+<!--DFFOPT-->
+ </UML:Namespace.ownedElement>
+ </UML:Model>
+ </XMI.content>
+</XMI>
diff --git a/writerfilter/source/doctok/resources.xsl b/writerfilter/source/doctok/resources.xsl
new file mode 100644
index 000000000000..1ef78a79dd76
--- /dev/null
+++ b/writerfilter/source/doctok/resources.xsl
@@ -0,0 +1,915 @@
+<!--
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:text>
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * http://www.openoffice.org/license.html
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+/*
+
+ THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT!
+
+*/
+#ifndef INCLUDED_RESOURCES_HXX
+#define INCLUDED_RESOURCES_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+
+#ifndef INCLUDED_OUTPUT_WITH_DEPTH_HXX
+#include &lt;resourcemodel/OutputWithDepth.hxx&gt;
+#endif
+
+#ifndef INCLUDED_RESOURCESIDS_HXX
+#include &lt;doctok/resourceids.hxx&gt;
+#endif
+
+#ifndef INCLUDED_WW8_STRUCT_BASE_HXX
+#include &lt;WW8StructBase.hxx&gt;
+#endif
+
+#ifndef INCLUDED_WW8_RESOURCE_MODEL_IMPL_HXX
+#include &lt;WW8ResourceModelImpl.hxx&gt;
+#endif
+
+#ifndef INCLUDED_WW8_PROPERTY_SET_IMPL_HXX
+#include &lt;WW8PropertySetImpl.hxx&gt;
+#endif
+
+#ifndef INCLUDED_DFF_HXX
+#include &lt;Dff.hxx&gt;
+#endif
+
+namespace writerfilter {
+namespace doctok {
+
+class WW8DocumentImpl;
+typedef const WW8DocumentImpl * WW8DocumentImplPointer;
+
+using namespace ::std;&#xa;</xsl:text>
+ <xsl:apply-templates select="//UML:Class" mode="class"/>
+ <xsl:text>
+rtl::OUString getDffOptName(sal_uInt32 nPid);
+bool isBooleanDffOpt(sal_uInt32 nId);
+}}
+#endif // INCLUDED_RESOURCES_HXX&#xa;</xsl:text></out>
+</xsl:template>
+
+ <xsl:template match="UML:Class" mode="class">
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "ww8resource"]'>
+ <xsl:apply-templates select="." mode="ww8resource"/>
+ </xsl:when>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "dffrecord"]'>
+ <xsl:apply-templates select="." mode="dffrecord"/>
+ </xsl:when>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "dffopt"]'>
+ <xsl:apply-templates select="." mode="dffopt"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="UML:Class" mode="ww8resource">
+ <xsl:variable name="parentresource">
+ <xsl:call-template name='parenttype'>
+ <xsl:with-param name='type'><xsl:value-of select='@xmi.id'/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name='size_'><xsl:value-of select='./*/UML:TaggedValue[./*/UML:TagDefinition/@xmi.idref="size"]/UML:TaggedValue.dataValue'/></xsl:variable>
+ <xsl:variable name='size'>
+ <xsl:choose>
+ <xsl:when test='$size_ != ""'><xsl:value-of select='$size_'/></xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="classname">WW8<xsl:value-of select="@name"/></xsl:variable>
+ <xsl:variable name="superclass">
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "ww8sprm"]'>WW8PropertyImpl</xsl:when>
+ <xsl:otherwise>WW8StructBase</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="surroundclass">
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "ww8sprm"]'>WW8PropertyImpl</xsl:when>
+ <xsl:otherwise>WW8StructBase</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:text>
+/**
+ Automatically generated class: </xsl:text><xsl:value-of select="@name"/><xsl:text>
+ </xsl:text>
+ <xsl:for-each select='./UML:ModelElement.stereotype/UML:Stereotype'>
+ <xsl:text>
+ Stereotype </xsl:text>
+ <xsl:value-of select='@xmi.idref'/>
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+ Parent Resource: </xsl:text>
+ <xsl:value-of select="$parentresource"/>
+ <xsl:text>
+ Size: </xsl:text><xsl:value-of select='$size'/>
+ <xsl:text>
+*/
+class </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>: public </xsl:text>
+ <xsl:value-of select='$superclass'/>
+ <xsl:if test='$parentresource != ""'>
+ <xsl:text>, public writerfilter::Reference&lt; </xsl:text>
+ <xsl:value-of select='$parentresource'/>
+ <xsl:text>&gt;</xsl:text>
+ </xsl:if>
+ <xsl:text>
+{</xsl:text>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="withindex"]'>
+ <xsl:text> sal_uInt32 mnIndex;</xsl:text>
+ </xsl:if>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="withmembers"]'>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"]'>
+ <xsl:apply-templates select='.' mode='declmembers'/>
+ </xsl:for-each>
+ </xsl:if>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="needsdocument"]'>
+ <xsl:text> WW8DocumentImplPointer mpDoc;&#xa;</xsl:text>
+ </xsl:if>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="plcf"]'>
+ <xsl:text>
+ sal_uInt32 mnPlcfPayloadOffset;
+ vector&lt;sal_uInt32&gt; entryOffsets;
+ vector&lt;sal_uInt32&gt; payloadOffsets;
+ vector&lt;sal_uInt32&gt; payloadIndices;
+ </xsl:text>
+ </xsl:if>
+ <xsl:text>
+ public:
+ typedef boost::shared_ptr&lt;</xsl:text>
+ <xsl:value-of select='$classname'/>
+ <xsl:text>&gt; Pointer_t;
+
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>(
+ WW8Stream &amp; rStream,
+ sal_uInt32 nOffset = 0,
+ sal_uInt32 nCount = </xsl:text>
+ <xsl:value-of select='$size'/>
+ <xsl:text>)
+ : </xsl:text><xsl:value-of select='$superclass'/>
+ <xsl:text>(rStream, nOffset, nCount)</xsl:text>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="withindex"]'>
+ <xsl:text>, mnIndex(0)</xsl:text>
+ </xsl:if>
+ <xsl:text>
+ {
+ init();
+ }
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>(
+ WW8StructBase * pParent,
+ sal_uInt32 nOffset = 0,
+ sal_uInt32 nCount = </xsl:text>
+ <xsl:value-of select='$size'/>
+ <xsl:text>)
+ : </xsl:text>
+ <xsl:value-of select='$superclass'/>
+ <xsl:text>(pParent, nOffset, nCount)</xsl:text>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="withindex"]'>
+ <xsl:text>, mnIndex(0)</xsl:text>
+ </xsl:if>
+ <xsl:text>
+ {
+ init();
+ }&#xa; </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>( const </xsl:text>
+ <xsl:value-of select='$surroundclass'/>
+ <xsl:text>&amp; rSurround,
+ sal_uInt32 nOffset = 0, sal_uInt32 nCount = </xsl:text>
+ <xsl:value-of select='$size'/>)
+ <xsl:text>
+ : </xsl:text>
+ <xsl:value-of select='$superclass'/>
+ <xsl:text>(rSurround, nOffset, nCount)</xsl:text>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="withindex"]'>
+ <xsl:text>, mnIndex(0)</xsl:text>
+ </xsl:if>
+ <xsl:text>
+ {
+ init();
+ }&#xa;
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>(
+ const Sequence &amp;
+ rSequence, sal_uInt32 nOffset = 0,
+ sal_uInt32 nCount = </xsl:text>
+ <xsl:value-of select='$size'/>
+ <xsl:text>)
+ : </xsl:text>
+ <xsl:value-of select='$superclass'/>
+ <xsl:text>(rSequence, nOffset, nCount)</xsl:text>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="withindex"]'>
+ <xsl:text>, mnIndex(0)</xsl:text>
+ </xsl:if>
+ <xsl:text>
+ {
+ init();
+ }
+
+ virtual ~</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>();&#xa;</xsl:text>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="initimpl"]'>
+ <xsl:text> void initImpl();&#xa;</xsl:text>
+ </xsl:if>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="plcf"]'>
+ <xsl:text> void initPayload();</xsl:text>
+ </xsl:if>
+ <xsl:text>
+ void init();
+
+ /**
+ Return type of resource.
+ */
+ virtual string getType() const
+ {
+ return "</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>";
+ }
+
+ /**
+ Return static size.
+ */
+ static sal_uInt32 getSize() { return </xsl:text>
+ <xsl:value-of select='$size'/>
+ <xsl:text>; }
+
+ /**
+ Calculate actual size.
+ */
+ sal_uInt32 calcSize();
+
+ </xsl:text>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="plcf"]'>
+ <xsl:text>
+ /**
+ Return offset for entry of PLCF.
+
+ @param nIndex index of entry
+ */
+ sal_uInt32 getEntryOffset(sal_uInt32 nIndex)
+ {
+ return entryOffsets[nIndex];
+ }
+
+ /**
+ Calculate offset for payload.
+ */
+ sal_uInt32 calcPayloadOffset();
+
+ /**
+ Set offset for payloads.
+
+ @param nOffset the offset to set
+ */
+ void setPayloadOffset(sal_uInt32 nOffset)
+ {
+ mnPlcfPayloadOffset = nOffset;
+ }
+
+ /**
+ Return offset for payload of PLCF.
+
+ @param nIndex index of entry
+ */
+ sal_uInt32 getPayloadOffset(sal_uInt32 nIndex)
+ {
+ return payloadOffsets[nIndex];
+ }
+
+ /**
+ Return size of payload.
+ */
+ sal_uInt32 getPayloadSize(sal_uInt32 nIndex) const
+ {
+ return payloadOffsets[nIndex + 1] - payloadOffsets[nIndex];
+ }
+
+
+ /**
+ Return payload index of an entry.
+
+ */
+ sal_uInt32 getPayloadIndex(sal_uInt32 nIndex)
+ {
+ return payloadIndices[nIndex];
+ }
+ </xsl:text>
+ </xsl:if>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="withindex"]'>
+ <xsl:text>
+ /**
+ Set index in parent.
+
+ @param nIndex the index
+ */
+ void setIndex(sal_uInt32 nIndex) { mnIndex = nIndex; }
+ </xsl:text>
+ </xsl:if>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="ww8sprm"]'>
+ <xsl:variable name='propsreftype'>writerfilter::Reference &lt; Properties &gt;::Pointer_t</xsl:variable>
+ <xsl:text> /**
+ Return reference to properties of Sprm.
+ */
+ </xsl:text>
+ <xsl:value-of select='$propsreftype'/>
+ <xsl:text> getProps()
+ {
+ return </xsl:text>
+ <xsl:value-of select='$propsreftype'/>
+ <xsl:text> (new </xsl:text>
+ <xsl:value-of select='$classname'/>
+ <xsl:text>(*this));
+ }
+ </xsl:text>
+ </xsl:if>
+
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="ww8sprmbinary"]'>
+ <xsl:text>
+ virtual writerfilter::Reference &lt; BinaryObj &gt; ::Pointer_t getBinary();
+ </xsl:text>
+ </xsl:if>
+
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="needsdocument"]'>
+ <xsl:text>
+ void setDoc(WW8DocumentImplPointer pDoc)
+ {
+ mpDoc = pDoc;
+ }
+ </xsl:text>
+ </xsl:if>
+ <xsl:apply-templates select="." mode="declsProperties"/>
+ <xsl:if test='$parentresource="Table"'>
+ <xsl:apply-templates select="." mode="declsTable"/>
+ </xsl:if>
+ <xsl:choose>
+ <xsl:when test='$parentresource="Properties"'>
+ <xsl:apply-templates select="." mode="resolveProperties"/>
+ </xsl:when>
+ <xsl:when test='$parentresource="Table"'>
+ <xsl:apply-templates select="." mode="resolveTable"/>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:text>
+ };
+ </xsl:text>
+ </xsl:template>
+
+<xsl:template match='UML:Class' mode='declsProperties'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref ="withmembers"]'>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"]'>
+ <xsl:apply-templates select='.' mode='accessmembers'/>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="debug">
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="debug"]'>
+ <xsl:text>true</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>false</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"]'>
+ <xsl:apply-templates select='.' mode='access'>
+ <xsl:with-param name="debug">
+ <xsl:value-of select="$debug"/>
+ </xsl:with-param>
+ </xsl:apply-templates>
+ </xsl:for-each>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:for-each select='.//UML:Operation[@name!="reserved"]'>
+ <xsl:apply-templates select='.' mode='declsOperations'/>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match="UML:Class" mode="resolveProperties">
+ <xsl:if test='.//UML:Stereotype[@xmi.idref = "resolvenoauto"]'>
+ void resolveNoAuto(Properties &amp; rHandler);
+ </xsl:if>
+
+ void dump(OutputWithDepth &lt; string &gt; &amp; o) const;
+
+ void resolve(Properties &amp; rHandler);
+</xsl:template>
+
+<xsl:template match="UML:Class" mode="declsTable">
+ sal_uInt32 getEntryCount();
+ writerfilter::Reference&lt; Properties &gt;::Pointer_t getEntry(sal_uInt32 nIndex);
+</xsl:template>
+
+<xsl:template match="UML:Class" mode="resolveTable">
+ void resolve(Table &amp; rHandler);
+</xsl:template>
+
+<xsl:template match="UML:Attribute" mode="access">
+ <xsl:param name="debug"/>
+ <xsl:variable name="stereotype"><xsl:value-of select=".//UML:Stereotype[1]/@xmi.idref"/></xsl:variable>
+ <xsl:variable name="offset_"><xsl:value-of select='translate(.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="offset"]/UML:TaggedValue.dataValue, "ABCDEFX", "abcdefx")'/></xsl:variable>
+ <xsl:variable name="offset">
+ <xsl:if test='$offset_ != "" and not(starts-with($offset_, "0x"))'>0x</xsl:if>
+ <xsl:value-of select='$offset_'/>
+ </xsl:variable>
+ <xsl:variable name="shift"><xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="shift"]/UML:TaggedValue.dataValue'/></xsl:variable>
+ <xsl:variable name="mask_"><xsl:value-of select='translate(.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="mask"]/UML:TaggedValue.dataValue, "ABCDEFX", "abcdefx")'/></xsl:variable>
+ <xsl:variable name="mask">
+ <xsl:if test='$mask_ != "" and not(starts-with($mask_, "0x"))'>0x</xsl:if>
+ <xsl:value-of select='$mask_'/>
+ </xsl:variable>
+ <xsl:variable name='type'>
+ <xsl:value-of select="UML:StructuralFeature.type/UML:DataType/@xmi.idref"/>
+ </xsl:variable>
+ <xsl:variable name="completetype">
+ <xsl:text>WW8</xsl:text>
+ <xsl:value-of select="$type"/>
+ </xsl:variable>
+ <xsl:variable name="saltype">
+ <xsl:apply-templates select="." mode="returntype"/>
+ </xsl:variable>
+ <xsl:variable name='typetype'>
+ <xsl:call-template name='typetype'>
+ <xsl:with-param name='type'><xsl:value-of select="$type"/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+
+ /**
+ <xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="comment"]/UML:TaggedValue.dataValue'/>
+
+ &lt;table&gt;
+ &lt;tr&gt;
+ &lt;th&gt;
+ Name
+ &lt;/th&gt;
+ &lt;td&gt;
+ <xsl:value-of select='@name'/>(<xsl:value-of select='$stereotype'/>)
+ &lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;th&gt;
+ Offset
+ &lt;/th&gt;
+ &lt;td&gt;
+ <xsl:value-of select='$offset'/>
+ &lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;th&gt;
+ Mask
+ &lt;/th&gt;
+ &lt;td&gt;
+ <xsl:value-of select='$mask'/>
+ &lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;th&gt;
+ Shift
+ &lt;/th&gt;
+ &lt;td&gt;
+ <xsl:value-of select='$shift'/>
+ &lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;/table&gt;
+ */
+
+<xsl:choose>
+ <xsl:when test='$stereotype = "attribute"'>
+ <xsl:if test='././/UML:Stereotype[@xmi.idref="virtual"]'>
+ <xsl:text>virtual </xsl:text>
+ </xsl:if>
+ <xsl:value-of select='$saltype'/> get_<xsl:value-of select='@name'/>() const
+ {
+ <xsl:if test='$debug="true"'>
+ <xsl:text>
+ clog &lt;&lt; "&lt;called&gt;</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>&lt;/called&gt;"
+ &lt;&lt; endl;&#xa;
+ </xsl:text>
+ </xsl:if>
+ <xsl:choose>
+ <xsl:when test='././/UML:Stereotype[@xmi.idref="attributeremainder"]'>
+ <xsl:text>return writerfilter::Reference &lt; BinaryObj &gt;::Pointer_t(new WW8BinaryObjReference(getRemainder(</xsl:text>
+ <xsl:value-of select="$offset"/>
+ <xsl:text>)));&#xa;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test='$typetype = "complex"'>
+ <xsl:text> return </xsl:text>
+ <xsl:value-of select="$saltype"/>
+ <xsl:text>(new </xsl:text>
+ <xsl:value-of select="$completetype"/>
+ <xsl:text>(*this, </xsl:text>
+ <xsl:value-of select="$offset"/>
+ <xsl:text>));&#xa;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text> return (get</xsl:text>
+ <xsl:value-of select="$type"/>
+ <xsl:text>(</xsl:text>
+ <xsl:value-of select="$offset"/>
+ <xsl:text>)</xsl:text>
+ <xsl:if test="string-length($mask)>0">
+ <xsl:text>&amp; </xsl:text>
+ <xsl:value-of select="$mask"/>
+ </xsl:if>
+ <xsl:text>)</xsl:text>
+ <xsl:if test="$shift>0">
+ <xsl:text>&gt;&gt; </xsl:text>
+ <xsl:value-of select="$shift"/>
+ </xsl:if>
+ <xsl:text>;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ }
+ </xsl:when>
+ <xsl:when test='$stereotype = "array"'>
+ <xsl:text>sal_uInt32 get_</xsl:text>
+ <xsl:value-of select='@name'/>
+ <xsl:text>_count() const </xsl:text>
+ <xsl:choose>
+ <xsl:when test='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref = "arraycount"]'>
+ <xsl:text>{ return </xsl:text>
+ <xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref = "arraycount"]/UML:TaggedValue.dataValue'/>
+ <xsl:text>; }&#xa;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>;&#xa;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:value-of select='$saltype'/>
+ <xsl:text> get_</xsl:text>
+ <xsl:value-of select='@name'/>
+ <xsl:text>(sal_uInt32 nIndex) const {</xsl:text>
+ <xsl:choose>
+ <xsl:when test="$typetype='complex'">
+ <xsl:text> return </xsl:text>
+ <xsl:value-of select="$saltype"/>
+ <xsl:text>( new </xsl:text>
+ <xsl:value-of select="$completetype"/>
+ <xsl:text>(static_cast&lt;const WW8StructBase &gt;(*this), </xsl:text>
+ <xsl:value-of select="$offset"/>
+ <xsl:text> + nIndex * </xsl:text>
+ <xsl:value-of select="$completetype"/>
+ <xsl:text>::getSize()));</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text> return get</xsl:text>
+ <xsl:value-of select='$type'/>
+ <xsl:text>(</xsl:text><xsl:value-of select='$offset'/>
+ <xsl:text> + nIndex * sizeof(</xsl:text>
+ <xsl:value-of select='$saltype'/>
+ <xsl:text>))</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>; }&#xa;</xsl:text>
+ </xsl:when>
+ <xsl:when test='$stereotype = "string"'>
+ rtl::OUString get_<xsl:value-of select='@name'/>() const { return getString(<xsl:value-of select='$offset'/>); }
+ </xsl:when>
+</xsl:choose>
+</xsl:template>
+
+<xsl:template match='UML:Attribute' mode='accessmembers'>
+ <xsl:text> </xsl:text>
+ <xsl:call-template name='saltype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select='.//UML:DataType/@xmi.idref'/>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:text> get_</xsl:text>
+ <xsl:value-of select='@name'/>
+ <xsl:text>() const { return m</xsl:text>
+ <xsl:value-of select='@name'/>
+ <xsl:text>; }
+ </xsl:text>
+</xsl:template>
+
+
+<xsl:template match="UML:Operation" mode="declsOperations">
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype/@xmi.idref = "array"'>
+ <xsl:variable name="elementtype">
+ <xsl:value-of select='.//UML:Parameter.type/UML:Class/@xmi.idref'/>
+ </xsl:variable>
+ <xsl:variable name="parentclass">
+ <xsl:call-template name='parenttype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select='$elementtype'/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name='saltype'>
+ <xsl:call-template name='saltype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select='$elementtype'/>
+ </xsl:with-param>
+ <xsl:with-param name='parenttype'>
+ <xsl:value-of select='$parentclass'/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ /**
+ Array: <xsl:value-of select="@name"/>
+ ElementType: <xsl:value-of select="$elementtype"/>(<xsl:value-of select="$parentclass"/>)
+ */
+
+ sal_uInt32 get_<xsl:value-of select="@name"/>_count();
+
+ <xsl:text> </xsl:text><xsl:value-of select='$saltype'/> get_<xsl:value-of select="@name"/>(sal_uInt32 pos);
+ </xsl:when>
+ <xsl:when test='.//UML:Stereotype/@xmi.idref = "attribute" or .//UML:Stereotype/@xmi.idref = "binary"'>
+ <xsl:variable name="returntype_">
+ <xsl:value-of select='.//UML:Parameter.type/UML:Class/@xmi.idref'/>
+ </xsl:variable>
+ <xsl:variable name="returntype">
+ <xsl:call-template name='saltype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select='$returntype_'/>
+ </xsl:with-param>
+ <xsl:with-param name='parenttype'>
+ <xsl:call-template name='parenttype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select='$returntype_'/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ /**
+ Operation: <xsl:value-of select="@name"/>
+ */
+
+ <xsl:text> </xsl:text>
+ <xsl:value-of select='$returntype'/>
+ <xsl:text> get_</xsl:text>
+ <xsl:value-of select='@name'/>
+ <xsl:text>();&#xa;</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="UML:Attribute" mode='declmembers'>
+ <xsl:text> </xsl:text>
+ <xsl:call-template name='saltype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select='.//UML:DataType/@xmi.idref'/>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:text> m</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>;
+ </xsl:text>
+</xsl:template>
+
+<xsl:template name='idtoqname'>
+ <xsl:param name='id'/>NS_<xsl:value-of select='substring-before($id, ":")'/>::LN_<xsl:value-of select='substring-after($id, ":")'/>
+</xsl:template>
+
+<xsl:template name='saltype'>
+ <xsl:param name='type'/>
+ <xsl:param name='parenttype'/>
+ <xsl:choose>
+ <xsl:when test="$type='U8'">sal_uInt8</xsl:when>
+ <xsl:when test="$type='S8'">sal_Int8</xsl:when>
+ <xsl:when test="$type='U16'">sal_uInt16</xsl:when>
+ <xsl:when test="$type='S16'">sal_Int16</xsl:when>
+ <xsl:when test="$type='U32'">sal_uInt32</xsl:when>
+ <xsl:when test="$type='S32'">sal_Int32</xsl:when>
+ <xsl:when test="$type='String'">rtl::OUString</xsl:when>
+ <xsl:when test="$type='Value'">WW8Value::Pointer_t</xsl:when>
+ <xsl:when test="$type='Binary'">WW8BinaryObjReference::Pointer_t</xsl:when>
+ <xsl:when test="$parenttype=''">
+ <xsl:value-of select="$type"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>writerfilter::Reference &lt; </xsl:text>
+ <xsl:value-of select='$parenttype'/>
+ <xsl:text> &gt;::Pointer_t</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name='typetype'>
+ <xsl:param name='type'/><xsl:choose>
+ <xsl:when test="$type='U8'">simple</xsl:when>
+ <xsl:when test="$type='S8'">simple</xsl:when>
+ <xsl:when test="$type='U16'">simple</xsl:when>
+ <xsl:when test="$type='S16'">simple</xsl:when>
+ <xsl:when test="$type='U32'">simple</xsl:when>
+ <xsl:when test="$type='S32'">simple</xsl:when>
+ <xsl:when test="$type='String'">string</xsl:when>
+ <xsl:when test="$type='Value'">value</xsl:when>
+ <xsl:otherwise>complex</xsl:otherwise>
+</xsl:choose>
+</xsl:template>
+
+<xsl:template match="UML:Attribute" mode="valuetype">
+ <xsl:variable name='type'>
+ <xsl:value-of select='.//UML:DataType/@xmi.idref'/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test='$type="U8"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="S8"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="U16"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="S16"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="U32"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="S32"'>WW8IntValue</xsl:when>
+ <xsl:otherwise>WW8PropertiesValue</xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="UML:Class" mode="dffrecord">
+ <xsl:variable name="classname">
+ <xsl:text>Dff</xsl:text><xsl:value-of select="@name"/>
+ </xsl:variable>
+ <xsl:text>
+/**
+ Automaticallay generated class:
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>&#xa;
+*/&#xa;
+class </xsl:text>
+<xsl:value-of select="$classname"/>
+<xsl:text> : public DffRecord
+{
+public:
+ typedef boost::shared_ptr &lt; </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text> &gt; Pointer_t;&#xa;
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>(WW8StructBase * pParent, sal_uInt32 nOffset, sal_uInt32 nCount)&#xa;
+ : DffRecord(pParent, nOffset, nCount) {}&#xa;
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>(WW8Stream &amp; rStream, sal_uInt32 nOffset, sal_uInt32 nCount)&#xa;
+ : DffRecord(rStream, nOffset, nCount) {}&#xa;
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>(DffRecord &amp; rRecord)&#xa;
+ : DffRecord(rRecord) {}
+ virtual ~</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>();
+
+ virtual void resolveLocal(Properties &amp; props);</xsl:text>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref = "resolvenoauto"]'>
+ void resolveNoAuto(Properties &amp; rHandler);
+ </xsl:if>
+ <xsl:text>
+ virtual void dump(OutputWithDepth &lt; string &gt; &amp; o) const;
+
+ virtual DffRecord * clone() const { return new </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>(*this); }&#xa;
+ virtual string getType() const
+ {
+ return "</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>";
+ }
+
+ virtual string getName() const { return ""; }
+ </xsl:text>
+ <xsl:apply-templates select="." mode="declsProperties"/>
+ <xsl:text>
+};
+</xsl:text>
+</xsl:template>
+
+
+<xsl:template match="UML:Class" mode="dffopt">
+<!--
+ <xsl:variable name="classname">
+ <xsl:text>DffOpt</xsl:text><xsl:value-of select="@name"/>
+ </xsl:variable>
+ <xsl:text>
+/**
+ Automaticallay generated class:
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>&#xa;
+*/&#xa;
+class </xsl:text>
+<xsl:value-of select="$classname"/>
+<xsl:text> : public WW8FOPTE
+{
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>(WW8FOPTE &amp; rOpt) : WW8FOPTE(rOpt) {}
+
+ virtual string getName() const
+ {
+ return "</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>";
+ }&#xa;</xsl:text>
+
+ <xsl:text>
+};
+</xsl:text>
+-->
+</xsl:template>
+
+<xsl:template name="parenttype">
+ <xsl:param name='type'/>
+ <xsl:for-each select='/XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/UML:Generalization[UML:Generalization.child/UML:Class/@xmi.idref=$type]'>
+ <xsl:value-of select='./UML:Generalization.parent/UML:Class/@xmi.idref'/>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match="UML:Attribute" mode="returntype">
+ <xsl:variable name='type'>
+ <xsl:value-of select="UML:StructuralFeature.type/UML:DataType/@xmi.idref"/>
+ </xsl:variable>
+ <xsl:call-template name='saltype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select="$type"/>
+ </xsl:with-param>
+ <xsl:with-param name='parenttype'>
+ <xsl:call-template name='parenttype'>
+ <xsl:with-param name='type'><xsl:value-of select='$type'/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+</xsl:template>
+
+</xsl:stylesheet>
+
diff --git a/writerfilter/source/doctok/resourcesimpl.xsl b/writerfilter/source/doctok/resourcesimpl.xsl
new file mode 100644
index 000000000000..75684e76c95e
--- /dev/null
+++ b/writerfilter/source/doctok/resourcesimpl.xsl
@@ -0,0 +1,855 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+<xsl:output method="text" />
+
+ <xsl:include href="resourcetools.xsl"/>
+
+<xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;resources.hxx&gt;
+
+#ifndef WW8_OUTPUT_WITH_DEPTH
+#include &lt;WW8OutputWithDepth.hxx&gt;
+#endif
+
+#ifndef INCLUDED_SPRMIDS_HXX
+#include &lt;sprmids.hxx&gt;
+#endif
+
+namespace writerfilter {
+namespace doctok {
+
+extern WW8OutputWithDepth output;
+
+using namespace ::std;
+</xsl:text>
+ <xsl:apply-templates select='/XMI/XMI.content/UML:Model' mode="sprmkind"/>
+ <xsl:apply-templates select='.//UML:Class' mode='class'/>
+ <xsl:apply-templates select='//UML:Model' mode='createsprmprops'/>
+ <xsl:apply-templates select='/XMI/XMI.content/UML:Model'
+ mode='createsprmbinary'/>
+ <xsl:apply-templates select='/XMI/XMI.content/UML:Model'
+ mode='createdffrecord'/>
+ <xsl:apply-templates select='/XMI/XMI.content/UML:Model' mode='ww8foptename'/>
+ <xsl:apply-templates select='/XMI/XMI.content/UML:Model'
+ mode='isbooleandffopt'/>
+ <xsl:text>
+}}
+</xsl:text>
+</xsl:template>
+
+ <xsl:template match="UML:Class" mode="class">
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "ww8resource"]'>
+ <xsl:apply-templates select="." mode="ww8resource">
+ <xsl:with-param name="classprefix">WW8</xsl:with-param>
+ <xsl:with-param name="needsinit">true</xsl:with-param>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "dffrecord"]'>
+ <xsl:apply-templates select="." mode="ww8resource">
+ <xsl:with-param name="classprefix">Dff</xsl:with-param>
+ </xsl:apply-templates>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="UML:Class" mode="ww8resource">
+ <xsl:param name="classprefix"/>
+ <xsl:param name="needsinit"/>
+ <xsl:variable name="parentresource">
+ <xsl:call-template name='parenttype'>
+ <xsl:with-param name='type'><xsl:value-of select='@xmi.id'/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name='size_'><xsl:value-of select='./*/UML:TaggedValue[./*/UML:TagDefinition/@xmi.idref="size"]/UML:TaggedValue.dataValue'/></xsl:variable>
+ <xsl:variable name='size'>
+ <xsl:choose>
+ <xsl:when test='$size_ != ""'><xsl:value-of select='$size_'/></xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="classname"><xsl:value-of select="$classprefix"/><xsl:value-of select="@name"/></xsl:variable>
+ <xsl:variable name="superclass">
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "ww8sprm"]'>WW8PropertyImpl</xsl:when>
+ <xsl:otherwise>WW8StructBase</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="surroundclass">
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "ww8sprm"]'>WW8PropertyImpl</xsl:when>
+ <xsl:otherwise>WW8StructBase</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:text>
+/*
+ Automatically generated class: </xsl:text><xsl:value-of select="@name"/><xsl:text>
+ </xsl:text>
+ <xsl:for-each select='./UML:ModelElement.stereotype/UML:Stereotype'>
+ <xsl:text>
+ Stereotype </xsl:text>
+ <xsl:value-of select='@xmi.idref'/>
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+ Parent Resource: </xsl:text>
+ <xsl:value-of select="$parentresource"/>
+ <xsl:text>
+ Size: </xsl:text><xsl:value-of select='$size'/>
+ <xsl:text>
+*/
+ </xsl:text>
+
+ <xsl:value-of select="$classname"/>
+ <xsl:text>::~</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>()
+ {
+ }
+ </xsl:text>
+ <xsl:if test="$needsinit='true'">
+ <xsl:text>
+ void </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>::init()
+ {
+ </xsl:text>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="withmembers"]'>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"]'>
+ <xsl:apply-templates select='.' mode='initmembers'/>
+ </xsl:for-each>
+ </xsl:if>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="initimpl"]'>
+ <xsl:text> initImpl();&#xa;</xsl:text>
+ </xsl:if>
+ <xsl:text>
+ }&#xa;</xsl:text>
+ </xsl:if>
+
+ <xsl:choose>
+ <xsl:when test='$parentresource="Properties"'>
+ <xsl:apply-templates select="." mode="resolveProperties">
+ <xsl:with-param name="classname" select="$classname"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:when test='$parentresource="Table"'>
+ <xsl:apply-templates select="." mode="resolveTable">
+ <xsl:with-param name="classname" select="$classname"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ </xsl:choose>
+
+ </xsl:template>
+
+ <xsl:template match="UML:Class" mode="resolveProperties">
+ <xsl:param name="classname"/>
+ <xsl:variable name="rHandler">
+ <xsl:choose>
+ <xsl:when test='.//UML:Attribute[@name!="reserved"]'>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref != "noresolve"]'>
+ <xsl:text>rHandler</xsl:text>
+ </xsl:if>
+ </xsl:when>
+ <xsl:when test='.//UML:Operation[@name!="reserved"]'>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref != "noresolve"]'>
+ <xsl:text>rHandler</xsl:text>
+ </xsl:if>
+ </xsl:when>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "resolvenoauto"]'>
+ <xsl:text>rHandler</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:text>
+ void </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:choose>
+ <xsl:when test=".//UML:Stereotype[@xmi.idref='ww8resource']">
+ <xsl:text>::resolve(Properties &amp; </xsl:text>
+ <xsl:value-of select="$rHandler"/>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:when test=".//UML:Stereotype[@xmi.idref='dffrecord']">
+ <xsl:text>::resolveLocal(Properties &amp; </xsl:text>
+ <xsl:value-of select="$rHandler"/>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:text>
+ {</xsl:text>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref="debug"]'>
+ <xsl:text>
+ dump(output);</xsl:text>
+ </xsl:if>
+ <xsl:text>
+ try
+ {</xsl:text>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noresolve"]'>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select='.' mode='resolveAttribute'/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:for-each select='.//UML:Operation[@name!="reserved"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noresolve"]'>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select='.' mode='resolveOperation'/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+
+ <xsl:if test='.//UML:Stereotype[@xmi.idref = "resolvenoauto"]'>
+ resolveNoAuto(rHandler);
+ </xsl:if>
+ <xsl:text>
+ } catch (Exception &amp; e) {
+ clog &lt;&lt; e.getText() &lt;&lt; endl;
+ }
+ }
+
+ void
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>::dump(OutputWithDepth &lt; string &gt; &amp; o) const
+ {
+ o.addItem("&lt;dump type='</xsl:text>
+ <xsl:value-of select='@name'/>
+ <xsl:text>'&gt;");
+
+ WW8StructBase::dump(o);</xsl:text>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"]'>
+ <xsl:apply-templates select='.' mode='dumpAttribute'/>
+ </xsl:for-each>
+
+ <xsl:text>
+ o.addItem("&lt;/dump&gt;");
+ }&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match='UML:Attribute' mode='resolveAttribute'>
+ <xsl:variable name="attrid">
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="attrid"]'>
+ <xsl:value-of select='UML:TaggedValue.dataValue'/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="qname">
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'>
+ <xsl:value-of select='$attrid'/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype/@xmi.idref = "attribute"'>
+ <xsl:text>
+ {
+ WW8Value::Pointer_t pVal = createValue(get_</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>());
+ rHandler.attribute(</xsl:text>
+ <xsl:value-of select="$qname"/>
+ <xsl:text>, *pVal);
+ }</xsl:text>
+ </xsl:when>
+ <xsl:when test='.//UML:Stereotype/@xmi.idref = "array"'>
+ <xsl:variable name="elementtype">
+ <xsl:value-of select='.//UML:DataType/@xmi.idref'/>
+ </xsl:variable>
+ <xsl:variable name="parentclass">
+ <xsl:call-template name='parenttype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select='$elementtype'/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:text>
+ {
+ sal_uInt32 nCount = get_</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>_count();
+ for (sal_uInt32 n = 0; n &lt; nCount; ++n)
+ {
+ WW8Value::Pointer_t pVal = createValue(get_</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>(n));
+ rHandler.attribute(</xsl:text>
+ <xsl:value-of select="$qname"/>
+ <xsl:text>, *pVal);
+ }
+ }</xsl:text>
+ </xsl:when>
+ <xsl:when test='.//UML:Stereotype/@xmi.idref = "string"'>
+ <xsl:text>
+ {
+ WW8StringValue aVal(get_</xsl:text>
+ <xsl:value-of select='@name'/>
+ <xsl:text>());
+ rHandler.attribute(</xsl:text>
+ <xsl:value-of select="$qname"/>
+ <xsl:text>, aVal);
+ }</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match='UML:Attribute' mode='dumpAttribute'>
+ <xsl:variable name="type">
+ <xsl:value-of select='.//UML:DataType/@xmi.idref'/>
+ </xsl:variable><xsl:variable name="saltype">
+ <xsl:call-template name='saltype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select='$type'/>
+ </xsl:with-param>
+ <xsl:with-param name='parenttype'>
+ <xsl:apply-templates select="." mode="parentclass"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="name" select="@name"/>
+ <xsl:for-each select=".//UML:Stereotype">
+ <xsl:choose>
+ <xsl:when test='@xmi.idref = "attributeremainder"'/>
+ <xsl:when test='@xmi.idref = "array"'>
+ <xsl:text>
+ {
+ sal_uInt32 nCount = get_</xsl:text>
+ <xsl:value-of select='$name'/>
+ <xsl:text>_count();
+
+ for (sal_uInt32 n = 0; n &lt; nCount; ++n)
+ {
+ writerfilter::dump(o, "</xsl:text>
+ <xsl:value-of select='$name'/>
+ <xsl:text>", get_</xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>(n));
+ }
+ }</xsl:text>
+ </xsl:when>
+ <xsl:when test='@xmi.idref = "string"'>
+ <xsl:text>
+ {
+ WW8StringValue aVal(get_</xsl:text>
+ <xsl:value-of select='$name'/>
+ <xsl:text>());
+
+ o.addItem("</xsl:text>
+ <xsl:value-of select='$name'/>
+ <xsl:text>" &lt;&lt; "=\"" + aVal.toString() + "\"");
+ }</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>
+ writerfilter::dump(o, "</xsl:text>
+ <xsl:value-of select='$name'/>
+ <xsl:text>", get_</xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>());</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="resolveOperationAttribute">
+ <xsl:variable name="opid">
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="opid"]'>
+ <xsl:value-of select='./UML:TaggedValue.dataValue'/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:text>
+ {
+ WW8Value::Pointer_t pVal = createValue(get_</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>());
+ rHandler.attribute(</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='$opid'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>, *pVal);
+ }&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="resolveOperationArray">
+ <xsl:variable name="elementtype">
+ <xsl:value-of select='.//UML:Parameter.type/@xmi.idref'/>
+ </xsl:variable>
+ <xsl:variable name="opid">
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="opid"]'>
+ <xsl:value-of select='./UML:TaggedValue.dataValue'/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="parentclass">
+ <xsl:for-each select='/XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/UML:Generalization[UML:Generalization.child/UML:Class/@xmi.idref=$elementtype]'>
+ <xsl:value-of select='./UML:Generalization.parent/UML:Class/@xmi.idref'/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:text>
+ {
+ sal_uInt32 nCount = get_</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>_count();
+
+ for (sal_uInt32 n = 0; n &lt; nCount; ++n)
+ {
+ WW8Value::Pointer_t pVal = createValue(get_</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>(n));
+ rHandler.attribute(</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='$opid'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>, *pVal);
+ }
+ }&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="resolveOperationBinary">
+ <xsl:text>
+ {
+ WW8BinaryObjReference::Pointer_t pRef(get_</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>());
+ WW8Sprm aSprm(pRef);
+
+ rHandler.sprm(aSprm);
+ }&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match='UML:Operation' mode='resolveOperation'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype/@xmi.idref = "attribute"'>
+ <xsl:call-template name="resolveOperationAttribute"/>
+ </xsl:when>
+ <xsl:when test='.//UML:Stereotype/@xmi.idref = "array"'>
+ <xsl:call-template name="resolveOperationArray"/>
+ </xsl:when>
+ <xsl:when test='.//UML:Stereotype/@xmi.idref = "binary"'>
+ <xsl:call-template name="resolveOperationBinary"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="UML:Class" mode="resolveTable">
+ <xsl:param name="classname"/>
+ <xsl:text>void </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>::resolve(Table &amp; rHandler)
+ {
+ sal_uInt32 nCount = getEntryCount();
+ writerfilter::Reference&lt; Properties &gt;::Pointer_t pEntry;
+ for (sal_uInt32 n = 0; n &lt; nCount; ++n)
+ {
+ pEntry = getEntry(n);
+
+ if (pEntry.get() != 0x0)
+ {
+ try
+ {
+ rHandler.entry(n, pEntry);
+ }
+ catch (ExceptionOutOfBounds e)
+ {
+ }
+ }
+ }
+ }
+ </xsl:text>
+ </xsl:template>
+
+<xsl:template match='UML:Model' mode='createsprmprops'>
+writerfilter::Reference &lt; Properties &gt; ::Pointer_t createSprmProps
+(WW8PropertyImpl &amp; rProp)
+{
+ writerfilter::Reference &lt; Properties &gt; ::Pointer_t pResult;
+
+ switch (rProp.getId())
+ {
+<xsl:for-each select='.//UML:Class[.//UML:Stereotype/@xmi.idref="ww8sprm" and .//UML:Stereotype/@xmi.idref="ww8resource"]'>
+ case <xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="sprmcode"]//UML:TaggedValue.dataValue'/>:
+ pResult = writerfilter::Reference &lt; Properties &gt; ::Pointer_t(new WW8<xsl:value-of select='@name'/>(rProp, 0, rProp.getCount()));
+
+ break;
+</xsl:for-each>
+ default:
+ break;
+ }
+
+ return pResult;
+}
+</xsl:template>
+
+<xsl:template match='UML:Model' mode='createsprmbinary'>
+<xsl:text>
+writerfilter::Reference &lt; BinaryObj &gt; ::Pointer_t createSprmBinary
+(WW8PropertyImpl &amp; rProp)
+{
+ writerfilter::Reference &lt; BinaryObj &gt; ::Pointer_t pResult;
+
+ switch (rProp.getId())
+ {&#xa;
+ // warnings....
+ case 0:
+ break;
+</xsl:text>
+<xsl:for-each select='.//UML:Class[.//UML:Stereotype/@xmi.idref="ww8sprmbinary" and .//UML:Stereotype/@xmi.idref="ww8resource"]'>
+ case <xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="sprmcode"]//UML:TaggedValue.dataValue'/>:
+ {
+ WW8<xsl:value-of select='@name'/>::Pointer_t p(new WW8<xsl:value-of select='@name'/>(rProp, 0, rProp.getCount()));
+
+ pResult = p->getBinary();
+ }
+
+ break;
+</xsl:for-each>
+<xsl:text>
+ default:
+ break;
+ }
+
+ return pResult;
+}
+</xsl:text>
+</xsl:template>
+
+<!-- returns optname of UML:Class -->
+<xsl:template name="optname">
+ <xsl:for-each select="./UML:ModelElement.taggedValue/UML:TaggedValue">
+ <xsl:if test=".//UML:TagDefinition/@xmi.idref='optname'">
+ <xsl:value-of select="./UML:TaggedValue.dataValue"/>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="ww8foptenamecase">
+ <xsl:text>
+ case </xsl:text>
+ <xsl:variable name="optname">
+ <xsl:call-template name="optname"/>
+ </xsl:variable>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="$optname"/>
+ </xsl:call-template>
+ <xsl:text>:
+ result = rtl::OUString::createFromAscii("</xsl:text>
+ <xsl:value-of select="$optname"/>
+ <xsl:text>");
+ break;</xsl:text>
+</xsl:template>
+
+<xsl:template name="getdffoptname">
+ <xsl:text>
+rtl::OUString getDffOptName(sal_uInt32 nPid)
+{
+ rtl::OUString result;
+
+ switch (nPid)
+ {&#xa;</xsl:text>
+ <xsl:for-each select="./UML:Class[./UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='dffopt']">
+ <xsl:call-template name="ww8foptenamecase"/>
+ </xsl:for-each>
+ <xsl:text>
+ default:
+ break;
+ }
+
+ return result;
+}</xsl:text>
+</xsl:template>
+
+<xsl:template name="ww8foptegetvalue">
+ <xsl:text>
+WW8Value::Pointer_t WW8FOPTE::get_value()
+{
+ WW8Value::Pointer_t pResult;
+
+ switch (get_pid())
+ {</xsl:text>
+ <xsl:for-each select=".//UML:Class[./UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='dffopt']">
+ <xsl:variable name="type">
+ <xsl:for-each select="./UML:ModelElement.taggedValue/UML:TaggedValue[./UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='type']">
+ <xsl:value-of select="UML:TaggedValue.dataValue"/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:if test="$type != 'unknown'">
+ <xsl:variable name="typetype">
+ <xsl:call-template name="typetype">
+ <xsl:with-param name="type" select="$type"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="valuetype">
+ <xsl:call-template name="valuetype">
+ <xsl:with-param name="type" select="$type"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:text>
+ case </xsl:text>
+ <xsl:for-each select="./UML:ModelElement.taggedValue/UML:TaggedValue[./UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='dffid']">
+ <xsl:value-of select="UML:TaggedValue.dataValue"/>
+ </xsl:for-each>
+ <xsl:variable name="optname">
+ <xsl:for-each select="./UML:ModelElement.taggedValue/UML:TaggedValue[./UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='optname']">
+ <xsl:value-of select="UML:TaggedValue.dataValue"/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="$optname"/>
+ </xsl:call-template>
+ <xsl:text>:</xsl:text>
+ <xsl:choose>
+ <xsl:when test="./UML:ModelElement.taggedValue/UML:TaggedValue[./UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='isbool']">
+ <xsl:text>
+ pResult = createValue(getU32(0x2) &amp; 1);</xsl:text>
+ </xsl:when>
+ <xsl:when test="$typetype='complex'">
+ <xsl:text>
+ pResult = createValue(new </xsl:text>
+ <xsl:value-of select="$valuetype"/>
+ <xsl:text>(getU32(0x2)));</xsl:text>
+ </xsl:when>
+ <xsl:when test="$typetype='string'">
+ <xsl:text>
+ pResult = get_stringValue();&#xa;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>
+ pResult = createValue(getU32(0x2));</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>
+ break;</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>
+ default:
+ pResult = createValue(getU32(0x2));
+
+ break;
+ }
+
+ return pResult;
+}</xsl:text>
+</xsl:template>
+
+<xsl:template match='UML:Model/UML:Namespace.ownedElement' mode='ww8foptename'>
+ <xsl:text>
+rtl::OUString WW8FOPTE::get_name()
+{
+ return getDffOptName(get_pid());
+}</xsl:text>
+<xsl:call-template name="getdffoptname"/>
+<xsl:text>
+
+WW8Value::Pointer_t WW8FOPTE::get_stringValue()
+{
+ WW8Value::Pointer_t pResult;
+ DffOPT * pOpt = dynamic_cast &lt; DffOPT * &gt;(mpParent);
+ sal_uInt32 nExtraOffset = pOpt->get_extraoffset(mnIndex);
+ sal_uInt32 nExtraLength = pOpt->get_extraoffset(mnIndex + 1) - nExtraOffset;
+ pResult = createValue(mpParent->getString(nExtraOffset, nExtraLength / 2));
+
+ return pResult;
+}
+</xsl:text>
+<xsl:call-template name="ww8foptegetvalue"/>
+</xsl:template>
+
+<xsl:template match="UML:Model" mode="createdffrecord">
+<xsl:text>
+DffRecord * createDffRecord
+(WW8StructBase * pParent, sal_uInt32 nOffset, sal_uInt32 * pCount)
+{
+ DffRecord * pResult = NULL;
+ DffRecord aTmpRec(pParent, nOffset, 8);
+ sal_uInt32 nSize = aTmpRec.calcSize();
+
+ if (pCount != NULL)
+ *pCount = nSize;
+
+ switch (aTmpRec.getRecordType())
+ {&#xa;</xsl:text>
+ <xsl:for-each select='.//UML:Class[.//UML:Stereotype/@xmi.idref="dffrecord"]'>
+ <xsl:text> case </xsl:text>
+ <xsl:value-of select=".//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref='dffid']//UML:TaggedValue.dataValue"/>
+ <xsl:text>:
+ pResult = new Dff</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>(pParent, nOffset, nSize);
+
+ break;&#xa;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+ default:
+ pResult = new DffRecord(pParent, nOffset, nSize);
+
+ break;
+ }
+
+ return pResult;
+}
+
+DffRecord * createDffRecord
+(WW8Stream &amp; rStream, sal_uInt32 nOffset, sal_uInt32 * pCount)
+{
+ DffRecord * pResult = NULL;
+ DffRecord aTmpRec(rStream, nOffset, 8);
+ sal_uInt32 nSize = aTmpRec.calcSize();
+
+ if (pCount != NULL)
+ *pCount = nSize;
+
+ switch (aTmpRec.getRecordType())
+ {&#xa;</xsl:text>
+ <xsl:for-each select='.//UML:Class[.//UML:Stereotype/@xmi.idref="dffrecord"]'>
+ <xsl:text> case </xsl:text>
+ <xsl:value-of select=".//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref='dffid']//UML:TaggedValue.dataValue"/>
+ <xsl:text>:
+ pResult = new Dff</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>(rStream, nOffset, nSize);
+
+ break;&#xa;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+ default:
+ pResult = new DffRecord(rStream, nOffset, nSize);
+
+ break;
+ }
+
+ return pResult;
+}
+ </xsl:text>
+</xsl:template>
+
+<xsl:template match="UML:Attribute" mode="initmembers">
+ <xsl:variable name="stereotype"><xsl:value-of select=".//UML:Stereotype/@xmi.idref"/></xsl:variable>
+ <xsl:variable name="offset_"><xsl:value-of select='translate(.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="offset"]/UML:TaggedValue.dataValue, "ABCDEFX", "abcdefx")'/></xsl:variable>
+ <xsl:variable name="offset">
+ <xsl:if test='$offset_ != "" and not(starts-with($offset_, "0x"))'>0x</xsl:if>
+ <xsl:value-of select='$offset_'/>
+ </xsl:variable>
+ <xsl:variable name="shift"><xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="shift"]/UML:TaggedValue.dataValue'/></xsl:variable>
+ <xsl:variable name="mask_"><xsl:value-of select='translate(.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="mask"]/UML:TaggedValue.dataValue, "ABCDEFX", "abcdefx")'/></xsl:variable>
+ <xsl:variable name="mask">
+ <xsl:if test='$mask_ != "" and not(starts-with($mask_, "0x"))'>0x</xsl:if>
+ <xsl:value-of select='$mask_'/>
+ </xsl:variable>
+ <xsl:variable name="type"><xsl:value-of select='.//UML:DataType/@xmi.idref'/></xsl:variable><xsl:variable name="saltype">
+ <xsl:call-template name='saltype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select='$type'/>
+ </xsl:with-param>
+ </xsl:call-template>
+</xsl:variable>
+
+/*
+<xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="comment"]/UML:TaggedValue.dataValue'/>
+
+Name: <xsl:value-of select='@name'/>(<xsl:value-of select='$stereotype'/>)
+Offset: <xsl:value-of select='$offset'/>
+Mask: <xsl:value-of select='$mask'/>
+Shift: <xsl:value-of select='$shift'/>
+*/
+
+<xsl:choose>
+ <xsl:when test='$stereotype = "attribute"'>
+ m<xsl:value-of select='@name'/> = (get<xsl:value-of select="$type"/>(<xsl:value-of select="$offset"/>)<xsl:if test="string-length($mask)>0"> &amp; <xsl:value-of select="$mask"/></xsl:if>)<xsl:if test="$shift>0"> &gt;&gt; <xsl:value-of select="$shift"/></xsl:if>;
+ </xsl:when>
+ <xsl:when test='$stereotype = "array"'>
+ <xsl:text>
+ {
+ sal_uInt32 nCount = </xsl:text>
+ <xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref = "arraycount"]/UML:TaggedValue.dataValue'/>
+ <xsl:text>;
+ m</xsl:text>
+ <xsl:value-of select='@name'/>
+ <xsl:text> = new </xsl:text><xsl:value-of select='$saltype'/><xsl:text>[nCount];
+
+ for (sal_uInt32 n = 0; n &lt; nCount; ++n)
+ m</xsl:text><xsl:value-of select='@name'/><xsl:text>[n] = get</xsl:text>
+ <xsl:value-of select='$type'/>
+ <xsl:text>(</xsl:text>
+ <xsl:value-of select='$offset'/>
+ <xsl:text> + nIndex * sizeof(</xsl:text>
+ <xsl:value-of select='$saltype'/>
+ <xsl:text>));
+ }
+ </xsl:text>
+ </xsl:when>
+ <xsl:when test='$stereotype = "string"'>
+ m<xsl:value-of select='@name'/> = getString(<xsl:value-of select='$offset'/>)
+ </xsl:when>
+</xsl:choose>
+</xsl:template>
+
+<xsl:template match="UML:Model" mode="isbooleandffopt">
+<xsl:text>
+bool isBooleanDffOpt(sal_uInt32 nId)
+{
+ bool bResult = false;
+
+ switch (nId)
+ {&#xa;</xsl:text>
+ <xsl:for-each select='.//UML:Class[.//UML:Stereotype/@xmi.idref="dffopt"]'>
+ <xsl:if test=".//UML:TagDefinition[@xmi.idref='isbool']">
+ <xsl:text> case </xsl:text>
+ <xsl:variable name="optname">
+ <xsl:value-of select=".//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref='optname']//UML:TaggedValue.dataValue"/>
+ </xsl:variable>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="$optname"/>
+ </xsl:call-template>
+ <xsl:text>:&#xa;</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>
+ bResult = true;
+ break;
+
+ default:
+ break;
+ }
+
+ return bResult;
+}
+</xsl:text>
+</xsl:template>
+
+</xsl:stylesheet>
+
diff --git a/writerfilter/source/doctok/resourcetools.xsl b/writerfilter/source/doctok/resourcetools.xsl
new file mode 100644
index 000000000000..75d124a3eedb
--- /dev/null
+++ b/writerfilter/source/doctok/resourcetools.xsl
@@ -0,0 +1,566 @@
+<!--
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+<xsl:output method="text" />
+
+<xsl:template name='idtoqname'>
+ <xsl:param name='id'/>
+ <xsl:text>NS_</xsl:text>
+ <xsl:value-of select='substring-before($id, ":")'/>
+ <xsl:text>::LN_</xsl:text>
+ <xsl:value-of select='substring-after($id, ":")'/>
+</xsl:template>
+
+<xsl:template name="parenttype">
+ <xsl:param name='type'/>
+ <xsl:for-each select='/XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/UML:Generalization[UML:Generalization.child/UML:Class/@xmi.idref=$type]'>
+ <xsl:value-of select='./UML:Generalization.parent/UML:Class/@xmi.idref'/>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name='saltype'>
+ <xsl:param name='type'/>
+ <xsl:param name='parenttype'/>
+ <xsl:choose>
+ <xsl:when test="$type='U8'">sal_uInt8</xsl:when>
+ <xsl:when test="$type='S8'">sal_Int8</xsl:when>
+ <xsl:when test="$type='U16'">sal_uInt16</xsl:when>
+ <xsl:when test="$type='S16'">sal_Int16</xsl:when>
+ <xsl:when test="$type='U32'">sal_uInt32</xsl:when>
+ <xsl:when test="$type='S32'">sal_Int32</xsl:when>
+ <xsl:when test="$type='String'">rtl::OUString</xsl:when>
+ <xsl:otherwise>
+ <xsl:text>writerfilter::Reference &lt; </xsl:text>
+ <xsl:value-of select='$parenttype'/>
+ <xsl:text> &gt;::Pointer_t</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name='typetype'>
+ <xsl:param name='type'/><xsl:choose>
+ <xsl:when test="$type='U8'">simple</xsl:when>
+ <xsl:when test="$type='S8'">simple</xsl:when>
+ <xsl:when test="$type='U16'">simple</xsl:when>
+ <xsl:when test="$type='S16'">simple</xsl:when>
+ <xsl:when test="$type='U32'">simple</xsl:when>
+ <xsl:when test="$type='S32'">simple</xsl:when>
+ <xsl:when test="$type='String'">string</xsl:when>
+ <xsl:when test="$type='Binary'">binary</xsl:when>
+ <xsl:otherwise>complex</xsl:otherwise>
+</xsl:choose>
+</xsl:template>
+
+<xsl:template name="valuetype">
+ <xsl:param name="type"/>
+ <xsl:choose>
+ <xsl:when test='$type="U8"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="S8"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="U16"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="S16"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="U32"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="S32"'>WW8IntValue</xsl:when>
+ <xsl:otherwise>WW8PropertiesValue</xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="UML:Attribute" mode="valuetype">
+ <xsl:call-template name="valuetype">
+ <xsl:with-param name="type" select='.//UML:DataType/@xmi.idref'/>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template name="qnametostrattrs">
+ <xsl:text>
+ /* Attributes */</xsl:text>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"]'>
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="attrid"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noresolve"]'>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>
+ mMap[</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>] = "</xsl:text>
+ <xsl:value-of select='.//UML:TaggedValue.dataValue'/>
+ <xsl:text>";</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="qnametostrops">
+ <xsl:text>
+ /* Operations */</xsl:text>
+ <xsl:for-each select='.//UML:Operation[@name!="reserved"]'>
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="opid"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noresolve"]'>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>
+ mMap[</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>] = "</xsl:text>
+ <xsl:value-of select='.//UML:TaggedValue.dataValue'/>
+ <xsl:text>";</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="qnametostrclasses">
+ <xsl:text>
+ /* Classes */</xsl:text>
+ <xsl:for-each select='.//UML:Class[@name!="reserved"]'>
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="classid"]'>
+ <xsl:text>
+ mMap[</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>] = "</xsl:text>
+ <xsl:value-of select='.//UML:TaggedValue.dataValue'/>
+ <xsl:text>";</xsl:text>
+ </xsl:for-each>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match='UML:Model' mode='qnametostr'>
+ <xsl:text>
+void QNameToString::init_doctok()
+{</xsl:text>
+<xsl:call-template name="qnametostrattrs"/>
+<xsl:call-template name="qnametostrops"/>
+<xsl:call-template name="qnametostrclasses"/>
+<xsl:text>
+}
+</xsl:text>
+</xsl:template>
+
+<xsl:key name="ids" match='UML:Attribute[@name!="reserved"]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="attrid"]|UML:Operation[@name!="reserved"]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="opid"]' use=".//UML:TaggedValue.dataValue"/>
+
+<xsl:template match="UML:Model" mode="qnametostrfunc">
+ <xsl:text>
+string qnameToString(sal_uInt32 nToken)
+{
+ string sResult;
+
+ switch (nToken)
+ {
+ // Attributes</xsl:text>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="attrid"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noresolve"]'>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="generate-id(key('ids', .//UML:TaggedValue.dataValue)[1])=generate-id(.)">
+ <xsl:text>
+ case </xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>:
+ sResult = "</xsl:text>
+ <xsl:value-of select='.//UML:TaggedValue.dataValue'/>
+ <xsl:text>";
+ break;</xsl:text>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>
+ // Operations</xsl:text>
+ <xsl:for-each select='.//UML:Operation[@name!="reserved"]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="opid"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noresolve"]'>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="generate-id(key('ids', .//UML:TaggedValue.dataValue)[1])=generate-id(.)">
+ <xsl:text>
+ case </xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>:
+ sResult = "</xsl:text>
+ <xsl:value-of select='.//UML:TaggedValue.dataValue'/>
+ <xsl:text>";
+ break;</xsl:text>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>
+ // Classes:</xsl:text>
+ <xsl:for-each select='.//UML:Class[@name!="reserved"]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="classid"]'>
+ <xsl:text>
+ case </xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>:
+ sResult = "</xsl:text>
+ <xsl:value-of select='.//UML:TaggedValue.dataValue'/>
+ <xsl:text>";
+ break;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+ default:
+ ;
+ }
+
+ return sResult;
+}</xsl:text>
+</xsl:template>
+
+<xsl:template match='UML:Model' mode='sprmcodetostr'>
+<xsl:text>
+SprmIdToString::SprmIdToString()
+{</xsl:text>
+<xsl:variable name='tmp'>map &lt; sal_uInt32, string &gt; </xsl:variable>
+<xsl:for-each select='.//UML:Class[.//UML:Stereotype/@xmi.idref="ww8sprm"]'>
+ <xsl:variable name="sprmconst">
+ <xsl:call-template name="sprmCodeOfClass"/>
+ </xsl:variable>
+ <xsl:text>
+ mMap[</xsl:text>
+ <xsl:value-of select="$sprmconst"/>
+ <xsl:text>] = "</xsl:text>
+ <xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="sprmid"]//UML:TaggedValue.dataValue'/>
+ <xsl:text>";</xsl:text>
+</xsl:for-each>
+<xsl:text>
+}
+</xsl:text>
+</xsl:template>
+
+<xsl:key name="classes-with-kind" match="UML:TagDefinition[@xmi.idref='kind']"
+ use="ancestor::UML:TaggedValue/UML:TaggedValue.dataValue"/>
+
+<xsl:template name="sprmCodeOfClass">
+ <xsl:variable name="tmp">
+ <xsl:text>sprm:</xsl:text>
+ <xsl:value-of select="substring-after(@name, 'sprm')"/>
+ </xsl:variable>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="$tmp"/>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template name="sprmkindcase">
+ <xsl:param name="kind"/>
+ <xsl:for-each select="key('classes-with-kind', $kind)/ancestor::UML:Class">
+ <xsl:text>
+ case </xsl:text>
+ <xsl:call-template name="sprmCodeOfClass"/>
+ <xsl:text>:</xsl:text>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match="UML:Model" mode='sprmkind'>
+<xsl:text>
+Sprm::Kind SprmKind(sal_uInt32 sprmCode)
+{
+ Sprm::Kind nResult = Sprm::UNKNOWN;
+
+ switch(sprmCode)
+ {</xsl:text>
+ <xsl:call-template name="sprmkindcase">
+ <xsl:with-param name="kind">paragraph</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+ nResult = Sprm::PARAGRAPH;
+ break;</xsl:text>
+ <xsl:call-template name="sprmkindcase">
+ <xsl:with-param name="kind">character</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+ nResult = Sprm::CHARACTER;
+ break;</xsl:text>
+ <xsl:call-template name="sprmkindcase">
+ <xsl:with-param name="kind">table</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+ nResult = Sprm::TABLE;
+ break;</xsl:text>
+ <xsl:text>
+ default:
+ break;
+ }
+
+ return nResult;
+}
+</xsl:text>
+</xsl:template>
+
+<xsl:template match="UML:Model" mode='sprmids'>
+ <xsl:text>
+namespace NS_sprm { </xsl:text>
+ <xsl:for-each select=".//UML:Class[.//UML:Stereotype/@xmi.idref='ww8sprm']">
+ <xsl:variable name="sprmcode">
+ <xsl:value-of select=".//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref = 'sprmcode']/UML:TaggedValue.dataValue"/>
+ </xsl:variable>
+ <xsl:variable name="sprmcodelower">
+ <xsl:value-of select="translate($sprmcode, 'ABCDEF', 'abcdef')"/>
+ </xsl:variable>
+ <xsl:variable name="sprmidname">
+ <xsl:text>LN_</xsl:text>
+ <xsl:value-of select="substring-after(@name, 'sprm')"/>
+ </xsl:variable>
+ <xsl:text>
+ const sal_uInt16 </xsl:text>
+ <xsl:value-of select="$sprmidname"/>
+ <xsl:text> = </xsl:text>
+ <xsl:value-of select="$sprmcodelower"/>
+ <xsl:text>;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+}
+</xsl:text>
+</xsl:template>
+
+<xsl:template match="UML:Model" mode='sprmidsed'>
+ <xsl:text>#!/bin/sh
+ cat $1 \&#xa;</xsl:text>
+ <xsl:for-each select=".//UML:Class[.//UML:Stereotype/@xmi.idref='ww8sprm']">
+ <xsl:variable name="sprmcode">
+ <xsl:value-of select=".//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref = 'sprmcode']/UML:TaggedValue.dataValue"/>
+ </xsl:variable>
+ <xsl:variable name="sprmcodelower">
+ <xsl:value-of select="translate($sprmcode, 'ABCDEF', 'abcdef')"/>
+ </xsl:variable>
+ <xsl:variable name="sprmidname">
+ <xsl:text>NS_sprm::LN_</xsl:text>
+ <xsl:value-of select="substring-after(@name, 'sprm')"/>
+ </xsl:variable>
+ <xsl:text>| sed "s/</xsl:text>
+<xsl:value-of select="$sprmcode"/>
+<xsl:text>/</xsl:text>
+<xsl:value-of select="$sprmidname"/>
+<xsl:text>/g" \&#xa;</xsl:text>
+ <xsl:text>| sed "s/</xsl:text>
+<xsl:value-of select="$sprmcodelower"/>
+<xsl:text>/</xsl:text>
+<xsl:value-of select="$sprmidname"/>
+<xsl:text>/g" \&#xa;</xsl:text>
+ </xsl:for-each>
+ <xsl:text> | cat&#xa;</xsl:text>
+</xsl:template>
+
+<xsl:template match="UML:Model" mode="sprmidstoxml">
+ <xsl:text>
+void sprmidsToXML(::std::ostream &amp; out)
+{
+ </xsl:text>
+ <xsl:for-each select=".//UML:Class[.//UML:Stereotype/@xmi.idref='ww8sprm']">
+ <xsl:variable name="sprmcode">
+ <xsl:value-of select=".//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref = 'sprmcode']/UML:TaggedValue.dataValue"/>
+ </xsl:variable>
+ <xsl:variable name="sprmcodelower">
+ <xsl:value-of select="translate($sprmcode, 'ABCDEF', 'abcdef')"/>
+ </xsl:variable>
+ <xsl:variable name="sprmidname">
+ <xsl:text>sprm:</xsl:text>
+ <xsl:value-of select="substring-after(@name, 'sprm')"/>
+ </xsl:variable>
+ <xsl:text>
+ out &lt;&lt; "&lt;theid name=\"</xsl:text>
+ <xsl:value-of select="$sprmidname"/>
+ <xsl:text>\"&gt;</xsl:text>
+ <xsl:value-of select="$sprmcodelower"/>
+ <xsl:text>&lt;/theid&gt;" &lt;&lt; endl;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+}
+ </xsl:text>
+</xsl:template>
+
+<xsl:template match="UML:Model" mode='sprmreplace'>
+ <xsl:for-each select=".//UML:Class[.//UML:Stereotype/@xmi.idref='ww8sprm']">
+ <xsl:variable name="pattern">
+ <xsl:value-of select=".//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref = 'sprmcode']/UML:TaggedValue.dataValue"/>
+ </xsl:variable>
+ <xsl:variable name="lowerpattern">
+ <xsl:value-of select="translate($pattern, 'ABCDEF', 'abcdef')"/>
+ </xsl:variable>
+ <xsl:variable name="upperpattern">
+ <xsl:value-of select="translate($pattern, 'abcdef', 'ABCDEF')"/>
+ </xsl:variable>
+ <xsl:variable name="tmp">
+ <xsl:text>sprm:</xsl:text>
+ <xsl:value-of select="substring-after(@name, 'sprm')"/>
+ </xsl:variable>
+ <xsl:variable name="constname">
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="$tmp"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:text>
+sed "s/</xsl:text>
+ <xsl:value-of select="$lowerpattern"/>
+ <xsl:text>/</xsl:text>
+ <xsl:value-of select="$constname"/>
+ <xsl:text>/g" &lt; $1 > $1.out &amp;&amp; mv $1.out $1 </xsl:text>
+ <xsl:text>
+sed "s/</xsl:text>
+ <xsl:value-of select="$upperpattern"/>
+ <xsl:text>/</xsl:text>
+ <xsl:value-of select="$constname"/>
+ <xsl:text>/g" &lt; $1 > $1.out &amp;&amp; mv $1.out $1 </xsl:text>
+ </xsl:for-each>
+ <xsl:text>&#xa;</xsl:text>
+</xsl:template>
+
+<!-- Key all attributes with the same name and same value -->
+<xsl:key name="same-valued-tagged-data"
+ match="UML:TaggedValue.dataValue" use="." />
+
+<xsl:template name="analyzerdoctokidsattrs">
+ <xsl:text>
+ /* Attributes */</xsl:text>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"]'>
+ <xsl:if test='count(.//UML:Stereotype[@xmi.idref="noqname"]) = 0'>
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="attrid"]'>
+ <xsl:choose>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <xsl:otherwise>
+ <xsl:text>
+ out &lt;&lt; "&lt;theid name=\"</xsl:text>
+ <xsl:value-of select=".//UML:TaggedValue.dataValue"/>
+ <xsl:text>\"&gt;</xsl:text>
+ <xsl:value-of select='10000 + position()'/>
+ <xsl:text>&lt;/theid&gt;" &lt;&lt; endl;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="analyzerdoctokidsops">
+ <xsl:text>
+ /* Operations */</xsl:text>
+ <xsl:for-each select='.//UML:Operation[@name!="reserved"]'>
+ <xsl:if test='count(.//UML:Stereotype[@xmi.idref="noqname"]) = 0'>
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="opid"]'>
+ <xsl:choose>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <xsl:otherwise>
+ <xsl:text>
+ out &lt;&lt; "&lt;theid name=\"</xsl:text>
+ <xsl:value-of select=".//UML:TaggedValue.dataValue"/>
+ <xsl:text>\"&gt;</xsl:text>
+ <xsl:value-of select='20000 + position()'/>
+ <xsl:text>&lt;/theid&gt;" &lt;&lt; endl;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="analyzerdoctokidsclasses">
+ <xsl:text>
+ /* clases */</xsl:text>
+ <xsl:for-each select='.//UML:Class[@name!="reserved"]'>
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="classid"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noqname"]'/>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <xsl:otherwise>
+ <xsl:text>
+ out &lt;&lt; "&lt;theid name=\"</xsl:text>
+ <xsl:value-of select=".//UML:TaggedValue.dataValue"/>
+ <xsl:text>\"&gt;</xsl:text>
+ <xsl:value-of select='30000 + position()'/>
+ <xsl:text>&lt;/theid&gt;" &lt;&lt; endl;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match="UML:Model" mode="analyzerdoctokids">
+ <xsl:text>
+void doctokidsToXML(::std::ostream &amp; out)
+{</xsl:text>
+<xsl:call-template name="analyzerdoctokidsattrs"/>
+<xsl:call-template name="analyzerdoctokidsops"/>
+<xsl:call-template name="analyzerdoctokidsclasses"/>
+<xsl:text>
+}
+ </xsl:text>
+</xsl:template>
+
+ <xsl:template name="licenseheader">
+ <xsl:text>
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * http://www.openoffice.org/license.html
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+/*
+
+ THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT!
+
+*/
+&#xa;</xsl:text>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/writerfilter/source/doctok/sprmcodetostr.xsl b/writerfilter/source/doctok/sprmcodetostr.xsl
new file mode 100644
index 000000000000..98cf02919959
--- /dev/null
+++ b/writerfilter/source/doctok/sprmcodetostr.xsl
@@ -0,0 +1,39 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+<xsl:output method="text" />
+
+<xsl:include href="resourcetools.xsl"/>
+
+<xsl:template match="/">
+ <xsl:apply-templates select=".//UML:Model" mode="sprmcodetostr"/>
+</xsl:template>
+</xsl:stylesheet>
diff --git a/writerfilter/source/doctok/sprmids.xsl b/writerfilter/source/doctok/sprmids.xsl
new file mode 100644
index 000000000000..2ca8826e94dc
--- /dev/null
+++ b/writerfilter/source/doctok/sprmids.xsl
@@ -0,0 +1,82 @@
+<!--
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+
+ <xsl:include href="resourcetools.xsl"/>
+
+ <xsl:template match="/">
+ <out>
+ <xsl:text>
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * http://www.openoffice.org/license.html
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+/*
+
+ THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT!
+
+*/
+#ifndef INCLUDED_SPRMIDS
+#define INCLUDED_SPRMIDS
+
+#include &lt;sal/types.h&gt;
+
+</xsl:text>
+<xsl:apply-templates select=".//UML:Model" mode="sprmids"/>
+<xsl:text>
+
+#endif // INCLUDED_SPRMIDS&#xa;</xsl:text>
+ </out>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/writerfilter/source/doctok/tidyxmi.xsl b/writerfilter/source/doctok/tidyxmi.xsl
new file mode 100644
index 000000000000..6371fb05b696
--- /dev/null
+++ b/writerfilter/source/doctok/tidyxmi.xsl
@@ -0,0 +1,120 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+<xsl:output indent="yes"/>
+<xsl:template match="/">
+<XMI xmi.version="1.2">
+ <XMI.header>
+ <XMI.documentation/>
+ </XMI.header>
+ <XMI.content>
+ <UML:Model xmlns:UML="org.omg.xmi.namespace.UML" name="WW8Document" >
+ <UML:Namespace.ownedElement>
+ <xsl:apply-templates select="XMI/XMI.content/UML:Model/UML:Namespace.ownedElement"/>
+ </UML:Namespace.ownedElement>
+ </UML:Model>
+ </XMI.content>
+</XMI>
+
+</xsl:template>
+
+<xsl:template match="UML:Namespace.ownedElement">
+ <xsl:comment>Stereotypes </xsl:comment>
+ <xsl:copy-of select="UML:Stereotype"/>
+ <xsl:comment>Stereotypes</xsl:comment>
+ <xsl:comment>Datatypes </xsl:comment>
+ <xsl:copy-of select="UML:DataType"/>
+ <xsl:comment>Datatypes</xsl:comment>
+ <xsl:comment>Tag definitions </xsl:comment>
+ <xsl:copy-of select="UML:TagDefinition"/>
+ <xsl:comment>Tag definitions </xsl:comment>
+ <xsl:comment>Classes without stereotype</xsl:comment>
+ <xsl:apply-templates select="UML:Class[count(./UML:ModelElement.stereotype) = 0]"/>
+ <xsl:comment>Classes without stereotype</xsl:comment>
+ <xsl:comment>Resources</xsl:comment>
+ <xsl:copy-of select="UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='resource']"/>
+ <xsl:comment>Resources</xsl:comment>
+ <xsl:comment>WW8 resources</xsl:comment>
+ <xsl:apply-templates select="UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8resource' and count(UML:ModelElement.stereotype/UML:Stereotype[@xmi.idref='ww8sprm']) = 0]"/>
+ <xsl:comment>WW8 resources</xsl:comment>
+ <xsl:comment>SPRMS</xsl:comment>
+ <xsl:apply-templates select="UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8sprm']"/>
+ <xsl:comment>SPRMS</xsl:comment>
+ <xsl:comment>DFFS</xsl:comment>
+ <xsl:apply-templates select="UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='dffrecord']"/>
+ <xsl:comment>DFFS</xsl:comment>
+ <xsl:comment>DFFOPT</xsl:comment>
+ <xsl:apply-templates select="UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='dffopt']"/>
+ <xsl:comment>DFFOPT</xsl:comment>
+</xsl:template>
+
+<xsl:key name="generalization" match="UML:Generalization"
+ use="UML:Generalization.child/UML:Class/@xmi.idref"/>
+
+<xsl:template match="UML:Class[count(UML:ModelElement.stereotype) = 0]">
+ <xsl:variable name="theid"><xsl:value-of select="@xmi.id"/></xsl:variable>
+ <xsl:comment>Class <xsl:value-of select="@xmi.id"/></xsl:comment>
+ <xsl:copy-of select="."/>
+ <xsl:copy-of select="key('generalization', $theid)"/>
+ <xsl:comment>Class <xsl:value-of select="@xmi.id"/></xsl:comment>
+</xsl:template>
+
+<xsl:template match="UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8resource' and count(UML:ModelElement.stereotype/UML:Stereotype[@xmi.idref='ww8sprm']) = 0]">
+ <xsl:variable name="theid"><xsl:value-of select="@xmi.id"/></xsl:variable>
+ <xsl:comment>Class <xsl:value-of select="@xmi.id"/></xsl:comment>
+ <xsl:copy-of select="."/>
+ <xsl:copy-of select="key('generalization', $theid)"/>
+ <xsl:comment>Class <xsl:value-of select="@xmi.id"/></xsl:comment>
+</xsl:template>
+
+<xsl:template match="UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8sprm']">
+ <xsl:variable name="theid"><xsl:value-of select="@xmi.id"/></xsl:variable>
+ <xsl:comment>SPRM <xsl:value-of select="@xmi.id"/></xsl:comment>
+ <xsl:copy-of select="."/>
+ <xsl:copy-of select="key('generalization', $theid)"/>
+ <xsl:comment>SPRM <xsl:value-of select="@xmi.id"/></xsl:comment>
+</xsl:template>
+
+<xsl:template match="UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='dffrecord']">
+ <xsl:variable name="theid"><xsl:value-of select="@xmi.id"/></xsl:variable>
+ <xsl:comment>DFF <xsl:value-of select="@xmi.id"/></xsl:comment>
+ <xsl:copy-of select="."/>
+ <xsl:copy-of select="key('generalization', $theid)"/>
+ <xsl:comment>DFF <xsl:value-of select="@xmi.id"/></xsl:comment>
+</xsl:template>
+
+<xsl:template match="UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='dffopt']">
+ <xsl:variable name="theid"><xsl:value-of select="@xmi.id"/></xsl:variable>
+ <xsl:comment>DFFOPT <xsl:value-of select="@xmi.id"/></xsl:comment>
+ <xsl:copy-of select="."/>
+ <xsl:copy-of select="key('generalization', $theid)"/>
+ <xsl:comment>DFFOPT <xsl:value-of select="@xmi.id"/></xsl:comment>
+</xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/doctok/util.hxx b/writerfilter/source/doctok/util.hxx
new file mode 100644
index 000000000000..df534b28a5bc
--- /dev/null
+++ b/writerfilter/source/doctok/util.hxx
@@ -0,0 +1,57 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_UTIL_HXX
+#define INCLUDED_UTIL_HXX
+
+#include <string>
+#include <iostream>
+
+namespace writerfilter {
+namespace doctok {
+using namespace ::std;
+
+/**
+ Assertion
+
+ @bTest if false the assertion is raised
+*/
+void util_assert(bool bTest);
+
+/**
+ Print string to ostream.
+
+ Printable characters are passed without change. Non-printable
+ characters are replaced by '.'.
+
+ @param o ostream for output
+ @param str string to print
+ */
+void printBytes(ostream & o, const string & str);
+}}
+
+#endif // INCLUDED_UTIL_HXX
diff --git a/writerfilter/source/doctok/xmigen.el b/writerfilter/source/doctok/xmigen.el
new file mode 100644
index 000000000000..6f0f35524d76
--- /dev/null
+++ b/writerfilter/source/doctok/xmigen.el
@@ -0,0 +1,127 @@
+(defun insert-uml-class-begin (name)
+ (insert "<UML:Class xmi.id=\"" name "\" name=\"" name "\">\n"))
+
+(defun insert-uml-class-end ()
+ (insert "</UML:Class>\n"))
+
+(defun insert-uml-stereotype (stereotype)
+ (insert "<UML:ModelElement.stereotype>\n")
+ (insert " <UML:Stereotype xmi.idref=\"" stereotype "\"/>\n")
+ (insert "</UML:ModelElement.stereotype>\n"))
+
+
+(defun insert-uml-taggedvalue (value type)
+ (insert " <UML:ModelElement.taggedValue>\n")
+ (insert " <UML:TaggedValue>\n")
+ (insert " <UML:TaggedValue.dataValue>" value "</UML:TaggedValue.dataValue>\n")
+ (insert " <UML:TaggedValue.type>\n")
+ (insert " <UML:TagDefinition xmi.idref=\"" type "\"/>\n")
+ (insert " </UML:TaggedValue.type>\n")
+ (insert " </UML:TaggedValue>\n")
+ (insert " </UML:ModelElement.taggedValue>\n"))
+
+(defun insert-uml-attribute (type name offset bits mask shift comment attrid)
+ (insert "<UML:Classifier.feature>\n")
+ (insert " <UML:Attribute name=\"" name "\">\n")
+ (insert-uml-taggedvalue comment "comment")
+ (insert-uml-taggedvalue offset "offset")
+ (insert-uml-taggedvalue bits "bits")
+ (insert-uml-taggedvalue mask "mask")
+ (insert-uml-taggedvalue shift "shift")
+ (insert-uml-taggedvalue attrid "attrid")
+ (insert " <UML:StructuralFeature.type>\n")
+ (insert " <UML:DataType xmi.idref=\"" type "\"/>\n")
+ (insert " </UML:StructuralFeature.type>\n")
+ (insert " <UML:ModelElement.stereotype>\n")
+ (insert " <UML:Stereotype xmi.idref=\"attribute\"/>\n")
+ (insert " </UML:ModelElement.stereotype>\n")
+ (insert " </UML:Attribute>\n")
+ (insert "</UML:Classifier.feature>\n"))
+
+(defun insert-uml-attribute-array (type arraycount name offset bits mask shift comment attrid)
+ (insert "<UML:Classifier.feature>\n")
+ (insert " <UML:Attribute name=\"" name "\">\n")
+ (insert-uml-taggedvalue comment "comment")
+ (insert-uml-taggedvalue offset "offset")
+ (insert-uml-taggedvalue bits "bits")
+ (insert-uml-taggedvalue mask "mask")
+ (insert-uml-taggedvalue shift "shift")
+ (insert-uml-taggedvalue attrid "attrid")
+ (insert-uml-taggedvalue arraycount "arraycount")
+ (insert " <UML:StructuralFeature.type>\n")
+ (insert " <UML:DataType xmi.idref=\"" type "\"/>\n")
+ (insert " </UML:StructuralFeature.type>\n")
+ (insert " <UML:ModelElement.stereotype>\n")
+ (insert " <UML:Stereotype xmi.idref=\"array\"/>\n")
+ (insert " </UML:ModelElement.stereotype>\n")
+ (insert " </UML:Attribute>\n")
+ (insert "</UML:Classifier.feature>\n"))
+
+(defun insert-uml-operation (type name comment opid)
+ (insert "<UML:Classifier.feature>\n")
+ (insert " <UML:Operation name=\"" name "\" >\n")
+ (insert-uml-taggedvalue opid "opid")
+ (insert " <UML:BehavioralFeature.parameter>\n")
+ (insert " <UML:Parameter kind=\"return\" name=\"return\">\n")
+ (insert " <UML:Parameter.type>\n")
+ (insert " <UML:Class xmi.idref=\"" type "\" />\n")
+ (insert " </UML:Parameter.type>\n")
+ (insert " </UML:Parameter>\n")
+ (insert " </UML:BehavioralFeature.parameter>\n")
+ (insert " <UML:ModelElement.stereotype>\n")
+ (insert " <UML:Stereotype xmi.idref=\"attribute\" />\n")
+ (insert " </UML:ModelElement.stereotype>\n")
+ (insert " </UML:Operation>\n")
+ (insert "</UML:Classifier.feature>\n"))
+
+(defun insert-uml-binary (name comment opid)
+ (insert "<UML:Classifier.feature>\n")
+ (insert " <UML:Operation name=\"" name "\" >\n")
+ (insert-uml-taggedvalue opid "opid")
+ (insert " <UML:BehavioralFeature.parameter>\n")
+ (insert " <UML:Parameter kind=\"return\" name=\"return\">\n")
+ (insert " <UML:Parameter.type>\n")
+ (insert " <UML:Class xmi.idref=\"Binary\" />\n")
+ (insert " </UML:Parameter.type>\n")
+ (insert " </UML:Parameter>\n")
+ (insert " </UML:BehavioralFeature.parameter>\n")
+ (insert " <UML:ModelElement.stereotype>\n")
+ (insert " <UML:Stereotype xmi.idref=\"binary\" />\n")
+ (insert " </UML:ModelElement.stereotype>\n")
+ (insert " </UML:Operation>\n")
+ (insert "</UML:Classifier.feature>\n"))
+
+(defun insert-uml-operation-array (type name comment opid)
+ (insert "<UML:Classifier.feature>\n")
+ (insert " <UML:Operation name=\"" name "\" >\n")
+ (insert-uml-taggedvalue opid "opid")
+ (insert " <UML:BehavioralFeature.parameter>\n")
+ (insert " <UML:Parameter kind=\"return\" name=\"return\">\n")
+ (insert " <UML:Parameter.type>\n")
+ (insert " <UML:Class xmi.idref=\"" type "\" />\n")
+ (insert " </UML:Parameter.type>\n")
+ (insert " </UML:Parameter>\n")
+ (insert " </UML:BehavioralFeature.parameter>\n")
+ (insert " <UML:ModelElement.stereotype>\n")
+ (insert " <UML:Stereotype xmi.idref=\"array\" />\n")
+ (insert " </UML:ModelElement.stereotype>\n")
+ (insert " </UML:Operation>\n")
+ (insert "</UML:Classifier.feature>\n"))
+
+(defun insert-uml-generalization (parent child)
+ (insert "<UML:Generalization isSpecification=\"false\" xmi.id=\"" child "-" parent "\" >\n")
+ (insert " <UML:Generalization.child>\n")
+ (insert " <UML:Class xmi.idref=\"" child "\" />\n")
+ (insert " </UML:Generalization.child>\n")
+ (insert " <UML:Generalization.parent>\n")
+ (insert " <UML:Class xmi.idref=\"" parent "\" />\n")
+ (insert " </UML:Generalization.parent>\n")
+ (insert "</UML:Generalization>\n"))
+
+(defun insert-uml-sprm (name sprmcode kind)
+ (insert-uml-class-begin name)
+ (insert-uml-stereotype "ww8sprm")
+ (insert-uml-taggedvalue sprmcode "sprmcode")
+ (insert-uml-taggedvalue (concat "rtf:" name) "sprmid")
+ (insert-uml-taggedvalue kind "kind")
+ (insert-uml-class-end))
diff --git a/writerfilter/source/doctok/xmistat.xsl b/writerfilter/source/doctok/xmistat.xsl
new file mode 100644
index 000000000000..842e0f0361e2
--- /dev/null
+++ b/writerfilter/source/doctok/xmistat.xsl
@@ -0,0 +1,37 @@
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+<xsl:output indent="yes"/>
+<xsl:template match="/">
+ <xsl:for-each select="//UML:Class[@xmi.id]">
+ <xsl:value-of select="@xmi.id"/>
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:for-each>
+ <xsl:value-of select="count(//UML:Class)"/>
+</xsl:template>
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/doctok/xmitocpp b/writerfilter/source/doctok/xmitocpp
new file mode 100755
index 000000000000..ec06b400eb80
--- /dev/null
+++ b/writerfilter/source/doctok/xmitocpp
@@ -0,0 +1,34 @@
+#!/bin/tcsh
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+
+xalan -xsl qnametostr.xsl -in resources.xmi > qnametostr.tmp
+xalan -xsl sprmcodetostr.xsl -in resources.xmi > sprmcodetostr.tmp
+xalan -xsl resources.xsl -in resources.xmi > resources.hxx
+xalan -xsl resourcesimpl.xsl -in resources.xmi > resources.cxx
+xalan -xsl resourceids.xsl -in resources.xmi > ../../inc/doctok/resourceids.hxx
+xalan -xsl sprmids.xsl -in resources.xmi > ../../inc/resourcemodel/sprmids.hxx
diff --git a/writerfilter/source/filter/ImportFilter.cxx b/writerfilter/source/filter/ImportFilter.cxx
new file mode 100644
index 000000000000..46b5563f3b80
--- /dev/null
+++ b/writerfilter/source/filter/ImportFilter.cxx
@@ -0,0 +1,245 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <osl/diagnose.h>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <comphelper/mediadescriptor.hxx>
+#include <oox/core/filterdetect.hxx>
+#include <dmapper/DomainMapper.hxx>
+#include <WriterFilter.hxx>
+#include <doctok/WW8Document.hxx>
+#include <ooxml/OOXMLDocument.hxx>
+#ifdef DEBUG_IMPORT
+#include <iostream>
+#include <osl/process.h>
+#endif
+
+#include <resourcemodel/TagLogger.hxx>
+using namespace ::rtl;
+using namespace ::com::sun::star;
+using ::comphelper::MediaDescriptor;
+
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Bool WriterFilter::filter( const uno::Sequence< beans::PropertyValue >& aDescriptor )
+ throw (uno::RuntimeException)
+{
+ if( m_xSrcDoc.is() )
+ {
+ uno::Reference< lang::XMultiServiceFactory > xMSF(m_xContext->getServiceManager(), uno::UNO_QUERY_THROW);
+ uno::Reference< uno::XInterface > xIfc( xMSF->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.DocxExport" ))), uno::UNO_QUERY_THROW);
+ if (!xIfc.is())
+ return sal_False;
+ uno::Reference< document::XExporter > xExprtr(xIfc, uno::UNO_QUERY_THROW);
+ uno::Reference< document::XFilter > xFltr(xIfc, uno::UNO_QUERY_THROW);
+ if (!xExprtr.is() || !xFltr.is())
+ return sal_False;
+ xExprtr->setSourceDocument(m_xSrcDoc);
+ return xFltr->filter(aDescriptor);
+ }
+ else if (m_xDstDoc.is())
+ {
+ MediaDescriptor aMediaDesc( aDescriptor );
+ OUString sFilterName = aMediaDesc.getUnpackedValueOrDefault( MediaDescriptor::PROP_FILTERNAME(), OUString() );
+
+ uno::Reference< io::XInputStream > xInputStream;
+ try
+ {
+ // use the oox.core.FilterDetect implementation to extract the decrypted ZIP package
+ uno::Reference< lang::XMultiServiceFactory > xFactory( m_xContext->getServiceManager(), uno::UNO_QUERY_THROW );
+ ::oox::core::FilterDetect aDetector( xFactory );
+ xInputStream = aDetector.extractUnencryptedPackage( aMediaDesc );
+ }
+ catch( uno::Exception& )
+ {
+ }
+
+ if ( !xInputStream.is() )
+ {
+ return sal_False;
+ }
+
+#ifdef DEBUG_ELEMENT
+ writerfilter::TagLogger::Pointer_t debugLogger
+ (writerfilter::TagLogger::getInstance("DEBUG"));
+ debugLogger->startDocument();
+
+ writerfilter::TagLogger::Pointer_t dmapperLogger
+ (writerfilter::TagLogger::getInstance("DOMAINMAPPER"));
+ dmapperLogger->startDocument();
+#endif
+
+ writerfilter::dmapper::SourceDocumentType eType =
+ (m_sFilterName.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "writer_MS_Word_2007" ) ) ||
+ m_sFilterName.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "writer_MS_Word_2007_Template" ) )) ?
+ writerfilter::dmapper::DOCUMENT_OOXML : writerfilter::dmapper::DOCUMENT_DOC;
+ writerfilter::Stream::Pointer_t pStream(new writerfilter::dmapper::DomainMapper(m_xContext, xInputStream, m_xDstDoc, eType));
+ //create the tokenizer and domain mapper
+ if( eType == writerfilter::dmapper::DOCUMENT_OOXML )
+ {
+ writerfilter::ooxml::OOXMLStream::Pointer_t pDocStream = writerfilter::ooxml::OOXMLDocumentFactory::createStream(m_xContext, xInputStream);
+ writerfilter::ooxml::OOXMLDocument::Pointer_t pDocument(writerfilter::ooxml::OOXMLDocumentFactory::createDocument(pDocStream));
+
+ 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);
+
+ pDocument->resolve(*pStream);
+ }
+ else
+ {
+ writerfilter::doctok::WW8Stream::Pointer_t pDocStream = writerfilter::doctok::WW8DocumentFactory::createStream(m_xContext, xInputStream);
+ writerfilter::doctok::WW8Document::Pointer_t pDocument(writerfilter::doctok::WW8DocumentFactory::createDocument(pDocStream));
+
+ pDocument->resolve(*pStream);
+ }
+
+#ifdef DEBUG_ELEMENT
+ writerfilter::TagLogger::dump("DEBUG");
+ debugLogger->endDocument();
+ writerfilter::TagLogger::dump("DOMAINMAPPER");
+ dmapperLogger->endDocument();
+#endif
+
+ return sal_True;
+ }
+ return sal_False;
+}
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void WriterFilter::cancel( ) throw (uno::RuntimeException)
+{
+}
+
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void WriterFilter::setTargetDocument( const uno::Reference< lang::XComponent >& xDoc )
+ throw (lang::IllegalArgumentException, uno::RuntimeException)
+{
+ m_xDstDoc = xDoc;
+}
+
+void WriterFilter::setSourceDocument( const uno::Reference< lang::XComponent >& xDoc )
+ throw (lang::IllegalArgumentException, uno::RuntimeException)
+{
+ m_xSrcDoc = xDoc;
+}
+
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void WriterFilter::initialize( const uno::Sequence< uno::Any >& aArguments ) throw (uno::Exception, uno::RuntimeException)
+{
+ uno::Sequence < beans::PropertyValue > aAnySeq;
+ sal_Int32 nLength = aArguments.getLength();
+ if ( nLength && ( aArguments[0] >>= aAnySeq ) )
+ {
+ const beans::PropertyValue * pValue = aAnySeq.getConstArray();
+ nLength = aAnySeq.getLength();
+ for ( sal_Int32 i = 0 ; i < nLength; i++)
+ {
+ if ( pValue[i].Name.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "Type" ) ) )
+ {
+ pValue[i].Value >>= m_sFilterName;
+ break;
+ }
+ }
+ }
+}
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+OUString WriterFilter_getImplementationName () throw (uno::RuntimeException)
+{
+ return OUString ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.WriterFilter" ) );
+}
+
+#define SERVICE_NAME1 "com.sun.star.document.ImportFilter"
+#define SERVICE_NAME2 "com.sun.star.document.ExportFilter"
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Bool WriterFilter_supportsService( const OUString& ServiceName ) throw (uno::RuntimeException)
+{
+ return (ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SERVICE_NAME1 ) ) ||
+ ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SERVICE_NAME1 ) ));
+}
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Sequence< OUString > WriterFilter_getSupportedServiceNames( ) throw (uno::RuntimeException)
+{
+ uno::Sequence < OUString > aRet(2);
+ OUString* pArray = aRet.getArray();
+ pArray[0] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME1 ) );
+ pArray[1] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME2 ) );
+ return aRet;
+}
+#undef SERVICE_NAME1
+#undef SERVICE_NAME2
+
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< uno::XInterface > WriterFilter_createInstance( const uno::Reference< uno::XComponentContext >& xContext)
+ throw( uno::Exception )
+{
+ return (cppu::OWeakObject*) new WriterFilter( xContext );
+}
+
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+OUString WriterFilter::getImplementationName( ) throw (uno::RuntimeException)
+{
+ return WriterFilter_getImplementationName();
+}
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Bool WriterFilter::supportsService( const OUString& rServiceName ) throw (uno::RuntimeException)
+{
+ return WriterFilter_supportsService( rServiceName );
+}
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Sequence< OUString > WriterFilter::getSupportedServiceNames( ) throw (uno::RuntimeException)
+{
+ return WriterFilter_getSupportedServiceNames();
+}
+
diff --git a/writerfilter/source/filter/WriterFilter.cxx b/writerfilter/source/filter/WriterFilter.cxx
new file mode 100644
index 000000000000..71a97d72f391
--- /dev/null
+++ b/writerfilter/source/filter/WriterFilter.cxx
@@ -0,0 +1,79 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _CPPUHELPER_IMPLEMENTATIONENTRY_
+#include <cppuhelper/implementationentry.hxx>
+#endif
+#include <WriterFilter.hxx>
+#include <WriterFilterDetection.hxx>
+
+using namespace ::rtl;
+using namespace ::cppu;
+using namespace ::com::sun::star;
+
+/*-- 22.02.2007 12:19:23---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+WriterFilter::WriterFilter( const uno::Reference< uno::XComponentContext >& rxContext) :
+ m_xContext( rxContext )
+{
+}
+/*-- 22.02.2007 12:19:23---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+WriterFilter::~WriterFilter()
+{
+}
+
+extern "C"
+{
+/* shared lib exports implemented with helpers */
+static struct ::cppu::ImplementationEntry s_component_entries [] =
+{
+ { WriterFilter_createInstance, WriterFilter_getImplementationName, WriterFilter_getSupportedServiceNames, ::cppu::createSingleComponentFactory, 0, 0 },
+ { WriterFilterDetection_createInstance, WriterFilterDetection_getImplementationName, WriterFilterDetection_getSupportedServiceNames, ::cppu::createSingleComponentFactory, 0, 0} ,
+ { 0, 0, 0, 0, 0, 0 } // terminate with NULL
+};
+
+void SAL_CALL component_getImplementationEnvironment(const sal_Char ** ppEnvTypeName, uno_Environment ** /*ppEnv*/ )
+{
+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
+}
+
+sal_Bool SAL_CALL component_writeInfo( ::com::sun::star::lang::XMultiServiceFactory * xMgr, ::com::sun::star::registry::XRegistryKey * xRegistry )
+{
+ return ::cppu::component_writeInfoHelper( xMgr, xRegistry, s_component_entries );
+}
+
+void * SAL_CALL component_getFactory(sal_Char const * implName, ::com::sun::star::lang::XMultiServiceFactory * xMgr, ::com::sun::star::registry::XRegistryKey * xRegistry )
+{
+ return ::cppu::component_getFactoryHelper(implName, xMgr, xRegistry, s_component_entries );
+}
+
+} //extern "C"
+
+
diff --git a/writerfilter/source/filter/WriterFilter.hxx b/writerfilter/source/filter/WriterFilter.hxx
new file mode 100644
index 000000000000..0d4cb7a3a711
--- /dev/null
+++ b/writerfilter/source/filter/WriterFilter.hxx
@@ -0,0 +1,104 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _WRITERFILTER_HXX
+#define _WRITERFILTER_HXX
+
+#include <com/sun/star/document/XFilter.hpp>
+#include <com/sun/star/document/XImporter.hpp>
+#include <com/sun/star/document/XExporter.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/xml/sax/XDocumentHandler.hpp>
+#include <cppuhelper/implbase5.hxx>
+#include <WriterFilterDllApi.hxx>
+
+class WRITERFILTER_DLLPUBLIC WriterFilter : public cppu::WeakImplHelper5
+<
+ com::sun::star::document::XFilter,
+ com::sun::star::document::XImporter,
+ com::sun::star::document::XExporter,
+ com::sun::star::lang::XInitialization,
+ com::sun::star::lang::XServiceInfo
+>
+{
+
+protected:
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext;
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > m_xSrcDoc, m_xDstDoc;
+ ::rtl::OUString m_sFilterName;
+ ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler > m_xHandler;
+
+
+public:
+ WriterFilter( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext);
+ virtual ~WriterFilter();
+
+ // XFilter
+ virtual sal_Bool SAL_CALL filter( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aDescriptor )
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL cancel( )
+ throw (::com::sun::star::uno::RuntimeException);
+
+ // XImporter
+ virtual void SAL_CALL setTargetDocument( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& xDoc )
+ throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
+
+ // XExporter
+ virtual void SAL_CALL setSourceDocument( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& xDoc )
+ throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
+
+ // XInitialization
+ virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments )
+ throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( )
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
+ throw (::com::sun::star::uno::RuntimeException);
+
+};
+
+
+::rtl::OUString WriterFilter_getImplementationName()
+ throw ( ::com::sun::star::uno::RuntimeException );
+
+sal_Bool SAL_CALL WriterFilter_supportsService( const ::rtl::OUString& ServiceName )
+ throw ( ::com::sun::star::uno::RuntimeException );
+
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL WriterFilter_getSupportedServiceNames( )
+ throw ( ::com::sun::star::uno::RuntimeException );
+
+::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL WriterFilter_createInstance(
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::uno::XComponentContext > &xContext)
+ throw( ::com::sun::star::uno::Exception );
+#endif
+
diff --git a/writerfilter/source/filter/WriterFilterDetection.cxx b/writerfilter/source/filter/WriterFilterDetection.cxx
new file mode 100644
index 000000000000..a712cc14fffa
--- /dev/null
+++ b/writerfilter/source/filter/WriterFilterDetection.cxx
@@ -0,0 +1,200 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <cppuhelper/implementationentry.hxx>
+#include <WriterFilterDetection.hxx>
+#include <comphelper/storagehelper.hxx>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <sot/storage.hxx>
+//#ifndef _SFXDOCFILE_HXX //todo: remove sfx2!
+//#include <sfx2/docfile.hxx>
+//#endif
+#include <unotools/ucbstreamhelper.hxx>
+
+using namespace ::rtl;
+using namespace ::cppu;
+using namespace ::com::sun::star;
+
+/*-- 22.02.2007 12:17:53---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+WriterFilterDetection::WriterFilterDetection(
+ const uno::Reference< uno::XComponentContext >& rxContext) :
+ m_xContext( rxContext )
+{
+}
+/*-- 22.02.2007 12:17:53---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+WriterFilterDetection::~WriterFilterDetection()
+{
+}
+/*-- 22.02.2007 12:11:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+OUString WriterFilterDetection_getImplementationName () throw (uno::RuntimeException)
+{
+ return OUString ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.WriterFilterDetector" ) );
+}
+
+#define SERVICE_NAME1 "com.sun.star.document.ExtendedTypeDetection"
+/*-- 22.02.2007 12:11:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+OUString WriterFilterDetection::detect( uno::Sequence< beans::PropertyValue >& rDescriptor )
+ throw( uno::RuntimeException )
+{
+ OUString sTypeName;
+ bool bWord = false;
+ sal_Int32 nPropertyCount = rDescriptor.getLength();
+ const beans::PropertyValue* pValues = rDescriptor.getConstArray();
+ rtl::OUString sURL;
+ uno::Reference < io::XStream > xStream;
+ uno::Reference < io::XInputStream > xInputStream;
+ for( sal_Int32 nProperty = 0; nProperty < nPropertyCount; ++nProperty )
+ {
+ if( pValues[nProperty].Name == OUString(RTL_CONSTASCII_USTRINGPARAM("TypeName")) )
+ rDescriptor[nProperty].Value >>= sTypeName;
+ else if( pValues[nProperty].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM ( "URL" )) )
+ pValues[nProperty].Value >>= sURL;
+ else if( pValues[nProperty].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM ( "Stream" )) )
+ pValues[nProperty].Value >>= xStream;
+ else if( pValues[nProperty].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM ( "InputStream" )) )
+ pValues[nProperty].Value >>= xInputStream;
+ }
+ bool bBinary = sTypeName.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "writer_MS_Word_97" )) ||
+ sTypeName.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "writer_MS_Word_97_Vorlage" ));
+
+ try
+ {
+ if(bBinary)
+ {
+ SvStream* pStream = ::utl::UcbStreamHelper::CreateStream( xInputStream );
+ if ( pStream && SotStorage::IsStorageFile(pStream) )
+
+ {
+ SotStorageRef xStg = new SotStorage( pStream, FALSE );
+
+ bool bTable2 = xStg->IsContained( rtl::OUString::createFromAscii("1Table" ));
+ SotStorageStreamRef xRef =
+
+ xStg->OpenSotStream(rtl::OUString::createFromAscii("WordDocument"),
+
+ STREAM_STD_READ | STREAM_NOCREATE );
+
+ if(bTable2 && xStg.Is())
+ {
+ xRef->Seek(2);
+ sal_Int16 nWord;
+ *xRef >> nWord;
+ //version detection
+ bWord = nWord >= 0x6a && nWord <= 0xc1;
+ }
+ }
+ }
+ else
+ {
+ uno::Reference< embed::XStorage > xDocStorage;
+ if( sURL.equalsAscii( "private:stream" ) )
+ xDocStorage = comphelper::OStorageHelper::GetStorageFromInputStream( xInputStream );
+ else
+ xDocStorage = comphelper::OStorageHelper::GetStorageFromURL(
+ sURL, embed::ElementModes::READ );
+ if( xDocStorage.is() )
+ {
+ uno::Sequence< ::rtl::OUString > aNames = xDocStorage->getElementNames();
+ const ::rtl::OUString* pNames = aNames.getConstArray();
+ for(sal_Int32 nName = 0; nName < aNames.getLength(); ++nName)
+ {
+ if(pNames[nName].equalsAsciiL(RTL_CONSTASCII_STRINGPARAM ( "word" )))
+ {
+ bWord = true;
+ if( !sTypeName.getLength() )
+ sTypeName = ::rtl::OUString(
+ RTL_CONSTASCII_STRINGPARAM( "writer_MS_Word_2007" ), RTL_TEXTENCODING_ASCII_US);
+ break;
+ }
+ }
+ }
+ }
+ }
+ catch(const uno::Exception&)
+ {
+ OSL_ASSERT("exception while opening storage");
+ }
+ if( !bWord )
+ sTypeName = ::rtl::OUString();
+ return sTypeName;
+}
+/*-- 22.02.2007 12:11:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Bool WriterFilterDetection_supportsService( const OUString& ServiceName ) throw (uno::RuntimeException)
+{
+ return (ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SERVICE_NAME1 ) ) );
+}
+/*-- 22.02.2007 12:11:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Sequence< OUString > WriterFilterDetection_getSupportedServiceNames( ) throw (uno::RuntimeException)
+{
+ uno::Sequence < OUString > aRet(1);
+ OUString* pArray = aRet.getArray();
+ pArray[0] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME1 ) );
+ return aRet;
+}
+#undef SERVICE_NAME1
+/*-- 22.02.2007 12:11:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< uno::XInterface > WriterFilterDetection_createInstance( const uno::Reference< uno::XComponentContext >& xContext)
+ throw( uno::Exception )
+{
+ return (cppu::OWeakObject*) new WriterFilterDetection( xContext );
+}
+/*-- 22.02.2007 12:11:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+OUString WriterFilterDetection::getImplementationName( ) throw (uno::RuntimeException)
+{
+ return WriterFilterDetection_getImplementationName();
+}
+/*-- 22.02.2007 12:11:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Bool WriterFilterDetection::supportsService( const OUString& rServiceName ) throw (uno::RuntimeException)
+{
+ return WriterFilterDetection_supportsService( rServiceName );
+}
+/*-- 22.02.2007 12:11:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Sequence< OUString > WriterFilterDetection::getSupportedServiceNames( ) throw (uno::RuntimeException)
+{
+ return WriterFilterDetection_getSupportedServiceNames();
+}
+
diff --git a/writerfilter/source/filter/WriterFilterDetection.hxx b/writerfilter/source/filter/WriterFilterDetection.hxx
new file mode 100644
index 000000000000..a5e8149d68c2
--- /dev/null
+++ b/writerfilter/source/filter/WriterFilterDetection.hxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _WRITERFILTER_DETECTION_HXX
+#define _WRITERFILTER_DETECTION_HXX
+
+#include <com/sun/star/document/XExtendedFilterDetection.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <cppuhelper/implbase2.hxx>
+#include <WriterFilterDllApi.hxx>
+
+class WRITERFILTER_DLLPUBLIC WriterFilterDetection : public cppu::WeakImplHelper2
+<
+ com::sun::star::document::XExtendedFilterDetection,
+ com::sun::star::lang::XServiceInfo
+>
+{
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext;
+
+public:
+ WriterFilterDetection(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext);
+ virtual ~WriterFilterDetection();
+
+ //XExtendedFilterDetection
+ virtual ::rtl::OUString SAL_CALL detect( com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >& Descriptor )
+ throw( com::sun::star::uno::RuntimeException );
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( )
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
+ throw (::com::sun::star::uno::RuntimeException);
+};
+
+::rtl::OUString WriterFilterDetection_getImplementationName()
+ throw ( ::com::sun::star::uno::RuntimeException );
+
+sal_Bool SAL_CALL WriterFilterDetection_supportsService( const ::rtl::OUString& ServiceName )
+ throw ( ::com::sun::star::uno::RuntimeException );
+
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL WriterFilterDetection_getSupportedServiceNames( )
+ throw ( ::com::sun::star::uno::RuntimeException );
+
+::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL WriterFilterDetection_createInstance(
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::uno::XComponentContext > &xContext)
+ throw( ::com::sun::star::uno::Exception );
+
+#endif
+
diff --git a/writerfilter/source/filter/makefile.mk b/writerfilter/source/filter/makefile.mk
new file mode 100644
index 000000000000..f578e2853243
--- /dev/null
+++ b/writerfilter/source/filter/makefile.mk
@@ -0,0 +1,51 @@
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+PRJ=..$/..
+PRJNAME=writerfilter
+TARGET=filter
+GEN_HID=TRUE
+
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/inc$/writerfilter.mk
+
+# --- Files -------------------------------------
+
+SLOFILES= $(SLO)$/WriterFilter.obj \
+ $(SLO)$/WriterFilterDetection.obj \
+ $(SLO)$/ImportFilter.obj
+
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/writerfilter/source/odiapi/qname/resource/office2003/WordprocessingML Schemas/wordnetaux.xsd b/writerfilter/source/odiapi/qname/resource/office2003/WordprocessingML Schemas/wordnetaux.xsd
new file mode 100644
index 000000000000..41ccbcd1e9b0
--- /dev/null
+++ b/writerfilter/source/odiapi/qname/resource/office2003/WordprocessingML Schemas/wordnetaux.xsd
Binary files differ
diff --git a/writerfilter/source/odiapi/qname/resource/office2003/WordprocessingML Schemas/xsdlib.xsd b/writerfilter/source/odiapi/qname/resource/office2003/WordprocessingML Schemas/xsdlib.xsd
new file mode 100644
index 000000000000..ce1a03386cf9
--- /dev/null
+++ b/writerfilter/source/odiapi/qname/resource/office2003/WordprocessingML Schemas/xsdlib.xsd
Binary files differ
diff --git a/writerfilter/source/odiapi/qname/resource/rdfxml.rng b/writerfilter/source/odiapi/qname/resource/rdfxml.rng
new file mode 100644
index 000000000000..65ea16ebfa22
--- /dev/null
+++ b/writerfilter/source/odiapi/qname/resource/rdfxml.rng
@@ -0,0 +1,453 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ RELAX NG Compact Schema for RDF/XML Syntax
+
+ This schema is for information only and NON-NORMATIVE
+
+ It is based on one originally written by James Clark in
+ http://lists.w3.org/Archives/Public/www-rdf-comments/2001JulSep/0248.html
+ and updated with later changes.
+
+-->
+<grammar xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" ns="http://www.w3.org/XML/1998/namespace" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" xmlns:xml="http://www.w3.org/XML/1998/namespace">
+ <start>
+ <ref name="doc"/>
+ </start>
+ <!-- I cannot seem to do this in RNGC so they are expanded in-line -->
+ <!--
+ coreSyntaxTerms = rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype
+ syntaxTerms = coreSyntaxTerms | rdf:Description | rdf:li
+ oldTerms = rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID
+ nodeElementURIs = * - ( coreSyntaxTerms | rdf:li | oldTerms )
+ propertyElementURIs = * - ( coreSyntaxTerms | rdf:Description | oldTerms )
+ propertyAttributeURIs = * - ( coreSyntaxTerms | rdf:Description | rdf:li | oldTerms )
+ -->
+ <!--
+ Also needed to allow rdf:li on all property element productions
+ since we can't capture the rdf:li rewriting to rdf_<n> in relaxng
+ -->
+ <!-- Need to add these explicitly -->
+ <define name="xmllang">
+ <attribute name="xml:lang"/>
+ </define>
+ <define name="xmlbase">
+ <attribute name="xml:base"/>
+ </define>
+ <!-- and to forbid every other xml:* attribute, element -->
+ <define name="doc">
+ <ref name="RDF"/>
+ </define>
+ <define name="RDF">
+ <element name="rdf:RDF">
+ <optional>
+ <ref name="xmllang"/>
+ </optional>
+ <optional>
+ <ref name="xmlbase"/>
+ </optional>
+ <ref name="nodeElementList"/>
+ </element>
+ </define>
+ <define name="nodeElementList">
+ <zeroOrMore>
+ <ref name="nodeElement"/>
+ </zeroOrMore>
+ </define>
+ <!--
+ Should be something like:
+ ws* , ( nodeElement , ws* )*
+ but RELAXNG does this by default, ignoring whitespace separating tags.
+ -->
+ <define name="nodeElement">
+ <element>
+ <anyName>
+ <except>
+ <nsName ns=""/>
+ <name>rdf:RDF</name>
+ <name>rdf:ID</name>
+ <name>rdf:about</name>
+ <name>rdf:parseType</name>
+ <name>rdf:resource</name>
+ <name>rdf:nodeID</name>
+ <name>rdf:datatype</name>
+ <name>rdf:li</name>
+ <name>rdf:aboutEach</name>
+ <name>rdf:aboutEachPrefix</name>
+ <name>rdf:bagID</name>
+ </except>
+ </anyName>
+ <optional>
+ <choice>
+ <ref name="idAttr"/>
+ <ref name="nodeIdAttr"/>
+ <ref name="aboutAttr"/>
+ </choice>
+ </optional>
+ <optional>
+ <ref name="xmllang"/>
+ </optional>
+ <optional>
+ <ref name="xmlbase"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="propertyAttr"/>
+ </zeroOrMore>
+ <ref name="propertyEltList"/>
+ </element>
+ </define>
+ <!--
+ It is not possible to say "and not things
+ beginning with _ in the rdf: namespace" in RELAX NG.
+ -->
+ <define name="ws">
+ <value> </value>
+ </define>
+ <!--
+ Not used in this RELAX NG schema; but should be any legal XML
+ whitespace defined by http://www.w3.org/TR/2000/REC-xml-20001006#NT-S
+ -->
+ <define name="propertyEltList">
+ <zeroOrMore>
+ <ref name="propertyElt"/>
+ </zeroOrMore>
+ </define>
+ <!--
+ Should be something like:
+ ws* , ( propertyElt , ws* )*
+ but RELAXNG does this by default, ignoring whitespace separating tags.
+ -->
+ <define name="propertyElt">
+ <choice>
+ <ref name="resourcePropertyElt"/>
+ <ref name="literalPropertyElt"/>
+ <ref name="parseTypeLiteralPropertyElt"/>
+ <ref name="parseTypeResourcePropertyElt"/>
+ <ref name="parseTypeCollectionPropertyElt"/>
+ <ref name="parseTypeOtherPropertyElt"/>
+ <ref name="emptyPropertyElt"/>
+ </choice>
+ </define>
+ <define name="resourcePropertyElt">
+ <element>
+ <anyName>
+ <except>
+ <nsName ns=""/>
+ <name>rdf:RDF</name>
+ <name>rdf:ID</name>
+ <name>rdf:about</name>
+ <name>rdf:parseType</name>
+ <name>rdf:resource</name>
+ <name>rdf:nodeID</name>
+ <name>rdf:datatype</name>
+ <name>rdf:Description</name>
+ <name>rdf:aboutEach</name>
+ <name>rdf:aboutEachPrefix</name>
+ <name>rdf:bagID</name>
+ <nsName/>
+ </except>
+ </anyName>
+ <optional>
+ <ref name="idAttr"/>
+ </optional>
+ <optional>
+ <ref name="xmllang"/>
+ </optional>
+ <optional>
+ <ref name="xmlbase"/>
+ </optional>
+ <ref name="nodeElement"/>
+ </element>
+ </define>
+ <define name="literalPropertyElt">
+ <element>
+ <anyName>
+ <except>
+ <nsName ns=""/>
+ <name>rdf:RDF</name>
+ <name>rdf:ID</name>
+ <name>rdf:about</name>
+ <name>rdf:parseType</name>
+ <name>rdf:resource</name>
+ <name>rdf:nodeID</name>
+ <name>rdf:datatype</name>
+ <name>rdf:Description</name>
+ <name>rdf:aboutEach</name>
+ <name>rdf:aboutEachPrefix</name>
+ <name>rdf:bagID</name>
+ <nsName/>
+ </except>
+ </anyName>
+ <optional>
+ <choice>
+ <ref name="idAttr"/>
+ <ref name="datatypeAttr"/>
+ </choice>
+ </optional>
+ <optional>
+ <ref name="xmllang"/>
+ </optional>
+ <optional>
+ <ref name="xmlbase"/>
+ </optional>
+ <text/>
+ </element>
+ </define>
+ <define name="parseTypeLiteralPropertyElt">
+ <element>
+ <anyName>
+ <except>
+ <nsName ns=""/>
+ <name>rdf:RDF</name>
+ <name>rdf:ID</name>
+ <name>rdf:about</name>
+ <name>rdf:parseType</name>
+ <name>rdf:resource</name>
+ <name>rdf:nodeID</name>
+ <name>rdf:datatype</name>
+ <name>rdf:Description</name>
+ <name>rdf:aboutEach</name>
+ <name>rdf:aboutEachPrefix</name>
+ <name>rdf:bagID</name>
+ <nsName/>
+ </except>
+ </anyName>
+ <optional>
+ <ref name="idAttr"/>
+ </optional>
+ <ref name="parseLiteral"/>
+ <optional>
+ <ref name="xmllang"/>
+ </optional>
+ <optional>
+ <ref name="xmlbase"/>
+ </optional>
+ <ref name="literal"/>
+ </element>
+ </define>
+ <define name="parseTypeResourcePropertyElt">
+ <element>
+ <anyName>
+ <except>
+ <nsName ns=""/>
+ <name>rdf:RDF</name>
+ <name>rdf:ID</name>
+ <name>rdf:about</name>
+ <name>rdf:parseType</name>
+ <name>rdf:resource</name>
+ <name>rdf:nodeID</name>
+ <name>rdf:datatype</name>
+ <name>rdf:Description</name>
+ <name>rdf:aboutEach</name>
+ <name>rdf:aboutEachPrefix</name>
+ <name>rdf:bagID</name>
+ <nsName/>
+ </except>
+ </anyName>
+ <optional>
+ <ref name="idAttr"/>
+ </optional>
+ <ref name="parseResource"/>
+ <optional>
+ <ref name="xmllang"/>
+ </optional>
+ <optional>
+ <ref name="xmlbase"/>
+ </optional>
+ <ref name="propertyEltList"/>
+ </element>
+ </define>
+ <define name="parseTypeCollectionPropertyElt">
+ <element>
+ <anyName>
+ <except>
+ <nsName ns=""/>
+ <name>rdf:RDF</name>
+ <name>rdf:ID</name>
+ <name>rdf:about</name>
+ <name>rdf:parseType</name>
+ <name>rdf:resource</name>
+ <name>rdf:nodeID</name>
+ <name>rdf:datatype</name>
+ <name>rdf:Description</name>
+ <name>rdf:aboutEach</name>
+ <name>rdf:aboutEachPrefix</name>
+ <name>rdf:bagID</name>
+ <nsName/>
+ </except>
+ </anyName>
+ <optional>
+ <ref name="idAttr"/>
+ </optional>
+ <optional>
+ <ref name="xmllang"/>
+ </optional>
+ <optional>
+ <ref name="xmlbase"/>
+ </optional>
+ <ref name="parseCollection"/>
+ <ref name="nodeElementList"/>
+ </element>
+ </define>
+ <define name="parseTypeOtherPropertyElt">
+ <element>
+ <anyName>
+ <except>
+ <nsName ns=""/>
+ <name>rdf:RDF</name>
+ <name>rdf:ID</name>
+ <name>rdf:about</name>
+ <name>rdf:parseType</name>
+ <name>rdf:resource</name>
+ <name>rdf:nodeID</name>
+ <name>rdf:datatype</name>
+ <name>rdf:Description</name>
+ <name>rdf:aboutEach</name>
+ <name>rdf:aboutEachPrefix</name>
+ <name>rdf:bagID</name>
+ <nsName/>
+ </except>
+ </anyName>
+ <optional>
+ <ref name="idAttr"/>
+ </optional>
+ <optional>
+ <ref name="xmllang"/>
+ </optional>
+ <optional>
+ <ref name="xmlbase"/>
+ </optional>
+ <ref name="parseOther"/>
+ <ref name="any"/>
+ </element>
+ </define>
+ <define name="emptyPropertyElt">
+ <element>
+ <anyName>
+ <except>
+ <nsName ns=""/>
+ <name>rdf:RDF</name>
+ <name>rdf:ID</name>
+ <name>rdf:about</name>
+ <name>rdf:parseType</name>
+ <name>rdf:resource</name>
+ <name>rdf:nodeID</name>
+ <name>rdf:datatype</name>
+ <name>rdf:Description</name>
+ <name>rdf:aboutEach</name>
+ <name>rdf:aboutEachPrefix</name>
+ <name>rdf:bagID</name>
+ <nsName/>
+ </except>
+ </anyName>
+ <optional>
+ <ref name="idAttr"/>
+ </optional>
+ <optional>
+ <choice>
+ <ref name="resourceAttr"/>
+ <ref name="nodeIdAttr"/>
+ </choice>
+ </optional>
+ <optional>
+ <ref name="xmllang"/>
+ </optional>
+ <optional>
+ <ref name="xmlbase"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="propertyAttr"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="idAttr">
+ <attribute name="rdf:ID">
+ <ref name="IDsymbol"/>
+ </attribute>
+ </define>
+ <define name="nodeIdAttr">
+ <attribute name="rdf:nodeID">
+ <ref name="IDsymbol"/>
+ </attribute>
+ </define>
+ <define name="aboutAttr">
+ <attribute name="rdf:about">
+ <ref name="URI-reference"/>
+ </attribute>
+ </define>
+ <define name="propertyAttr">
+ <attribute>
+ <anyName>
+ <except>
+ <nsName ns=""/>
+ <name>rdf:RDF</name>
+ <name>rdf:ID</name>
+ <name>rdf:about</name>
+ <name>rdf:parseType</name>
+ <name>rdf:resource</name>
+ <name>rdf:nodeID</name>
+ <name>rdf:datatype</name>
+ <name>rdf:li</name>
+ <name>rdf:Description</name>
+ <name>rdf:aboutEach</name>
+ <name>rdf:aboutEachPrefix</name>
+ <name>rdf:bagID</name>
+ <nsName/>
+ </except>
+ </anyName>
+ <data type="string" datatypeLibrary=""/>
+ </attribute>
+ </define>
+ <define name="resourceAttr">
+ <attribute name="rdf:resource">
+ <ref name="URI-reference"/>
+ </attribute>
+ </define>
+ <define name="datatypeAttr">
+ <attribute name="rdf:datatype">
+ <ref name="URI-reference"/>
+ </attribute>
+ </define>
+ <define name="parseLiteral">
+ <attribute name="rdf:parseType">
+ <value>Literal</value>
+ </attribute>
+ </define>
+ <define name="parseResource">
+ <attribute name="rdf:parseType">
+ <value>Resource</value>
+ </attribute>
+ </define>
+ <define name="parseCollection">
+ <attribute name="rdf:parseType">
+ <value>Collection</value>
+ </attribute>
+ </define>
+ <define name="parseOther">
+ <attribute name="rdf:parseType"/>
+ </define>
+ <define name="URI-reference">
+ <data type="string" datatypeLibrary=""/>
+ </define>
+ <define name="literal">
+ <ref name="any"/>
+ </define>
+ <define name="IDsymbol">
+ <data type="NMTOKEN"/>
+ </define>
+ <define name="any">
+ <mixed>
+ <zeroOrMore>
+ <element>
+ <anyName/>
+ <zeroOrMore>
+ <attribute>
+ <anyName/>
+ </attribute>
+ </zeroOrMore>
+ <ref name="any"/>
+ </element>
+ </zeroOrMore>
+ </mixed>
+ </define>
+</grammar>
diff --git a/writerfilter/source/odiapi/qname/resource/rng.rng b/writerfilter/source/odiapi/qname/resource/rng.rng
new file mode 100644
index 000000000000..a2fb8787571e
--- /dev/null
+++ b/writerfilter/source/odiapi/qname/resource/rng.rng
@@ -0,0 +1,331 @@
+<grammar datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
+ ns="http://relaxng.org/ns/structure/1.0"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <start>
+ <ref name="pattern"/>
+ </start>
+
+ <define name="pattern">
+ <choice>
+ <element name="element">
+ <choice>
+ <attribute name="name">
+ <data type="QName"/>
+ </attribute>
+ <ref name="open-name-class"/>
+ </choice>
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="attribute">
+ <ref name="common-atts"/>
+ <choice>
+ <attribute name="name">
+ <data type="QName"/>
+ </attribute>
+ <ref name="open-name-class"/>
+ </choice>
+ <interleave>
+ <ref name="other"/>
+ <optional>
+ <ref name="pattern"/>
+ </optional>
+ </interleave>
+ </element>
+ <element name="group">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="interleave">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="choice">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="optional">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="zeroOrMore">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="oneOrMore">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="list">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="mixed">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="ref">
+ <attribute name="name">
+ <data type="NCName"/>
+ </attribute>
+ <ref name="common-atts"/>
+ </element>
+ <element name="parentRef">
+ <attribute name="name">
+ <data type="NCName"/>
+ </attribute>
+ <ref name="common-atts"/>
+ </element>
+ <element name="empty">
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="text">
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="value">
+ <optional>
+ <attribute name="type">
+ <data type="NCName"/>
+ </attribute>
+ </optional>
+ <ref name="common-atts"/>
+ <text/>
+ </element>
+ <element name="data">
+ <attribute name="type">
+ <data type="NCName"/>
+ </attribute>
+ <ref name="common-atts"/>
+ <interleave>
+ <ref name="other"/>
+ <group>
+ <zeroOrMore>
+ <element name="param">
+ <attribute name="name">
+ <data type="NCName"/>
+ </attribute>
+ <text/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <element name="except">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ </optional>
+ </group>
+ </interleave>
+ </element>
+ <element name="notAllowed">
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="externalRef">
+ <attribute name="href">
+ <data type="anyURI"/>
+ </attribute>
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="grammar">
+ <ref name="common-atts"/>
+ <ref name="grammar-content"/>
+ </element>
+ </choice>
+ </define>
+
+ <define name="grammar-content">
+ <interleave>
+ <ref name="other"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="start-element"/>
+ <ref name="define-element"/>
+ <element name="div">
+ <ref name="common-atts"/>
+ <ref name="grammar-content"/>
+ </element>
+ <element name="include">
+ <attribute name="href">
+ <data type="anyURI"/>
+ </attribute>
+ <ref name="common-atts"/>
+ <ref name="include-content"/>
+ </element>
+ </choice>
+ </zeroOrMore>
+ </interleave>
+ </define>
+
+ <define name="include-content">
+ <interleave>
+ <ref name="other"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="start-element"/>
+ <ref name="define-element"/>
+ <element name="div">
+ <ref name="common-atts"/>
+ <ref name="include-content"/>
+ </element>
+ </choice>
+ </zeroOrMore>
+ </interleave>
+ </define>
+
+ <define name="start-element">
+ <element name="start">
+ <ref name="combine-att"/>
+ <ref name="common-atts"/>
+ <ref name="open-pattern"/>
+ </element>
+ </define>
+
+ <define name="define-element">
+ <element name="define">
+ <attribute name="name">
+ <data type="NCName"/>
+ </attribute>
+ <ref name="combine-att"/>
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ </define>
+
+ <define name="combine-att">
+ <optional>
+ <attribute name="combine">
+ <choice>
+ <value>choice</value>
+ <value>interleave</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+
+ <define name="open-patterns">
+ <interleave>
+ <ref name="other"/>
+ <oneOrMore>
+ <ref name="pattern"/>
+ </oneOrMore>
+ </interleave>
+ </define>
+
+ <define name="open-pattern">
+ <interleave>
+ <ref name="other"/>
+ <ref name="pattern"/>
+ </interleave>
+ </define>
+
+ <define name="name-class">
+ <choice>
+ <element name="name">
+ <ref name="common-atts"/>
+ <data type="QName"/>
+ </element>
+ <element name="anyName">
+ <ref name="common-atts"/>
+ <ref name="except-name-class"/>
+ </element>
+ <element name="nsName">
+ <ref name="common-atts"/>
+ <ref name="except-name-class"/>
+ </element>
+ <element name="choice">
+ <ref name="common-atts"/>
+ <ref name="open-name-classes"/>
+ </element>
+ </choice>
+ </define>
+
+ <define name="except-name-class">
+ <interleave>
+ <ref name="other"/>
+ <optional>
+ <element name="except">
+ <ref name="open-name-classes"/>
+ </element>
+ </optional>
+ </interleave>
+ </define>
+
+ <define name="open-name-classes">
+ <interleave>
+ <ref name="other"/>
+ <oneOrMore>
+ <ref name="name-class"/>
+ </oneOrMore>
+ </interleave>
+ </define>
+
+ <define name="open-name-class">
+ <interleave>
+ <ref name="other"/>
+ <ref name="name-class"/>
+ </interleave>
+ </define>
+
+ <define name="common-atts">
+ <optional>
+ <attribute name="ns"/>
+ </optional>
+ <optional>
+ <attribute name="datatypeLibrary">
+ <data type="anyURI"/>
+ </attribute>
+ </optional>
+ <zeroOrMore>
+ <attribute>
+ <anyName>
+ <except>
+ <nsName/>
+ <nsName ns=""/>
+ </except>
+ </anyName>
+ </attribute>
+ </zeroOrMore>
+ </define>
+
+ <define name="other">
+ <zeroOrMore>
+ <element>
+ <anyName>
+ <except>
+ <nsName/>
+ </except>
+ </anyName>
+ <zeroOrMore>
+ <choice>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ <ref name="any"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </zeroOrMore>
+ </define>
+
+ <define name="any">
+ <element>
+ <anyName/>
+ <zeroOrMore>
+ <choice>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ <ref name="any"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+
+</grammar>
diff --git a/writerfilter/source/odiapi/qname/resource/rtf.rtfs b/writerfilter/source/odiapi/qname/resource/rtf.rtfs
new file mode 100644
index 000000000000..45469a32ea83
--- /dev/null
+++ b/writerfilter/source/odiapi/qname/resource/rtf.rtfs
@@ -0,0 +1,1385 @@
+<?xml version="1.0" ?>
+<rtfs:definition xmlns:rtfs="urn:rtf:schema" xmlns:rtf="urn:rtf:1.7">
+ <rtfs:token name="rtf:ab" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:absh" type="rtfs:Value" />
+ <rtfs:token name="rtf:abslock" type="rtfs:Flag" />
+ <rtfs:token name="rtf:absnoovrlp" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:absw" type="rtfs:Value" />
+ <rtfs:token name="rtf:acaps" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:acccomma" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:accdot" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:accnone" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:acf" type="rtfs:Value" />
+ <rtfs:token name="rtf:additive" type="rtfs:Flag" />
+ <rtfs:token name="rtf:adjustright" type="rtfs:Flag" />
+ <rtfs:token name="rtf:adn" type="rtfs:Value" />
+ <rtfs:token name="rtf:aenddoc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aendnotes" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aexpnd" type="rtfs:Value" />
+ <rtfs:token name="rtf:af" type="rtfs:Value" />
+ <rtfs:token name="rtf:affixed" type="rtfs:Flag" />
+ <rtfs:token name="rtf:afs" type="rtfs:Value" />
+ <rtfs:token name="rtf:aftnbj" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftncn" type="rtfs:Destination" />
+ <rtfs:token name="rtf:aftnnalc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnauc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnchi" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnchosung" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnncnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnndbar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnndbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnndbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnndbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnndbnumt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnganada" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnngbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnngbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnngbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnngbnuml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnrlc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnruc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnzodiac" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnzodiacd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnzodiacl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnrestart" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnrstcont" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnsep" type="rtfs:Destination" />
+ <rtfs:token name="rtf:aftnsepc" type="rtfs:Destination" />
+ <rtfs:token name="rtf:aftnstart" type="rtfs:Value" />
+ <rtfs:token name="rtf:aftntj" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ai" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:alang" type="rtfs:Value" />
+ <rtfs:token name="rtf:allowfieldendsel" type="rtfs:Flag" />
+ <rtfs:token name="rtf:allprot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:alntblind" type="rtfs:Flag" />
+ <rtfs:token name="rtf:alt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:animtext" type="rtfs:Value" />
+ <rtfs:token name="rtf:annotation" type="rtfs:Destination" />
+ <rtfs:token name="rtf:annotprot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ansi" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ansicpg" type="rtfs:Value" />
+ <rtfs:token name="rtf:aoutl" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ApplyBrkRules" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ascaps" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ashad" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:asianbrkrule" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aspalpha" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:aspnum" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:astrike" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:atnauthor" type="rtfs:Destination" />
+ <rtfs:token name="rtf:atndate" type="rtfs:Destination" />
+ <rtfs:token name="rtf:atnicn" type="rtfs:Destination" />
+ <rtfs:token name="rtf:atnid" type="rtfs:Destination" />
+ <rtfs:token name="rtf:atnparent" type="rtfs:Destination" />
+ <rtfs:token name="rtf:atnref" type="rtfs:Destination" />
+ <rtfs:token name="rtf:atntime" type="rtfs:Destination" />
+ <rtfs:token name="rtf:atrfend" type="rtfs:Destination" />
+ <rtfs:token name="rtf:atrfstart" type="rtfs:Destination" />
+ <rtfs:token name="rtf:aul" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:auld" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:auldb" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:aulnone" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:aulw" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:aup" type="rtfs:Value" />
+ <rtfs:token name="rtf:author" type="rtfs:Destination" />
+ <rtfs:token name="rtf:b" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:background" type="rtfs:Destination" />
+ <rtfs:token name="rtf:bdbfhdr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bdrrlswsix" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgdkbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgdkcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgdkdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgdkfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgdkhoriz" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgdkvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bghoriz" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bin" type="rtfs:Value" />
+ <rtfs:token name="rtf:binfsxn" type="rtfs:Value" />
+ <rtfs:token name="rtf:binsxn" type="rtfs:Value" />
+ <rtfs:token name="rtf:bkmkcolf" type="rtfs:Value" />
+ <rtfs:token name="rtf:bkmkcoll" type="rtfs:Value" />
+ <rtfs:token name="rtf:bkmkend" type="rtfs:Destination" />
+ <rtfs:token name="rtf:bkmkpub" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bkmkstart" type="rtfs:Destination" />
+ <rtfs:token name="rtf:bliptag" type="rtfs:Value" />
+ <rtfs:token name="rtf:blipuid" type="rtfs:Value" />
+ <rtfs:token name="rtf:blipupi" type="rtfs:Value" />
+ <rtfs:token name="rtf:blue" type="rtfs:Value" />
+ <rtfs:token name="rtf:bookfold" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bookfoldrev" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bookfoldsheets" type="rtfs:Value" />
+ <rtfs:token name="rtf:box" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrart" type="rtfs:Value" />
+ <rtfs:token name="rtf:brdrb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrbar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrbtw" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrcf" type="rtfs:Value" />
+ <rtfs:token name="rtf:brdrdash" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrdashd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrdashdd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrdashdotstr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrdashsm" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrdb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrdot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdremboss" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrengrave" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrframe" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrhair" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrinset" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrnil" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdroutset" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrs" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrsh" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrtbl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrth" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrthtnlg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrthtnmg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrthtnsg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrtnthlg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrtnthmg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrtnthsg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrtnthtnlg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrtnthtnmg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrtnthtnsg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrtriple" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrw" type="rtfs:Value" />
+ <rtfs:token name="rtf:brdrwavy" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrwavydb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brkfrm" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brsp" type="rtfs:Value" />
+ <rtfs:token name="rtf:bullet" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:buptim" type="rtfs:Destination" />
+ <rtfs:token name="rtf:bxe" type="rtfs:Flag" />
+ <rtfs:token name="rtf:caps" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:category" type="rtfs:Destination" />
+ <rtfs:token name="rtf:cb" type="rtfs:Value" />
+ <rtfs:token name="rtf:cbpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:cchs" type="rtfs:Value" />
+ <rtfs:token name="rtf:cell" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:cellx" type="rtfs:Value" />
+ <rtfs:token name="rtf:cf" type="rtfs:Value" />
+ <rtfs:token name="rtf:cfpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:cgrid" type="rtfs:Value" />
+ <rtfs:token name="rtf:charrsid" type="rtfs:Value" />
+ <rtfs:token name="rtf:charscalex" type="rtfs:Value" />
+ <rtfs:token name="rtf:charscalex" type="rtfs:Value" />
+ <rtfs:token name="rtf:chatn" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:chbgbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgdkbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgdkcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgdkdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgdkfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgdkhoriz" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgdkvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbghoriz" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbrdr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chcbpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:chcfpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:chdate" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:chdpa" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:chdpl" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:chftn" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:chftnsep" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:chftnsepc" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:chpgn" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:chshdng" type="rtfs:Value" />
+ <rtfs:token name="rtf:chtime" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:clbgbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgdkbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgdkcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgdkdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgdkfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgdkhor" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgdkvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbghoriz" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbrdrb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbrdrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbrdrr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbrdrt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clcbpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:clcbpatraw" type="rtfs:Value" />
+ <rtfs:token name="rtf:clcfpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:clcfpatraw" type="rtfs:Value" />
+ <rtfs:token name="rtf:cldgll" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cldglu" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clFitText" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clftsWidth" type="rtfs:Value" />
+ <rtfs:token name="rtf:clmgf" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clmrg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cloWrap" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clpadb" type="rtfs:Value" />
+ <rtfs:token name="rtf:clpadfb" type="rtfs:Value" />
+ <rtfs:token name="rtf:clpadfl" type="rtfs:Value" />
+ <rtfs:token name="rtf:clpadfr" type="rtfs:Value" />
+ <rtfs:token name="rtf:clpadft" type="rtfs:Value" />
+ <rtfs:token name="rtf:clpadl" type="rtfs:Value" />
+ <rtfs:token name="rtf:clpadr" type="rtfs:Value" />
+ <rtfs:token name="rtf:clpadt" type="rtfs:Value" />
+ <rtfs:token name="rtf:clshdng" type="rtfs:Value" />
+ <rtfs:token name="rtf:clshdngraw" type="rtfs:Value" />
+ <rtfs:token name="rtf:clshdrawnil" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cltxbtlr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cltxlrtb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cltxlrtb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cltxlrtbv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cltxtbrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cltxtbrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cltxtbrlv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clvertalb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clvertalc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clvertalt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clvmgf" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clvmrg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clwWidth" type="rtfs:Value" />
+ <rtfs:token name="rtf:collapsed" type="rtfs:Flag" />
+ <rtfs:token name="rtf:colno" type="rtfs:Value" />
+ <rtfs:token name="rtf:colortbl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:cols" type="rtfs:Value" />
+ <rtfs:token name="rtf:colsr" type="rtfs:Value" />
+ <rtfs:token name="rtf:colsx" type="rtfs:Value" />
+ <rtfs:token name="rtf:column" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:colw" type="rtfs:Value" />
+ <rtfs:token name="rtf:comment" type="rtfs:Destination" />
+ <rtfs:token name="rtf:company" type="rtfs:Destination" />
+ <rtfs:token name="rtf:cpg" type="rtfs:Value" />
+ <rtfs:token name="rtf:crauth" type="rtfs:Value" />
+ <rtfs:token name="rtf:crdate" type="rtfs:Value" />
+ <rtfs:token name="rtf:creatim" type="rtfs:Destination" />
+ <rtfs:token name="rtf:cs" type="rtfs:Value" />
+ <rtfs:token name="rtf:ctrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cts" type="rtfs:Value" />
+ <rtfs:token name="rtf:cufi" type="rtfs:Value" />
+ <rtfs:token name="rtf:culi" type="rtfs:Value" />
+ <rtfs:token name="rtf:curi" type="rtfs:Value" />
+ <rtfs:token name="rtf:cvmme" type="rtfs:Flag" />
+ <rtfs:token name="rtf:datafield" type="rtfs:Destination" />
+ <rtfs:token name="rtf:date" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dbch" type="rtfs:Flag" />
+ <rtfs:token name="rtf:deff" type="rtfs:Value" />
+ <rtfs:token name="rtf:defformat" type="rtfs:Flag" />
+ <rtfs:token name="rtf:deflang" type="rtfs:Value" />
+ <rtfs:token name="rtf:deflangfe" type="rtfs:Value" />
+ <rtfs:token name="rtf:defshp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:deftab" type="rtfs:Value" />
+ <rtfs:token name="rtf:deleted" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:delrsid" type="rtfs:Value" />
+ <rtfs:token name="rtf:dfrauth" type="rtfs:Value" />
+ <rtfs:token name="rtf:dfrdate" type="rtfs:Value" />
+ <rtfs:token name="rtf:dfrmtxtx" type="rtfs:Value" />
+ <rtfs:token name="rtf:dfrmtxty" type="rtfs:Value" />
+ <rtfs:token name="rtf:dfrstart" type="rtfs:Value" />
+ <rtfs:token name="rtf:dfrstop" type="rtfs:Value" />
+ <rtfs:token name="rtf:dfrxst" type="rtfs:Value" />
+ <rtfs:token name="rtf:dghorigin" type="rtfs:Value" />
+ <rtfs:token name="rtf:dghshow" type="rtfs:Value" />
+ <rtfs:token name="rtf:dghspace" type="rtfs:Value" />
+ <rtfs:token name="rtf:dgmargin" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dgsnap" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dgvorigin" type="rtfs:Value" />
+ <rtfs:token name="rtf:dgvshow" type="rtfs:Value" />
+ <rtfs:token name="rtf:dgvspace" type="rtfs:Value" />
+ <rtfs:token name="rtf:dibitmap" type="rtfs:Value" />
+ <rtfs:token name="rtf:dn" type="rtfs:Value" />
+ <rtfs:token name="rtf:dntblnsbdb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:do" type="rtfs:Destination" />
+ <rtfs:token name="rtf:dobxcolumn" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dobxmargin" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dobxpage" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dobymargin" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dobypage" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dobypara" type="rtfs:Flag" />
+ <rtfs:token name="rtf:doccomm" type="rtfs:Destination" />
+ <rtfs:token name="rtf:doctemp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:doctype" type="rtfs:Value" />
+ <rtfs:token name="rtf:docvar" type="rtfs:Destination" />
+ <rtfs:token name="rtf:dodhgt" type="rtfs:Value" />
+ <rtfs:token name="rtf:dolock" type="rtfs:Flag" />
+ <rtfs:token name="rtf:donotshowcomments" type="rtfs:Flag" />
+ <rtfs:token name="rtf:donotshowinsdel" type="rtfs:Flag" />
+ <rtfs:token name="rtf:donotshowmarkup" type="rtfs:Flag" />
+ <rtfs:token name="rtf:donotshowprops" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpaendhol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpaendl" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpaendsol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpaendw" type="rtfs:Value" />
+ <rtfs:token name="rtf:dparc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dparcflipx" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dparcflipy" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpastarthol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpastartl" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpastartsol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpastartw" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpcallout" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcoa" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpcoaccent" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcobestfit" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcoborder" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcodabs" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpcodbottom" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcodcenter" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcodescent" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpcodtop" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcolength" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpcominusx" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcominusy" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcooffset" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpcosmarta" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcotdouble" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcotright" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcotsingle" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcottriple" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcount" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpellipse" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpendgroup" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpfillbgcb" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpfillbgcg" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpfillbgcr" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpfillbggray" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpfillbgpal" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpfillfgcb" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpfillfgcg" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpfillfgcr" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpfillfggray" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpfillfgpal" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpfillpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpgroup" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpline" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dplinecob" type="rtfs:Value" />
+ <rtfs:token name="rtf:dplinecog" type="rtfs:Value" />
+ <rtfs:token name="rtf:dplinecor" type="rtfs:Value" />
+ <rtfs:token name="rtf:dplinedado" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dplinedadodo" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dplinedash" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dplinedot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dplinegray" type="rtfs:Value" />
+ <rtfs:token name="rtf:dplinehollow" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dplinepal" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dplinesolid" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dplinew" type="rtfs:Value" />
+ <rtfs:token name="rtf:dppolycount" type="rtfs:Value" />
+ <rtfs:token name="rtf:dppolygon" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dppolyline" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpptx" type="rtfs:Value" />
+ <rtfs:token name="rtf:dppty" type="rtfs:Value" />
+ <rtfs:token name="rtf:dprect" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dproundr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpshadow" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpshadx" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpshady" type="rtfs:Value" />
+ <rtfs:token name="rtf:dptxbtlr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dptxbx" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dptxbxmar" type="rtfs:Value" />
+ <rtfs:token name="rtf:dptxbxtext" type="rtfs:Destination" />
+ <rtfs:token name="rtf:dptxlrtb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dptxlrtbv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dptxtbrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dptxtbrlv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpx" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpxsize" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpy" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpysize" type="rtfs:Value" />
+ <rtfs:token name="rtf:dropcapli" type="rtfs:Value" />
+ <rtfs:token name="rtf:dropcapt" type="rtfs:Value" />
+ <rtfs:token name="rtf:ds" type="rtfs:Value" />
+ <rtfs:token name="rtf:dxfrtext" type="rtfs:Value" />
+ <rtfs:token name="rtf:dy" type="rtfs:Value" />
+ <rtfs:token name="rtf:edmins" type="rtfs:Value" />
+ <rtfs:token name="rtf:embo" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:emdash" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:emfblip" type="rtfs:Flag" />
+ <rtfs:token name="rtf:emspace" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:endash" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:enddoc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:endnhere" type="rtfs:Flag" />
+ <rtfs:token name="rtf:endnotes" type="rtfs:Flag" />
+ <rtfs:token name="rtf:enspace" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:expnd" type="rtfs:Value" />
+ <rtfs:token name="rtf:expndtw" type="rtfs:Value" />
+ <rtfs:token name="rtf:expshrtn" type="rtfs:Flag" />
+ <rtfs:token name="rtf:f" type="rtfs:Value" />
+ <rtfs:token name="rtf:faauto" type="rtfs:Value" />
+ <rtfs:token name="rtf:facenter7.0" type="rtfs:Flag" />
+ <rtfs:token name="rtf:facingp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fahang" type="rtfs:Flag" />
+ <rtfs:token name="rtf:falt" type="rtfs:Destination" />
+ <rtfs:token name="rtf:faroman" type="rtfs:Flag" />
+ <rtfs:token name="rtf:favar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fbias" type="rtfs:Value" />
+ <rtfs:token name="rtf:fbidi" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fchars" type="rtfs:Destination" />
+ <rtfs:token name="rtf:fcharset" type="rtfs:Value" />
+ <rtfs:token name="rtf:fdecor" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fet" type="rtfs:Value" />
+ <rtfs:token name="rtf:fetch" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ffdefres" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffdeftext" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ffentrymcr" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ffexitmcr" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ffformat" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ffhaslistbox" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffhelptext" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ffhps" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ffmaxlen" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffname" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ffownhelp" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffownstat" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffprot" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffrecalc" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffres" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffsize" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffstattext" type="rtfs:Destination" />
+ <rtfs:token name="rtf:fftype" type="rtfs:Value" />
+ <rtfs:token name="rtf:fftypetxt" type="rtfs:Value" />
+ <rtfs:token name="rtf:fi" type="rtfs:Value" />
+ <rtfs:token name="rtf:fid" type="rtfs:Value" />
+ <rtfs:token name="rtf:field" type="rtfs:Destination" />
+ <rtfs:token name="rtf:file" type="rtfs:Destination" />
+ <rtfs:token name="rtf:filetbl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:fittext" type="rtfs:Value" />
+ <rtfs:token name="rtf:fldalt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:flddirty" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fldedit" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fldinst" type="rtfs:Destination" />
+ <rtfs:token name="rtf:fldlock" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fldpriv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fldrslt" type="rtfs:Destination" />
+ <rtfs:token name="rtf:fldtype" type="rtfs:Destination" />
+ <rtfs:token name="rtf:fmodern" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fn" type="rtfs:Value" />
+ <rtfs:token name="rtf:fname" type="rtfs:Destination" />
+ <rtfs:token name="rtf:fnetwork" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fnil" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fnonfilesys" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fontemb" type="rtfs:Destination" />
+ <rtfs:token name="rtf:fontfile" type="rtfs:Destination" />
+ <rtfs:token name="rtf:fonttbl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:footer" type="rtfs:Destination" />
+ <rtfs:token name="rtf:footer" type="rtfs:Destination" />
+ <rtfs:token name="rtf:footerf" type="rtfs:Destination" />
+ <rtfs:token name="rtf:footerl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:footery" type="rtfs:Value" />
+ <rtfs:token name="rtf:footnote" type="rtfs:Destination" />
+ <rtfs:token name="rtf:formdisp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:formfield" type="rtfs:Destination" />
+ <rtfs:token name="rtf:formprot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:formshade" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fosnum" type="rtfs:Value" />
+ <rtfs:token name="rtf:fprq" type="rtfs:Value" />
+ <rtfs:token name="rtf:fracwidth" type="rtfs:Flag" />
+ <rtfs:token name="rtf:frelative" type="rtfs:Value" />
+ <rtfs:token name="rtf:frmtxbtlr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:frmtxlrtb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:frmtxlrtbv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:frmtxtbrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:frmtxtbrlv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:froman" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fromhtml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fromtext" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fs" type="rtfs:Value" />
+ <rtfs:token name="rtf:fscript" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fswiss" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnalt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnbj" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftncn" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ftnil" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnlytwnine" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnalc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnauc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnchi" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnchosung" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnncnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnndbar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnndbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnndbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnndbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnndbnumt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnganada" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnngbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnngbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnngbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnngbnuml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnrlc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnruc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnzodiac" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnzodiacd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnzodiacl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnrestart" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnrstcont" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnrstpg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnsep" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ftnsepc" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ftnstart" type="rtfs:Value" />
+ <rtfs:token name="rtf:ftntj" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fttruetype" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fvaliddos" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fvalidhpfs" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fvalidmac" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fvalidntfs" type="rtfs:Flag" />
+ <rtfs:token name="rtf:g" type="rtfs:Destination" />
+ <rtfs:token name="rtf:gcw" type="rtfs:Value" />
+ <rtfs:token name="rtf:generator" type="rtfs:Destination" />
+ <rtfs:token name="rtf:green" type="rtfs:Value" />
+ <rtfs:token name="rtf:gridtbl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:gutter" type="rtfs:Value" />
+ <rtfs:token name="rtf:gutterprl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:guttersxn" type="rtfs:Value" />
+ <rtfs:token name="rtf:header" type="rtfs:Destination" />
+ <rtfs:token name="rtf:header" type="rtfs:Destination" />
+ <rtfs:token name="rtf:headerf" type="rtfs:Destination" />
+ <rtfs:token name="rtf:headerl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:headery" type="rtfs:Value" />
+ <rtfs:token name="rtf:hich" type="rtfs:Flag" />
+ <rtfs:token name="rtf:highlight" type="rtfs:Value" />
+ <rtfs:token name="rtf:hlfr" type="rtfs:Value" />
+ <rtfs:token name="rtf:hlinkbase" type="rtfs:Value" />
+ <rtfs:token name="rtf:hlloc" type="rtfs:Value" />
+ <rtfs:token name="rtf:hlsrc" type="rtfs:Value" />
+ <rtfs:token name="rtf:horzdoc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:horzsect" type="rtfs:Flag" />
+ <rtfs:token name="rtf:hr" type="rtfs:Value" />
+ <rtfs:token name="rtf:htmautsp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:htmlbase" type="rtfs:Flag" />
+ <rtfs:token name="rtf:htmlrtf" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:htmltag" type="rtfs:Destination" />
+ <rtfs:token name="rtf:hyphauto" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:hyphcaps" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:hyphconsec" type="rtfs:Value" />
+ <rtfs:token name="rtf:hyphhotz" type="rtfs:Value" />
+ <rtfs:token name="rtf:hyphpar" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:i" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:id" type="rtfs:Value" />
+ <rtfs:token name="rtf:ilvl" type="rtfs:Value" />
+ <rtfs:token name="rtf:impr" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:info" type="rtfs:Destination" />
+ <rtfs:token name="rtf:insrsid" type="rtfs:Value" />
+ <rtfs:token name="rtf:intbl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ipgp" type="rtfs:Value" />
+ <rtfs:token name="rtf:irow" type="rtfs:Value" />
+ <rtfs:token name="rtf:irowband" type="rtfs:Value" />
+ <rtfs:token name="rtf:itap" type="rtfs:Value" />
+ <rtfs:token name="rtf:ixe" type="rtfs:Flag" />
+ <rtfs:token name="rtf:jcompress" type="rtfs:Flag" />
+ <rtfs:token name="rtf:jexpand" type="rtfs:Flag" />
+ <rtfs:token name="rtf:jpegblip" type="rtfs:Flag" />
+ <rtfs:token name="rtf:jsksu" type="rtfs:Flag" />
+ <rtfs:token name="rtf:keep" type="rtfs:Flag" />
+ <rtfs:token name="rtf:keepn" type="rtfs:Flag" />
+ <rtfs:token name="rtf:kerning" type="rtfs:Value" />
+ <rtfs:token name="rtf:keycode" type="rtfs:Destination" />
+ <rtfs:token name="rtf:keywords" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ksulang" type="rtfs:Value" />
+ <rtfs:token name="rtf:landscape" type="rtfs:Flag" />
+ <rtfs:token name="rtf:lang" type="rtfs:Value" />
+ <rtfs:token name="rtf:langfe" type="rtfs:Value" />
+ <rtfs:token name="rtf:langfenp" type="rtfs:Value" />
+ <rtfs:token name="rtf:langnp" type="rtfs:Value" />
+ <rtfs:token name="rtf:lastrow" type="rtfs:Flag" />
+ <rtfs:token name="rtf:lbr" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:lchars" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ldblquote" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:level" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelfollow" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelindent" type="rtfs:Value" />
+ <rtfs:token name="rtf:leveljc" type="rtfs:Value" />
+ <rtfs:token name="rtf:leveljcn" type="rtfs:Value" />
+ <rtfs:token name="rtf:levellegal" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelnfc" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelnfcn" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelnorestart" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelnumbers" type="rtfs:Destination" />
+ <rtfs:token name="rtf:levelold" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelpicture" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelprev" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelprevspace" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelspace" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelstartat" type="rtfs:Value" />
+ <rtfs:token name="rtf:leveltemplateid" type="rtfs:Value" />
+ <rtfs:token name="rtf:leveltext" type="rtfs:Value" />
+ <rtfs:token name="rtf:li" type="rtfs:Value" />
+ <rtfs:token name="rtf:line" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:linebetcol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:linecont" type="rtfs:Flag" />
+ <rtfs:token name="rtf:linemod" type="rtfs:Value" />
+ <rtfs:token name="rtf:lineppage" type="rtfs:Flag" />
+ <rtfs:token name="rtf:linerestart" type="rtfs:Flag" />
+ <rtfs:token name="rtf:linestart" type="rtfs:Value" />
+ <rtfs:token name="rtf:linestarts" type="rtfs:Value" />
+ <rtfs:token name="rtf:linex" type="rtfs:Value" />
+ <rtfs:token name="rtf:linkself" type="rtfs:Flag" />
+ <rtfs:token name="rtf:linkstyles" type="rtfs:Flag" />
+ <rtfs:token name="rtf:linkval" type="rtfs:Value" />
+ <rtfs:token name="rtf:lin" type="rtfs:Value" />
+ <rtfs:token name="rtf:lisa" type="rtfs:Value" />
+ <rtfs:token name="rtf:lisb" type="rtfs:Value" />
+ <rtfs:token name="rtf:listhybrid" type="rtfs:Flag" />
+ <rtfs:token name="rtf:listid" type="rtfs:Value" />
+ <rtfs:token name="rtf:listname" type="rtfs:Destination" />
+ <rtfs:token name="rtf:listoverridecount" type="rtfs:Value" />
+ <rtfs:token name="rtf:listoverrideformat" type="rtfs:Value" />
+ <rtfs:token name="rtf:listoverridestart" type="rtfs:Value" />
+ <rtfs:token name="rtf:listpicture" type="rtfs:Value" />
+ <rtfs:token name="rtf:listrestarthdn" type="rtfs:Value" />
+ <rtfs:token name="rtf:listsimple" type="rtfs:Value" />
+ <rtfs:token name="rtf:liststyleid" type="rtfs:Value" />
+ <rtfs:token name="rtf:liststylename" type="rtfs:Value" />
+ <rtfs:token name="rtf:listtemplateid" type="rtfs:Value" />
+ <rtfs:token name="rtf:listtext" type="rtfs:Destination" />
+ <rtfs:token name="rtf:lnbrkrule" type="rtfs:Flag" />
+ <rtfs:token name="rtf:lndscpsxn" type="rtfs:Flag" />
+ <rtfs:token name="rtf:lnongrid" type="rtfs:Flag" />
+ <rtfs:token name="rtf:loch" type="rtfs:Flag" />
+ <rtfs:token name="rtf:lquote" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:ls" type="rtfs:Value" />
+ <rtfs:token name="rtf:ltrch" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ltrdoc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ltrmark" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:ltrpar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ltrrow" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ltrsect" type="rtfs:Flag" />
+ <rtfs:token name="rtf:lytcalctblwd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:lytexcttp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:lytprtmet" type="rtfs:Flag" />
+ <rtfs:token name="rtf:lyttblrtgr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:mac" type="rtfs:Flag" />
+ <rtfs:token name="rtf:macpict" type="rtfs:Flag" />
+ <rtfs:token name="rtf:makebackup" type="rtfs:Flag" />
+ <rtfs:token name="rtf:manager" type="rtfs:Destination" />
+ <rtfs:token name="rtf:margb" type="rtfs:Value" />
+ <rtfs:token name="rtf:margbsxn" type="rtfs:Value" />
+ <rtfs:token name="rtf:margl" type="rtfs:Value" />
+ <rtfs:token name="rtf:marglsxn" type="rtfs:Value" />
+ <rtfs:token name="rtf:margmirror" type="rtfs:Flag" />
+ <rtfs:token name="rtf:margr" type="rtfs:Value" />
+ <rtfs:token name="rtf:margrsxn" type="rtfs:Value" />
+ <rtfs:token name="rtf:margt" type="rtfs:Value" />
+ <rtfs:token name="rtf:margtsxn" type="rtfs:Value" />
+ <rtfs:token name="rtf:mhtmltag" type="rtfs:Destination" />
+ <rtfs:token name="rtf:min" type="rtfs:Value" />
+ <rtfs:token name="rtf:mo" type="rtfs:Value" />
+ <rtfs:token name="rtf:msmcap" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nestcell" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:nestrow" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:nesttableprops" type="rtfs:Destination" />
+ <rtfs:token name="rtf:nextfile" type="rtfs:Destination" />
+ <rtfs:token name="rtf:nobrkwrptbl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nocolbal" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nocompatoptions" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nocwrap" type="rtfs:Flag" />
+ <rtfs:token name="rtf:noextrasprl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nofchars" type="rtfs:Value" />
+ <rtfs:token name="rtf:nofcharsws" type="rtfs:Value" />
+ <rtfs:token name="rtf:nofpages" type="rtfs:Value" />
+ <rtfs:token name="rtf:nofwords" type="rtfs:Value" />
+ <rtfs:token name="rtf:nolead" type="rtfs:Flag" />
+ <rtfs:token name="rtf:noline" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nolnhtadjtbl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nonesttables" type="rtfs:Destination" />
+ <rtfs:token name="rtf:nonshppict" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nooverflow" type="rtfs:Flag" />
+ <rtfs:token name="rtf:noproof" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nosectexpand" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nosnaplinegrid" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nospaceforul" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nosupersub" type="rtfs:Flag" />
+ <rtfs:token name="rtf:notabind" type="rtfs:Flag" />
+ <rtfs:token name="rtf:noultrlspc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nowidctlpar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nowrap" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nowwrap" type="rtfs:Flag" />
+ <rtfs:token name="rtf:noxlattoyen" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objalias" type="rtfs:Destination" />
+ <rtfs:token name="rtf:objalign" type="rtfs:Value" />
+ <rtfs:token name="rtf:objattph" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objautlink" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objclass" type="rtfs:Destination" />
+ <rtfs:token name="rtf:objcropb" type="rtfs:Value" />
+ <rtfs:token name="rtf:objcropl" type="rtfs:Value" />
+ <rtfs:token name="rtf:objcropr" type="rtfs:Value" />
+ <rtfs:token name="rtf:objcropt" type="rtfs:Value" />
+ <rtfs:token name="rtf:objdata" type="rtfs:Destination" />
+ <rtfs:token name="rtf:object" type="rtfs:Destination" />
+ <rtfs:token name="rtf:objemb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objh" type="rtfs:Value" />
+ <rtfs:token name="rtf:objhtml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objicemb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objlink" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objlock" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objname" type="rtfs:Destination" />
+ <rtfs:token name="rtf:objocx" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objpub" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objscalex" type="rtfs:Value" />
+ <rtfs:token name="rtf:objscaley" type="rtfs:Value" />
+ <rtfs:token name="rtf:objsect" type="rtfs:Destination" />
+ <rtfs:token name="rtf:objsetsize" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objsub" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objtime" type="rtfs:Destination" />
+ <rtfs:token name="rtf:objtransy" type="rtfs:Value" />
+ <rtfs:token name="rtf:objupdate" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objw" type="rtfs:Value" />
+ <rtfs:token name="rtf:oldas" type="rtfs:Flag" />
+ <rtfs:token name="rtf:oldcprops" type="rtfs:Destination" />
+ <rtfs:token name="rtf:oldpprops" type="rtfs:Destination" />
+ <rtfs:token name="rtf:oldsprops" type="rtfs:Destination" />
+ <rtfs:token name="rtf:oldtprops" type="rtfs:Destination" />
+ <rtfs:token name="rtf:oldlinewrap" type="rtfs:Flag" />
+ <rtfs:token name="rtf:operator" type="rtfs:Destination" />
+ <rtfs:token name="rtf:otblrul" type="rtfs:Flag" />
+ <rtfs:token name="rtf:outl" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:outlinelevel" type="rtfs:Value" />
+ <rtfs:token name="rtf:overlay" type="rtfs:Flag" />
+ <rtfs:token name="rtf:page" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:pagebb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:panose" type="rtfs:Destination" />
+ <rtfs:token name="rtf:paperh" type="rtfs:Value" />
+ <rtfs:token name="rtf:paperw" type="rtfs:Value" />
+ <rtfs:token name="rtf:par" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:pararsid" type="rtfs:Value" />
+ <rtfs:token name="rtf:pard" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pca" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgbrdrb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgbrdrfoot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgbrdrhead" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgbrdrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgbrdropt" type="rtfs:Value" />
+ <rtfs:token name="rtf:pgbrdrr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgbrdrsnap" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgbrdrt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pghsxn" type="rtfs:Value" />
+ <rtfs:token name="rtf:pgnbidia" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnbidib" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnchosung" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgncnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgncont" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgndbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgndbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgndbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgndbnumt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgndec" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgndecd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnganada" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgngbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgngbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgngbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgngbnuml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnhindia" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnhindib" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnhindic" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnhindid" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnhn" type="rtfs:Value" />
+ <rtfs:token name="rtf:pgnhnsc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnhnsh" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnhnsm" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnhnsn" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnhnsp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnid" type="rtfs:Value" />
+ <rtfs:token name="rtf:pgnlcltr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnlcrm" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnrestart" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnstart" type="rtfs:Value" />
+ <rtfs:token name="rtf:pgnstarts" type="rtfs:Value" />
+ <rtfs:token name="rtf:pgnthaia" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnthaib" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnthaic" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnucltr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnucrm" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnvieta" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnx" type="rtfs:Value" />
+ <rtfs:token name="rtf:pgny" type="rtfs:Value" />
+ <rtfs:token name="rtf:pgnzodiac" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnzodiacd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnzodiacl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgp" type="rtfs:Destination" />
+ <rtfs:token name="rtf:pgptbl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:pgwsxn" type="rtfs:Value" />
+ <rtfs:token name="rtf:phcol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:phmrg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:phpg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:picbmp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:picbpp" type="rtfs:Value" />
+ <rtfs:token name="rtf:piccropb" type="rtfs:Value" />
+ <rtfs:token name="rtf:piccropl" type="rtfs:Value" />
+ <rtfs:token name="rtf:piccropr" type="rtfs:Value" />
+ <rtfs:token name="rtf:piccropt" type="rtfs:Value" />
+ <rtfs:token name="rtf:pich" type="rtfs:Value" />
+ <rtfs:token name="rtf:pichgoal" type="rtfs:Value" />
+ <rtfs:token name="rtf:picprop" type="rtfs:Destination" />
+ <rtfs:token name="rtf:picscaled" type="rtfs:Flag" />
+ <rtfs:token name="rtf:picscalex" type="rtfs:Value" />
+ <rtfs:token name="rtf:picscaley" type="rtfs:Value" />
+ <rtfs:token name="rtf:pict" type="rtfs:Destination" />
+ <rtfs:token name="rtf:picw" type="rtfs:Value" />
+ <rtfs:token name="rtf:picwgoal" type="rtfs:Value" />
+ <rtfs:token name="rtf:plain" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pmmetafile" type="rtfs:Value" />
+ <rtfs:token name="rtf:pn" type="rtfs:Destination" />
+ <rtfs:token name="rtf:pnacross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnaiu" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnaiud" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnaiueo" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnaiueod" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnb" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:pnbidia" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnbidib" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pncaps" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:pncard" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pncf" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnchosung" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pncnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pndbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pndbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pndbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pndbnuml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pndbnumt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pndec" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pndecd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnf" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnfs" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnganada" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnganada" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pngblip" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pngbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pngbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pngbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pngbnuml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnhang" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pni" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:pnindent" type="rtfs:Value" />
+ <rtfs:token name="rtf:pniroha" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnirohad" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnlcltr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnlcrm" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnlvl" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnlvlblt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnlvlbody" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnlvlcont" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnnumonce" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnord" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnordt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnprev" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnqc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnql" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnqr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnrauth" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnrdate" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnrestart" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnrnfc" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnrnot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnrpnbr" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnrrgb" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnrstart" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnrstop" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnrxst" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnscaps" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:pnseclvl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:pnsp" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnstart" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnstrike" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:pntext" type="rtfs:Destination" />
+ <rtfs:token name="rtf:pntxta" type="rtfs:Destination" />
+ <rtfs:token name="rtf:pntxtb" type="rtfs:Destination" />
+ <rtfs:token name="rtf:pnucltr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnucrm" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnul" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:pnuld" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnuldash" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnuldashd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnuldashdd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnuldb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnulhair" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnulnone" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnulth" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnulw" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnulwave" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnzodiac" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnzodiacd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnzodiacl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posnegx" type="rtfs:Value" />
+ <rtfs:token name="rtf:posnegy" type="rtfs:Value" />
+ <rtfs:token name="rtf:posx" type="rtfs:Value" />
+ <rtfs:token name="rtf:posxc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posxi" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posxl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posxo" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posxr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posy" type="rtfs:Value" />
+ <rtfs:token name="rtf:posyb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posyc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posyil" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posyin" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posyout" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posyt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:prcolbl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:printdata" type="rtfs:Flag" />
+ <rtfs:token name="rtf:printim" type="rtfs:Destination" />
+ <rtfs:token name="rtf:private" type="rtfs:Destination" />
+ <rtfs:token name="rtf:propname" type="rtfs:Value" />
+ <rtfs:token name="rtf:proptype" type="rtfs:Value" />
+ <rtfs:token name="rtf:psover" type="rtfs:Flag" />
+ <rtfs:token name="rtf:psz" type="rtfs:Value" />
+ <rtfs:token name="rtf:pubauto" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pvmrg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pvpara" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pvpg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pwd" type="rtfs:Destination" />
+ <rtfs:token name="rtf:pxe" type="rtfs:Destination" />
+ <rtfs:token name="rtf:qc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:qd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:qj" type="rtfs:Flag" />
+ <rtfs:token name="rtf:qk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ql" type="rtfs:Flag" />
+ <rtfs:token name="rtf:qmspace" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:qr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:qt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawbgdkbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgdkcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgdkdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgdkfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgdkhor" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgdkvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbghoriz" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rdblquote" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:red" type="rtfs:Value" />
+ <rtfs:token name="rtf:rempersonalinfo" type="rtfs:Flag" />
+ <rtfs:token name="rtf:result" type="rtfs:Destination" />
+ <rtfs:token name="rtf:revauth" type="rtfs:Value" />
+ <rtfs:token name="rtf:revauthdel" type="rtfs:Value" />
+ <rtfs:token name="rtf:revbar" type="rtfs:Value" />
+ <rtfs:token name="rtf:revdttm" type="rtfs:Value" />
+ <rtfs:token name="rtf:revdttmdel" type="rtfs:Value" />
+ <rtfs:token name="rtf:revised" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:revisions" type="rtfs:Flag" />
+ <rtfs:token name="rtf:revprop" type="rtfs:Value" />
+ <rtfs:token name="rtf:revprot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:revtbl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:revtim" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ri" type="rtfs:Value" />
+ <rtfs:token name="rtf:rin" type="rtfs:Value" />
+ <rtfs:token name="rtf:row" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:rquote" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:rsid" type="rtfs:Value" />
+ <rtfs:token name="rtf:rsidroot" type="rtfs:Value" />
+ <rtfs:token name="rtf:rsidtbl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:rsltbmp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rslthtml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rsltmerge" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rsltpict" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rsltrtf" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rslttxt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rtf" type="rtfs:Destination" />
+ <rtfs:token name="rtf:rtlch" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rtldoc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rtlgutter" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rtlmark" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:rtlpar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rtlrow" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rtlsect" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rxe" type="rtfs:Destination" />
+ <rtfs:token name="rtf:s" type="rtfs:Value" />
+ <rtfs:token name="rtf:sa" type="rtfs:Value" />
+ <rtfs:token name="rtf:saauto" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:saftnnalc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnauc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnchi" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnchosung" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnncnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnndbar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnndbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnndbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnndbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnndbnumt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnganada" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnngbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnngbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnngbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnngbnuml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnrlc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnruc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnzodiac" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnzodiacd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnzodiacl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnrestart" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnrstcont" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnstart" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sautoupd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sb" type="rtfs:Value" />
+ <rtfs:token name="rtf:sbasedon" type="rtfs:Value" />
+ <rtfs:token name="rtf:sbauto" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:sbkcol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sbkeven" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sbknone" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sbkodd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sbkpage" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sbys" type="rtfs:Flag" />
+ <rtfs:token name="rtf:scaps" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:scompose" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sec" type="rtfs:Value" />
+ <rtfs:token name="rtf:sect" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:sectd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sectdefaultcl" type="rtfs:Value" />
+ <rtfs:token name="rtf:sectexpand" type="rtfs:Value" />
+ <rtfs:token name="rtf:sectlinegrid" type="rtfs:Value" />
+ <rtfs:token name="rtf:sectnum" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:sectrsid" type="rtfs:Value" />
+ <rtfs:token name="rtf:sectspecifycl" type="rtfs:Value" />
+ <rtfs:token name="rtf:sectspecifygen" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sectspecifyl" type="rtfs:Value" />
+ <rtfs:token name="rtf:sectunlocked" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnbj" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnalc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnauc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnchi" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnchosung" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnncnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnndbar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnndbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnndbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnndbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnndbnumt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnganada" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnngbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnngbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnngbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnngbnuml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnrlc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnruc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnzodiac" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnzodiacd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnzodiacl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnrestart" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnrstcont" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnrstpg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnstart" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftntj" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shad" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:shading" type="rtfs:Value" />
+ <rtfs:token name="rtf:shidden" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shift" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shpbottom" type="rtfs:Value" />
+ <rtfs:token name="rtf:shpbxcolumn" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shpbxignore" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shpbxmargin" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shpbxpage" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shpbyignore" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shpbymargin" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shpbypage" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shpbypara" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shpfblwtxt" type="rtfs:Value" />
+ <rtfs:token name="rtf:shpfhdr" type="rtfs:Value" />
+ <rtfs:token name="rtf:shpgrp" type="rtfs:Value" />
+ <rtfs:token name="rtf:shpleft" type="rtfs:Value" />
+ <rtfs:token name="rtf:shplid" type="rtfs:Value" />
+ <rtfs:token name="rtf:shplockanchor" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shppict" type="rtfs:Destination" />
+ <rtfs:token name="rtf:shpright" type="rtfs:Value" />
+ <rtfs:token name="rtf:shprslt" type="rtfs:Value" />
+ <rtfs:token name="rtf:shptop" type="rtfs:Value" />
+ <rtfs:token name="rtf:shptxt" type="rtfs:Value" />
+ <rtfs:token name="rtf:shpwrk" type="rtfs:Value" />
+ <rtfs:token name="rtf:shpwr" type="rtfs:Value" />
+ <rtfs:token name="rtf:shpz" type="rtfs:Value" />
+ <rtfs:token name="rtf:sl" type="rtfs:Value" />
+ <rtfs:token name="rtf:slmult" type="rtfs:Value" />
+ <rtfs:token name="rtf:snaptogridincell" type="rtfs:Flag" />
+ <rtfs:token name="rtf:snext" type="rtfs:Value" />
+ <rtfs:token name="rtf:softcol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:softlheight" type="rtfs:Value" />
+ <rtfs:token name="rtf:softline" type="rtfs:Flag" />
+ <rtfs:token name="rtf:softpage" type="rtfs:Flag" />
+ <rtfs:token name="rtf:spersonal" type="rtfs:Flag" />
+ <rtfs:token name="rtf:splytwnine" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sprsbsp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sprslnsp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sprsspbf" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sprstsm" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sprstsp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:spv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sreply" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ssemihidden" type="rtfs:Flag" />
+ <rtfs:token name="rtf:staticval" type="rtfs:Value" />
+ <rtfs:token name="rtf:stextflow" type="rtfs:Value" />
+ <rtfs:token name="rtf:strike" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:striked1" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:stshfbi" type="rtfs:Value" />
+ <rtfs:token name="rtf:stshfdbch" type="rtfs:Value" />
+ <rtfs:token name="rtf:stshfhich" type="rtfs:Value" />
+ <rtfs:token name="rtf:stshfloch" type="rtfs:Value" />
+ <rtfs:token name="rtf:stylesheet" type="rtfs:Destination" />
+ <rtfs:token name="rtf:styrsid" type="rtfs:Value" />
+ <rtfs:token name="rtf:sub" type="rtfs:Flag" />
+ <rtfs:token name="rtf:subdocument" type="rtfs:Value" />
+ <rtfs:token name="rtf:subfontbysize" type="rtfs:Flag" />
+ <rtfs:token name="rtf:subject" type="rtfs:Destination" />
+ <rtfs:token name="rtf:super" type="rtfs:Flag" />
+ <rtfs:token name="rtf:swpbdr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tab" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:tabsnoovrlp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:taprtl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tb" type="rtfs:Value" />
+ <rtfs:token name="rtf:tbllkbestfit" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tbllkborder" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tbllkcolor" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tbllkfont" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tbllkhdrcols" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tbllkhdrrows" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tbllklastcol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tbllklastrow" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tbllkshading" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tblrsid" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tc" type="rtfs:Destination" />
+ <rtfs:token name="rtf:tcelld" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tcf" type="rtfs:Value" />
+ <rtfs:token name="rtf:tcl" type="rtfs:Value" />
+ <rtfs:token name="rtf:tcn" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tdfrmtxtBottom" type="rtfs:Value" />
+ <rtfs:token name="rtf:tdfrmtxtLeft" type="rtfs:Value" />
+ <rtfs:token name="rtf:tdfrmtxtRight" type="rtfs:Value" />
+ <rtfs:token name="rtf:tdfrmtxtTop" type="rtfs:Value" />
+ <rtfs:token name="rtf:template" type="rtfs:Destination" />
+ <rtfs:token name="rtf:time" type="rtfs:Flag" />
+ <rtfs:token name="rtf:title" type="rtfs:Destination" />
+ <rtfs:token name="rtf:titlepg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tldot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tleq" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tlhyph" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tlmdot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tlth" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tlul" type="rtfs:Flag" />
+ <rtfs:token name="rtf:toplinepunct" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tphcol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tphmrg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tphpg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposnegx" type="rtfs:Value" />
+ <rtfs:token name="rtf:tposnegy" type="rtfs:Value" />
+ <rtfs:token name="rtf:tposxc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposxi" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposxl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposx" type="rtfs:Value" />
+ <rtfs:token name="rtf:tposxo" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposxr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposy" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposyb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposyc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposyil" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposyin" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposyoutv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposyt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tpvmrg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tpvpara" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tpvpg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tqc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tqdec" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tqr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:transmf" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trauth" type="rtfs:Value" />
+ <rtfs:token name="rtf:trautofit" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:trbgbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgdkbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgdkcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgdkdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgdkfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgdkhor" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgdkvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbghoriz" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbrdrb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbrdrh" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbrdrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbrdrr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbrdrt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbrdrv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trcbpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:trcfpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:trdate" type="rtfs:Value" />
+ <rtfs:token name="rtf:trftsWidthA" type="rtfs:Value" />
+ <rtfs:token name="rtf:trftsWidthB" type="rtfs:Value" />
+ <rtfs:token name="rtf:trftsWidth" type="rtfs:Value" />
+ <rtfs:token name="rtf:trgaph" type="rtfs:Value" />
+ <rtfs:token name="rtf:trhdr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trkeep" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trleft" type="rtfs:Value" />
+ <rtfs:token name="rtf:trowd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trpaddb" type="rtfs:Value" />
+ <rtfs:token name="rtf:trpaddfb" type="rtfs:Value" />
+ <rtfs:token name="rtf:trpaddfl" type="rtfs:Value" />
+ <rtfs:token name="rtf:trpaddfr" type="rtfs:Value" />
+ <rtfs:token name="rtf:trpaddft" type="rtfs:Value" />
+ <rtfs:token name="rtf:trpaddl" type="rtfs:Value" />
+ <rtfs:token name="rtf:trpaddr" type="rtfs:Value" />
+ <rtfs:token name="rtf:trpaddt" type="rtfs:Value" />
+ <rtfs:token name="rtf:trpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:trqc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trql" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trqr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trrh" type="rtfs:Value" />
+ <rtfs:token name="rtf:trshdng" type="rtfs:Value" />
+ <rtfs:token name="rtf:trspdb" type="rtfs:Value" />
+ <rtfs:token name="rtf:trspdfb" type="rtfs:Value" />
+ <rtfs:token name="rtf:trspdfl" type="rtfs:Value" />
+ <rtfs:token name="rtf:trspdfr" type="rtfs:Value" />
+ <rtfs:token name="rtf:trspdft" type="rtfs:Value" />
+ <rtfs:token name="rtf:trspdl" type="rtfs:Value" />
+ <rtfs:token name="rtf:trspdr" type="rtfs:Value" />
+ <rtfs:token name="rtf:trspdt" type="rtfs:Value" />
+ <rtfs:token name="rtf:truncatefontheight" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trwWidthA" type="rtfs:Value" />
+ <rtfs:token name="rtf:trwWidthB" type="rtfs:Value" />
+ <rtfs:token name="rtf:trwWidth" type="rtfs:Value" />
+ <rtfs:token name="rtf:ts" type="rtfs:Value" />
+ <rtfs:token name="rtf:tsbgbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgdkbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgdkcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgdkdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgdkfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgdkhor" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgdkvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbghoriz" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbrdrb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbrdrdgl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbrdrdgr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbrdrh" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbrdrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbrdrr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbrdrr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbrdrt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbrdrv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscbandhorzeven" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscbandhorzodd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscbandsh" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscbandsv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscbandverteven" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscbandvertodd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscellcbpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellcfpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellpaddb" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellpaddfb" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellpaddfl" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellpaddfr" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellpaddft" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellpaddl" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellpaddr" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellpaddt" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellpct" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellwidth" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscellwidthfts" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscfirstcol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscfirstrow" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsclastcol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsclastrow" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscnecell" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscnwcell" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscsecell" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscswcell" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsnowrap" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsrowd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsvertalb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsvertalc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsvertalt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:twoonone" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tx" type="rtfs:Value" />
+ <rtfs:token name="rtf:txe" type="rtfs:Destination" />
+ <rtfs:token name="rtf:uc" type="rtfs:Value" />
+ <rtfs:token name="rtf:ud" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ul" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulc" type="rtfs:Value" />
+ <rtfs:token name="rtf:uld" type="rtfs:Flag" />
+ <rtfs:token name="rtf:uldash" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:uldashd" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:uldashdd" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:uldb" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulhair" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulhwave" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulldash" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulnone" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ulth" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulth" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulthd" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulthdash" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulthdashd" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulthdashdd" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulthldash" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ululdbwave" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulw" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ulwave" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:u" type="rtfs:Value" />
+ <rtfs:token name="rtf:up" type="rtfs:Value" />
+ <rtfs:token name="rtf:upr" type="rtfs:Destination" />
+ <rtfs:token name="rtf:urtf" type="rtfs:Destination" />
+ <rtfs:token name="rtf:useltbaln" type="rtfs:Flag" />
+ <rtfs:token name="rtf:userprops" type="rtfs:Destination" />
+ <rtfs:token name="rtf:v" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:vern" type="rtfs:Value" />
+ <rtfs:token name="rtf:version" type="rtfs:Value" />
+ <rtfs:token name="rtf:vertalb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:vertalc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:vertalj" type="rtfs:Flag" />
+ <rtfs:token name="rtf:vertalt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:vertdoc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:vertsect" type="rtfs:Flag" />
+ <rtfs:token name="rtf:viewkind" type="rtfs:Value" />
+ <rtfs:token name="rtf:viewnobound" type="rtfs:Flag" />
+ <rtfs:token name="rtf:viewscale" type="rtfs:Value" />
+ <rtfs:token name="rtf:viewzk" type="rtfs:Value" />
+ <rtfs:token name="rtf:wbitmap" type="rtfs:Value" />
+ <rtfs:token name="rtf:wbmbitspixel" type="rtfs:Value" />
+ <rtfs:token name="rtf:wbmplanes" type="rtfs:Value" />
+ <rtfs:token name="rtf:wbmwidthbytes" type="rtfs:Value" />
+ <rtfs:token name="rtf:webhidden" type="rtfs:Flag" />
+ <rtfs:token name="rtf:widctlpar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:widowctrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:windowcaption" type="rtfs:Value" />
+ <rtfs:token name="rtf:wmetafile" type="rtfs:Value" />
+ <rtfs:token name="rtf:wpeqn" type="rtfs:Flag" />
+ <rtfs:token name="rtf:wpjst" type="rtfs:Flag" />
+ <rtfs:token name="rtf:wpsp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:wraptrsp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:wrppunct" type="rtfs:Flag" />
+ <rtfs:token name="rtf:xe" type="rtfs:Destination" />
+ <rtfs:token name="rtf:xef" type="rtfs:Value" />
+ <rtfs:token name="rtf:yr" type="rtfs:Value" />
+ <rtfs:token name="rtf:yts" type="rtfs:Value" />
+ <rtfs:token name="rtf:yxe" type="rtfs:Flag" />
+ <rtfs:token name="rtf:zwbo" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:zwj" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:zwnbo" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:zwnj" type="rtfs:Symbol" />
+
+
+
+ <rtfs:token name="rtf:listlevel" type="rtfs:Attribute" />
+
+</rtfs:definition> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/Handler.cxx b/writerfilter/source/ooxml/Handler.cxx
new file mode 100644
index 000000000000..1b4fb6eb0525
--- /dev/null
+++ b/writerfilter/source/ooxml/Handler.cxx
@@ -0,0 +1,348 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <ooxml/resourceids.hxx>
+#include <resourcemodel/QNameToString.hxx>
+#include "Handler.hxx"
+
+namespace writerfilter {
+namespace 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(val.getString());
+ 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(val.getString());
+ 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.getString());
+ 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:
+ mpFastContext->resolveOLE(val.getString());
+ break;
+ default:
+ ;
+ }
+}
+
+void OOXMLOLEHandler::sprm(Sprm & /*sprm*/)
+{
+}
+
+/*
+ class OOXMLFooterHandler
+ */
+OOXMLFooterHandler::OOXMLFooterHandler(OOXMLFastContextHandler * pContext)
+: mpFastContext(pContext), msStreamId(), mnType(0)
+{
+}
+
+OOXMLFooterHandler::~OOXMLFooterHandler()
+{
+ 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)
+{
+}
+
+OOXMLHeaderHandler::~OOXMLHeaderHandler()
+{
+ 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,
+ OOXMLFastContextHandler * pContext)
+: mpFastContext(pContext), mnType(0), mnClear(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:
+ mnClear = val.getInt();
+ 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.get() != NULL)
+ pProps->resolve(*this);
+ }
+}
+
+void OOXMLPictureHandler::sprm(Sprm & rSprm)
+{
+ writerfilter::Reference<Properties>::Pointer_t pProps
+ (rSprm.getProps());
+
+ if (pProps.get() != NULL)
+ pProps->resolve(*this);
+}
+
+/**
+ class OOXMLHyperlinkHandler
+ */
+
+OOXMLHyperlinkHandler::OOXMLHyperlinkHandler(OOXMLFastContextHandler * pContext)
+: mpFastContext(pContext)
+{
+}
+
+OOXMLHyperlinkHandler::~OOXMLHyperlinkHandler()
+{
+ ::rtl::OUString sReturn(RTL_CONSTASCII_USTRINGPARAM(" HYPERLINK \""));
+
+ sReturn += mURL;
+ sReturn += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\""));
+ sReturn += mFieldCode;
+
+ mpFastContext->characters(sReturn);
+}
+
+void OOXMLHyperlinkHandler::attribute(Id name, Value & val)
+{
+ switch (name)
+ {
+ case NS_ooxml::LN_CT_Hyperlink_tgtFrame:
+ mFieldCode += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" \\t \""));
+ mFieldCode += val.getString();
+ mFieldCode += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\""));
+ break;
+ case NS_ooxml::LN_CT_Hyperlink_tooltip:
+ mFieldCode += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" \\o \""));
+ mFieldCode += val.getString();
+ mFieldCode += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\""));
+ 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 += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" \\l \""));
+ mFieldCode += val.getString();
+ mFieldCode += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\""));
+ break;
+ case NS_ooxml::LN_CT_Hyperlink_r_id:
+ mURL = mpFastContext->getTargetForId(val.getString());
+ break;
+ default:
+ break;
+ }
+}
+
+void OOXMLHyperlinkHandler::sprm(Sprm & /*rSprm*/)
+{
+}
+}}
diff --git a/writerfilter/source/ooxml/Handler.hxx b/writerfilter/source/ooxml/Handler.hxx
new file mode 100644
index 000000000000..372683c0b0cf
--- /dev/null
+++ b/writerfilter/source/ooxml/Handler.hxx
@@ -0,0 +1,145 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_HANDLER_HXX
+#define INCLUDED_HANDLER_HXX
+
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include "OOXMLFastContextHandler.hxx"
+
+namespace writerfilter {
+namespace ooxml
+{
+class OOXMLFootnoteHandler : public Properties
+{
+ OOXMLFastContextHandler * mpFastContext;
+
+public:
+ OOXMLFootnoteHandler(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFootnoteHandler();
+
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+};
+
+class OOXMLEndnoteHandler : public Properties
+{
+ OOXMLFastContextHandler * mpFastContext;
+public:
+ OOXMLEndnoteHandler(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLEndnoteHandler();
+
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+};
+
+class OOXMLFooterHandler : public Properties
+{
+ OOXMLFastContextHandler * mpFastContext;
+ ::rtl::OUString msStreamId;
+ sal_Int32 mnType;
+public:
+ OOXMLFooterHandler(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFooterHandler();
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+};
+
+class OOXMLHeaderHandler : public Properties
+{
+ OOXMLFastContextHandler * mpFastContext;
+ ::rtl::OUString msStreamId;
+ sal_Int32 mnType;
+public:
+ OOXMLHeaderHandler(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLHeaderHandler();
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+};
+
+class OOXMLCommentHandler : public Properties
+{
+ OOXMLFastContextHandler * mpFastContext;
+ ::rtl::OUString msStreamId;
+public:
+ OOXMLCommentHandler(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLCommentHandler();
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+};
+
+class OOXMLOLEHandler : public Properties
+{
+ OOXMLFastContextHandler * mpFastContext;
+
+public:
+ OOXMLOLEHandler(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLOLEHandler();
+
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+};
+
+class OOXMLBreakHandler : public Properties
+{
+ OOXMLFastContextHandler * mpFastContext;
+ sal_Int32 mnType, mnClear;
+ Stream & mrStream;
+public:
+ OOXMLBreakHandler(Stream & rStream, OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLBreakHandler();
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+};
+
+class OOXMLPictureHandler : public Properties
+{
+ OOXMLFastContextHandler * mpFastContext;
+public:
+ OOXMLPictureHandler(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLPictureHandler();
+
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+};
+
+class OOXMLHyperlinkHandler : public Properties
+{
+ OOXMLFastContextHandler * mpFastContext;
+ ::rtl::OUString mFieldCode;
+ ::rtl::OUString mURL;
+
+public:
+ OOXMLHyperlinkHandler(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLHyperlinkHandler();
+
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+};
+
+
+}}
+#endif // INCLUDED_HANDLER_HXX
diff --git a/writerfilter/source/ooxml/OOXMLBinaryObjectReference.cxx b/writerfilter/source/ooxml/OOXMLBinaryObjectReference.cxx
new file mode 100644
index 000000000000..d034a145a5bf
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLBinaryObjectReference.cxx
@@ -0,0 +1,86 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include "OOXMLBinaryObjectReference.hxx"
+#include <string.h>
+
+namespace writerfilter {
+namespace ooxml
+{
+
+using namespace ::com::sun::star;
+
+OOXMLBinaryObjectReference::OOXMLBinaryObjectReference
+(OOXMLStream::Pointer_t 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.realloc(nSize);
+
+ memcpy(&mSequence[nOldSize], aSeq.getArray(), nBytesRead);
+ }
+
+ mbRead = true;
+}
+
+void OOXMLBinaryObjectReference::resolve(BinaryObj & rHandler)
+{
+ if (! mbRead)
+ read();
+
+ writerfilter::Reference<Properties>::Pointer_t pRef =
+ writerfilter::Reference<Properties>::Pointer_t();
+
+ rHandler.data(reinterpret_cast<sal_uInt8 *>(&mSequence[0]),
+ mSequence.getLength(), pRef);
+}
+
+string OOXMLBinaryObjectReference::getType() const
+{
+ return "OOXMLBinaryObjectReference";
+}
+
+}}
diff --git a/writerfilter/source/ooxml/OOXMLBinaryObjectReference.hxx b/writerfilter/source/ooxml/OOXMLBinaryObjectReference.hxx
new file mode 100644
index 000000000000..833c93bae9db
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLBinaryObjectReference.hxx
@@ -0,0 +1,55 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_OOXML_BINARY_OBJECT_REFERENCE_HXX
+#define INCLUDED_OOXML_BINARY_OBJECT_REFERENCE_HXX
+
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <ooxml/OOXMLDocument.hxx>
+
+namespace writerfilter {
+namespace ooxml
+{
+class OOXMLBinaryObjectReference :
+ public writerfilter::Reference<BinaryObj>
+{
+ OOXMLStream::Pointer_t mpStream;
+ uno::Sequence<sal_Int8> mSequence;
+ bool mbRead;
+
+ void read();
+
+public:
+ OOXMLBinaryObjectReference(OOXMLStream::Pointer_t pStream);
+ virtual ~OOXMLBinaryObjectReference();
+
+ virtual void resolve(BinaryObj & rHandler);
+
+ virtual string getType() const;
+};
+}}
+
+#endif // INCLUDED_OOXML_BINARY_OBJECT_REFERENCE_HXX
diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
new file mode 100644
index 000000000000..50c32b758d44
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
@@ -0,0 +1,386 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <com/sun/star/xml/sax/XParser.hpp>
+
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#include "OOXMLDocumentImpl.hxx"
+#include "OOXMLBinaryObjectReference.hxx"
+#include "OOXMLFastDocumentHandler.hxx"
+#include "OOXMLPropertySetImpl.hxx"
+#include "ooxmlLoggers.hxx"
+
+#include <iostream>
+
+namespace writerfilter {
+namespace ooxml
+{
+TagLogger::Pointer_t debug_logger(TagLogger::getInstance("DEBUG"));
+using namespace ::std;
+
+OOXMLDocumentImpl::OOXMLDocumentImpl
+(OOXMLStream::Pointer_t pStream)
+: mpStream(pStream), mXNoteType(0)
+{
+}
+
+OOXMLDocumentImpl::~OOXMLDocumentImpl()
+{
+}
+
+void OOXMLDocumentImpl::resolveFastSubStream(Stream & rStreamHandler,
+ OOXMLStream::StreamType_t nType)
+{
+ OOXMLStream::Pointer_t pStream
+ (OOXMLDocumentFactory::createStream(mpStream, nType));
+
+ uno::Reference< xml::sax::XFastParser > xParser
+ (mpStream->getFastParser());
+
+ if (xParser.is())
+ {
+ uno::Reference<uno::XComponentContext> xContext(mpStream->getContext());
+ OOXMLFastDocumentHandler * pDocHandler =
+ new OOXMLFastDocumentHandler(xContext);
+ pDocHandler->setStream(&rStreamHandler);
+ pDocHandler->setDocument(this);
+ pDocHandler->setXNoteId(msXNoteId);
+
+ uno::Reference < xml::sax::XFastDocumentHandler > xDocumentHandler
+ (pDocHandler);
+ uno::Reference < xml::sax::XFastTokenHandler > xTokenHandler
+ (mpStream->getFastTokenHandler(xContext));
+
+ 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();
+ }
+ }
+}
+
+void OOXMLDocumentImpl::resolveFastSubStreamWithId(Stream & rStream,
+ writerfilter::Reference<Stream>::Pointer_t pStream,
+ sal_uInt32 nId)
+{
+ rStream.substream(nId, pStream);
+}
+
+void OOXMLDocumentImpl::setXNoteId(const rtl::OUString & rId)
+{
+ msXNoteId = rId;
+}
+
+const rtl::OUString & OOXMLDocumentImpl::getXNoteId() const
+{
+ return msXNoteId;
+}
+
+void OOXMLDocumentImpl::setXNoteType(const Id & nId)
+{
+ mXNoteType = nId;
+}
+
+const Id & OOXMLDocumentImpl::getXNoteType() const
+{
+ return mXNoteType;
+}
+
+const ::rtl::OUString & OOXMLDocumentImpl::getTarget() const
+{
+ return mpStream->getTarget();
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+OOXMLDocumentImpl::getSubStream(const rtl::OUString & rId)
+{
+ OOXMLStream::Pointer_t pStream
+ (OOXMLDocumentFactory::createStream(mpStream, rId));
+
+ OOXMLDocumentImpl * pTemp;
+ writerfilter::Reference<Stream>::Pointer_t pRet( pTemp = new OOXMLDocumentImpl(pStream) );
+ pTemp->setModel(mxModel);
+ pTemp->setDrawPage(mxDrawPage);
+ return pRet;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+OOXMLDocumentImpl::getXNoteStream(OOXMLStream::StreamType_t nType, const Id & rType,
+ const rtl::OUString & rId)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("getXNoteStream");
+ debug_logger->attribute("id", rId);
+ debug_logger->endElement("getXNoteStream");
+#endif
+
+ OOXMLStream::Pointer_t pStream =
+ (OOXMLDocumentFactory::createStream(mpStream, nType));
+ OOXMLDocumentImpl * pDocument = new OOXMLDocumentImpl(pStream);
+ pDocument->setXNoteId(rId);
+ pDocument->setXNoteType(rType);
+
+ return writerfilter::Reference<Stream>::Pointer_t(pDocument);
+}
+
+void OOXMLDocumentImpl::resolveFootnote(Stream & rStream,
+ const Id & rType,
+ const rtl::OUString & rNoteId)
+{
+ writerfilter::Reference<Stream>::Pointer_t pStream =
+ getXNoteStream(OOXMLStream::FOOTNOTES, rType, rNoteId);
+
+ Id nId;
+ switch (rType)
+ {
+ case NS_ooxml::LN_Value_wordprocessingml_ST_FtnEdn_separator:
+ case NS_ooxml::LN_Value_wordprocessingml_ST_FtnEdn_continuationSeparator:
+ nId = rType;
+ break;
+ default:
+ nId = NS_rtf::LN_footnote;
+ break;
+ }
+
+ resolveFastSubStreamWithId(rStream, pStream, nId);
+}
+
+void OOXMLDocumentImpl::resolveEndnote(Stream & rStream,
+ const Id & rType,
+ const rtl::OUString & rNoteId)
+{
+ writerfilter::Reference<Stream>::Pointer_t pStream =
+ getXNoteStream(OOXMLStream::ENDNOTES, rType, rNoteId);
+
+ Id nId;
+ switch (rType)
+ {
+ case NS_ooxml::LN_Value_wordprocessingml_ST_FtnEdn_separator:
+ case NS_ooxml::LN_Value_wordprocessingml_ST_FtnEdn_continuationSeparator:
+ nId = rType;
+ break;
+ default:
+ nId = NS_rtf::LN_endnote;
+ break;
+ }
+
+ resolveFastSubStreamWithId(rStream, pStream, nId);
+}
+
+void OOXMLDocumentImpl::resolveComment(Stream & rStream,
+ const rtl::OUString & rId)
+{
+ writerfilter::Reference<Stream>::Pointer_t pStream =
+ getXNoteStream(OOXMLStream::COMMENTS, 0, rId);
+
+ resolveFastSubStreamWithId(rStream, pStream, NS_rtf::LN_annotation);
+}
+
+OOXMLPropertySet * OOXMLDocumentImpl::getPicturePropSet
+(const ::rtl::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));
+
+ OOXMLProperty::Pointer_t pPayloadProperty
+ (new OOXMLPropertyImpl(NS_rtf::LN_payload, pPayloadValue,
+ OOXMLPropertyImpl::ATTRIBUTE));
+
+ OOXMLPropertySet::Pointer_t pBlipSet(new OOXMLPropertySetImpl());
+
+ pBlipSet->add(pPayloadProperty);
+
+ OOXMLValue::Pointer_t pBlipValue(new OOXMLPropertySetValue(pBlipSet));
+
+ OOXMLProperty::Pointer_t pBlipProperty
+ (new OOXMLPropertyImpl(NS_rtf::LN_blip, pBlipValue,
+ OOXMLPropertyImpl::ATTRIBUTE));
+
+ OOXMLPropertySet * pProps = new OOXMLPropertySetImpl();
+
+ pProps->add(pBlipProperty);
+
+ return pProps;
+}
+
+void OOXMLDocumentImpl::resolvePicture(Stream & rStream,
+ const rtl::OUString & rId)
+{
+ OOXMLPropertySet * pProps = getPicturePropSet(rId);
+
+ rStream.props(writerfilter::Reference<Properties>::Pointer_t(pProps));
+}
+
+::rtl::OUString OOXMLDocumentImpl::getTargetForId(const ::rtl::OUString & rId)
+{
+ return mpStream->getTargetForId(rId);
+}
+
+void OOXMLDocumentImpl::resolveHeader(Stream & rStream,
+ const sal_Int32 type,
+ const rtl::OUString & rId)
+{
+ writerfilter::Reference<Stream>::Pointer_t pStream =
+ getSubStream(rId);
+ switch (type)
+ {
+ case NS_ooxml::LN_Value_ST_HrdFtr_even:
+ resolveFastSubStreamWithId(rStream, pStream, NS_rtf::LN_headerl);
+ break;
+ case NS_ooxml::LN_Value_ST_HrdFtr_default: // here we assume that default is right, but not necessarily true :-(
+ resolveFastSubStreamWithId(rStream, pStream, NS_rtf::LN_headerr);
+ break;
+ case NS_ooxml::LN_Value_ST_HrdFtr_first:
+ resolveFastSubStreamWithId(rStream, pStream, NS_rtf::LN_headerf);
+ break;
+ default:
+ break;
+ }
+}
+
+void OOXMLDocumentImpl::resolveFooter(Stream & rStream,
+ const sal_Int32 type,
+ const rtl::OUString & rId)
+{
+ writerfilter::Reference<Stream>::Pointer_t pStream =
+ getSubStream(rId);
+
+ switch (type)
+ {
+ case NS_ooxml::LN_Value_ST_HrdFtr_even:
+ resolveFastSubStreamWithId(rStream, pStream, NS_rtf::LN_footerl);
+ break;
+ case NS_ooxml::LN_Value_ST_HrdFtr_default: // here we assume that default is right, but not necessarily true :-(
+ resolveFastSubStreamWithId(rStream, pStream, NS_rtf::LN_footerr);
+ break;
+ case NS_ooxml::LN_Value_ST_HrdFtr_first:
+ resolveFastSubStreamWithId(rStream, pStream, NS_rtf::LN_footerf);
+ break;
+ default:
+ break;
+ }
+}
+
+void OOXMLDocumentImpl::resolve(Stream & rStream)
+{
+ uno::Reference< xml::sax::XFastParser > xParser
+ (mpStream->getFastParser());
+
+ if (xParser.is())
+ {
+ uno::Reference<uno::XComponentContext> xContext(mpStream->getContext());
+
+ OOXMLFastDocumentHandler * pDocHandler =
+ new OOXMLFastDocumentHandler(xContext);
+ pDocHandler->setStream(&rStream);
+ pDocHandler->setDocument(this);
+ pDocHandler->setXNoteId(msXNoteId);
+ uno::Reference < xml::sax::XFastDocumentHandler > xDocumentHandler
+ (pDocHandler);
+ uno::Reference < xml::sax::XFastTokenHandler > xTokenHandler
+ (mpStream->getFastTokenHandler(xContext));
+
+ resolveFastSubStream(rStream, OOXMLStream::SETTINGS);
+ resolveFastSubStream(rStream, OOXMLStream::THEME);
+ resolveFastSubStream(rStream, OOXMLStream::NUMBERING);
+ resolveFastSubStream(rStream, OOXMLStream::FONTTABLE);
+ resolveFastSubStream(rStream, OOXMLStream::STYLES);
+
+ xParser->setFastDocumentHandler( xDocumentHandler );
+ xParser->setTokenHandler( xTokenHandler );
+
+ xml::sax::InputSource aParserInput;
+ aParserInput.aInputStream = mpStream->getDocumentStream();
+ xParser->parseStream(aParserInput);
+ }
+}
+
+uno::Reference<io::XInputStream> OOXMLDocumentImpl::getInputStreamForId(const ::rtl::OUString & rId)
+{
+ OOXMLStream::Pointer_t pStream(OOXMLDocumentFactory::createStream(mpStream, rId));
+
+ return pStream->getDocumentStream();
+}
+
+string OOXMLDocumentImpl::getType() const
+{
+ return "OOXMLDocumentImpl";
+}
+
+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;
+}
+
+uno::Reference<io::XInputStream> OOXMLDocumentImpl::getInputStream()
+{
+ return mpStream->getDocumentStream();
+}
+
+uno::Reference<io::XInputStream> OOXMLDocumentImpl::getStorageStream()
+{
+ return mpStream->getStorageStream();
+}
+
+OOXMLDocument *
+OOXMLDocumentFactory::createDocument
+(OOXMLStream::Pointer_t pStream)
+{
+ return new OOXMLDocumentImpl(pStream);
+}
+
+}}
diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx
new file mode 100644
index 000000000000..7fdeb69b8bb8
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx
@@ -0,0 +1,112 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_OOXML_DOCUMENT_IMPL_HXX
+#define INCLUDED_OOXML_DOCUMENT_IMPL_HXX
+
+#include <ooxml/OOXMLDocument.hxx>
+
+#ifndef _COM_SUN_STAR_XML_SAX_XFAST_TOKEN_HANDLER_HPP_
+#include <com/sun/star/xml/sax/XFastTokenHandler.hpp>
+#endif
+
+#include "OOXMLPropertySet.hxx"
+
+namespace writerfilter {
+namespace ooxml
+{
+
+using namespace ::com::sun::star;
+
+class OOXMLDocumentImpl : public OOXMLDocument
+{
+ OOXMLStream::Pointer_t mpStream;
+ rtl::OUString msXNoteId;
+ Id mXNoteType;
+
+ uno::Reference<frame::XModel> mxModel;
+ uno::Reference<drawing::XDrawPage> mxDrawPage;
+
+protected:
+ virtual void resolveFastSubStream(Stream & rStream,
+ OOXMLStream::StreamType_t nType);
+
+ virtual void resolveFastSubStreamWithId(Stream & rStream,
+ writerfilter::Reference<Stream>::Pointer_t pStream,
+ sal_uInt32 nId);
+
+ writerfilter::Reference<Stream>::Pointer_t
+ getSubStream(const rtl::OUString & rId);
+
+ writerfilter::Reference<Stream>::Pointer_t
+ getXNoteStream(OOXMLStream::StreamType_t nType,
+ const Id & rType,
+ const rtl::OUString & rNoteId);
+
+public:
+ OOXMLDocumentImpl(OOXMLStream::Pointer_t pStream);
+ virtual ~OOXMLDocumentImpl();
+
+ virtual void resolve(Stream & rStream);
+
+ virtual string getType() const;
+
+ virtual void resolveFootnote(Stream & rStream,
+ const Id & rType,
+ const rtl::OUString & rNoteId);
+ virtual void resolveEndnote(Stream & rStream,
+ const Id & rType,
+ const rtl::OUString & rNoteId);
+ virtual void resolveHeader(Stream & rStream,
+ const sal_Int32 type,
+ const rtl::OUString & rId);
+ virtual void resolveFooter(Stream & rStream,
+ const sal_Int32 type,
+ const rtl::OUString & rId);
+
+ virtual void resolveComment(Stream & rStream, const rtl::OUString & rId);
+
+ virtual OOXMLPropertySet * getPicturePropSet
+ (const ::rtl::OUString & rId);
+ virtual void resolvePicture(Stream & rStream, const rtl::OUString & rId);
+
+ virtual ::rtl::OUString getTargetForId(const ::rtl::OUString & rId);
+
+ virtual void setModel(uno::Reference<frame::XModel> xModel);
+ virtual uno::Reference<frame::XModel> getModel();
+ virtual void setDrawPage(uno::Reference<drawing::XDrawPage> xDrawPage);
+ virtual uno::Reference<drawing::XDrawPage> getDrawPage();
+ virtual uno::Reference<io::XInputStream> getInputStream();
+ virtual uno::Reference<io::XInputStream> getStorageStream();
+ virtual uno::Reference<io::XInputStream> getInputStreamForId(const rtl::OUString & rId);
+ virtual void setXNoteId(const rtl::OUString & rId);
+ virtual const ::rtl::OUString & getXNoteId() const;
+ virtual void setXNoteType(const Id & rId);
+ virtual const Id & getXNoteType() const;
+ virtual const ::rtl::OUString & getTarget() const;
+};
+}}
+#endif // OOXML_DOCUMENT_IMPL_HXX
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
new file mode 100644
index 000000000000..6b52563887ee
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
@@ -0,0 +1,2436 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <stdio.h>
+#include <iostream>
+#include <set>
+#include <rtl/uuid.h>
+#include <com/sun/star/drawing/XShapes.hpp>
+#include <resourcemodel/QNameToString.hxx>
+#include <resourcemodel/util.hxx>
+#include <ooxml/resourceids.hxx>
+#include <ooxml/OOXMLnamespaceids.hxx>
+#include "OOXMLFastContextHandler.hxx"
+#include "Handler.hxx"
+#include "ooxmlLoggers.hxx"
+
+static const sal_uInt8 s0x7[] = { 0x7, 0x0 };
+static const sal_uInt8 s0xd[] = { 0xd, 0x0 };
+static const sal_uInt8 sCR[] = { 0xd, 0x0 };
+static const sal_uInt8 sFtnEdnRef[] = { 0x2, 0x0 };
+static const sal_uInt8 sFtnEdnSep[] = { 0x3, 0x0 };
+static const sal_uInt8 sFtnEdnCont[] = { 0x4, 0x0 };
+static const sal_uInt8 sTab[] = { 0x9, 0x0 };
+static const sal_uInt8 sPgNum[] = { 0x0, 0x0 };
+static const sal_uInt8 sFieldStart[] = { 0x13 };
+static const sal_uInt8 sFieldSep[] = { 0x14 };
+static const sal_uInt8 sFieldEnd[] = { 0x15 };
+static const sal_uInt8 sNoBreakHyphen[] = { 0x1e, 0x0 };
+static const sal_uInt8 sSoftHyphen[] = { 0x1f, 0x0 };
+
+namespace writerfilter {
+namespace ooxml
+{
+using ::com::sun::star::lang::XMultiComponentFactory;
+using namespace ::com::sun::star;
+using namespace ::std;
+
+static uno::Sequence< sal_Int8 > CreateUnoTunnelId()
+{
+ static osl::Mutex aCreateMutex;
+ osl::Guard<osl::Mutex> aGuard( aCreateMutex );
+ uno::Sequence< sal_Int8 > aSeq( 16 );
+ rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True );
+ return aSeq;
+}
+
+static string resourceToString
+(OOXMLFastContextHandler::ResourceEnum_t eResource)
+{
+ string sResult;
+
+ switch (eResource)
+ {
+ case OOXMLFastContextHandler::STREAM:
+ sResult = "Stream";
+ break;
+ case OOXMLFastContextHandler::PROPERTIES:
+ sResult = "Properties";
+ break;
+ case OOXMLFastContextHandler::TABLE:
+ sResult = "Table";
+ break;
+ case OOXMLFastContextHandler::SHAPE:
+ sResult = "Shape";
+ break;
+ default:
+ sResult = "??";
+ }
+
+ return sResult;
+}
+
+set<OOXMLFastContextHandler *> aSetContexts;
+
+
+class OOXMLIdToString : public IdToString
+{
+public:
+ OOXMLIdToString() : IdToString() {}
+ virtual ~OOXMLIdToString() {}
+
+ virtual string toString(const Id & rId) const
+ {
+ string s(fastTokenToId(rId));
+
+ if (s.size() == 0)
+ s = (*QNameToString::Instance())(rId);
+
+ return s;
+ }
+};
+
+/*
+ class OOXMLFastContextHandler
+ */
+
+sal_uInt32 OOXMLFastContextHandler::mnInstanceCount = 0;
+
+OOXMLFastContextHandler::OOXMLFastContextHandler
+(uno::Reference< uno::XComponentContext > const & context)
+: mpParent(NULL),
+ mId(0),
+ mnToken(OOXML_FAST_TOKENS_END),
+ mpStream(NULL),
+ mnTableDepth(0),
+ mnInstanceNumber(mnInstanceCount),
+ mnRefCount(0),
+ m_xContext(context),
+ mbFallback(false)
+{
+ mnInstanceCount++;
+ aSetContexts.insert(this);
+
+ if (mpParserState.get() == NULL)
+ mpParserState.reset(new OOXMLParserState());
+
+ mpParserState->incContextCount();
+}
+
+OOXMLFastContextHandler::OOXMLFastContextHandler
+(OOXMLFastContextHandler * pContext)
+: cppu::WeakImplHelper1<com::sun::star::xml::sax::XFastContextHandler>(),
+ mpParent(pContext),
+ mnToken(OOXML_FAST_TOKENS_END),
+ mpStream(NULL),
+ mnTableDepth(0),
+ mnInstanceNumber(mnInstanceCount),
+ mnRefCount(0),
+ m_xContext(pContext->m_xContext),
+ mbFallback(false)
+{
+ if (pContext != NULL)
+ {
+ mpStream = pContext->mpStream;
+ mpParserState = pContext->mpParserState;
+ mnTableDepth = pContext->mnTableDepth;
+ m_xContext = pContext->m_xContext;
+ }
+
+ if (mpParserState.get() == NULL)
+ mpParserState.reset(new OOXMLParserState());
+
+ mnInstanceCount++;
+ aSetContexts.insert(this);
+ mpParserState->incContextCount();
+}
+
+OOXMLFastContextHandler::~OOXMLFastContextHandler()
+{
+ aSetContexts.erase(this);
+}
+
+void OOXMLFastContextHandler::dumpOpenContexts()
+{
+ debug_logger->startElement("open-contexts");
+ XMLTag aTag("open-contexts");
+
+ set<OOXMLFastContextHandler *>::iterator aIt(aSetContexts.begin());
+ while (aIt != aSetContexts.end())
+ {
+ debug_logger->startElement("open-context");
+ debug_logger->addTag((*aIt)->toTag());
+ debug_logger->endElement("open-context");
+
+ aIt++;
+ }
+
+ static char buffer[256];
+ snprintf(buffer, sizeof(buffer), "%" SAL_PRI_SIZET "u",
+ aSetContexts.size());
+
+ debug_logger->attribute("count", buffer);
+ debug_logger->endElement("open-contexts");
+}
+
+#ifdef DEBUG_MEMORY
+void SAL_CALL OOXMLFastContextHandler::acquire()
+ throw ()
+{
+ mnRefCount++;
+
+ static char buffer[256];
+ snprintf(buffer, sizeof(buffer), "%ld: %s: aquire(%ld)", mnInstanceNumber,
+ getType().c_str(), mnRefCount);
+ logger("MEMORY", buffer);
+
+ cppu::WeakImplHelper1<com::sun::star::xml::sax::XFastContextHandler>::acquire();
+}
+
+void SAL_CALL OOXMLFastContextHandler::release()
+ throw ()
+{
+ static char buffer[256];
+ snprintf(buffer, sizeof(buffer), "%s: release(%ld)", mnInstanceNumber,
+ getType().c_str(), mnRefCount);
+ logger("MEMORY", buffer);
+
+ cppu::WeakImplHelper1<com::sun::star::xml::sax::XFastContextHandler>::release();
+ mnRefCount--;
+}
+#endif
+
+sal_uInt32 OOXMLFastContextHandler::getInstanceNumber() const
+{
+ return mnInstanceNumber;
+}
+
+// ::com::sun::star::xml::sax::XFastContextHandler:
+void SAL_CALL OOXMLFastContextHandler::startFastElement
+(Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("element");
+ debug_logger->attribute("token", fastTokenToId(Element));
+ debug_logger->attribute("type",getType());
+ debug_logger->startElement("at-start");
+ debug_logger->addTag(toTag());
+ debug_logger->endElement("at-start");
+#endif
+#ifdef DEBUG_MEMORY
+ static char buffer[256];
+ snprintf(buffer, sizeof(buffer), "%ld: startFastElement", mnInstanceNumber);
+ logger("MEMORY", buffer);
+#endif
+
+#if DEBUG
+ clog << "Token: " << fastTokenToId(Element) << endl;
+#endif
+ attributes(Attribs);
+ lcl_startFastElement(Element, Attribs);
+}
+
+void SAL_CALL OOXMLFastContextHandler::startUnknownElement
+(const ::rtl::OUString & Namespace, const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
+throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_STACK
+ debug_logger->startElement("unknown-element");
+ debug_logger->attribute("namespace", Namespace);
+ debug_logger->attribute("name", Name);
+#else
+ (void) Namespace;
+ (void) Name;
+#endif
+}
+
+void SAL_CALL OOXMLFastContextHandler::endFastElement(Token_t Element)
+throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ lcl_endFastElement(Element);
+
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("at-end");
+ debug_logger->addTag(toTag());
+ debug_logger->endElement("at-end");
+ debug_logger->endElement("element");
+#endif
+#ifdef DEBUG_MEMORY
+ static char buffer[256];
+ snprintf(buffer, sizeof(buffer), "%ld: %s:endFastElement", mnInstanceNumber,
+ getType().c_str());
+ logger("MEMORY", buffer);
+#endif
+}
+
+void OOXMLFastContextHandler::lcl_startFastElement
+(Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ startAction(Element);
+}
+
+void OOXMLFastContextHandler::lcl_endFastElement
+(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_STACK
+ debug_logger->startElement("endAction");
+ debug_logger->endElement("endAction");
+ debug_logger->startElement("token");
+ debug_logger->chars(fastTokenToId(Element));
+ debug_logger->endElement("token");
+#endif
+
+ endAction(Element);
+}
+
+void SAL_CALL OOXMLFastContextHandler::endUnknownElement
+(const ::rtl::OUString & , const ::rtl::OUString & )
+throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("unknown-element");
+ debug_logger->endElement("unknown-element");
+#endif
+}
+
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ OOXMLFastContextHandler::createFastChildContext
+(Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_STACK
+ debug_logger->startElement("createFastChildContext");
+ debug_logger->attribute("token", fastTokenToId(Element));
+ debug_logger->attribute("type", getType());
+#endif
+
+ uno::Reference< xml::sax::XFastContextHandler > xResult
+ (lcl_createFastChildContext(Element, Attribs));
+
+#ifdef DEBUG_CONTEXT_STACK
+ debug_logger->endElement("createFastChildContext");
+#endif
+
+ return xResult;
+}
+
+uno::Reference< xml::sax::XFastContextHandler >
+ OOXMLFastContextHandler::lcl_createFastChildContext
+(Token_t /*Element*/,
+ const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ OOXMLFastContextHandler * pResult = new OOXMLFastContextHandler(this);
+ pResult->setFallback(true);
+
+ return uno::Reference< xml::sax::XFastContextHandler > (pResult);
+}
+
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+OOXMLFastContextHandler::createUnknownChildContext
+(const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("createUnknownChildContext");
+ debug_logger->attribute("namespace", Namespace);
+ debug_logger->attribute("name", Name);
+ debug_logger->endElement("createUnknownChildContext");
+#else
+ (void) Namespace;
+ (void) Name;
+#endif
+
+ return uno::Reference< xml::sax::XFastContextHandler >
+ (new OOXMLFastContextHandler(*const_cast<const OOXMLFastContextHandler *>(this)));
+}
+
+void SAL_CALL OOXMLFastContextHandler::characters
+(const ::rtl::OUString & aChars)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ lcl_characters(aChars);
+}
+
+void OOXMLFastContextHandler::lcl_characters
+(const ::rtl::OUString & /*aChars*/)
+throw (uno::RuntimeException, xml::sax::SAXException)
+{
+}
+
+const uno::Sequence< sal_Int8 > & OOXMLFastContextHandler::getUnoTunnelId()
+{
+ static uno::Sequence< sal_Int8 > aSeq = CreateUnoTunnelId();
+ return aSeq;
+}
+
+sal_Int64 SAL_CALL OOXMLFastContextHandler::getSomething( const uno::Sequence< sal_Int8 >& rId )
+ throw(uno::RuntimeException)
+{
+ if( rId.getLength() == 16
+ && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(),
+ rId.getConstArray(), 16 ) )
+ {
+ return sal::static_int_cast<sal_Int64>
+ (reinterpret_cast<sal_IntPtr>(this));
+ }
+
+ return 0x0;
+}
+
+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*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+}
+
+void OOXMLFastContextHandler::startAction(Token_t Element)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("startAction");
+#endif
+ lcl_startAction(Element);
+#ifdef DEBUG_ELEMENT
+ debug_logger->endElement("startAction");
+#endif
+}
+
+void OOXMLFastContextHandler::lcl_startAction(Token_t /* Element */)
+{
+}
+
+void OOXMLFastContextHandler::endAction(Token_t Element)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("endAction");
+#endif
+ lcl_endAction(Element);
+#ifdef DEBUG_ELEMENT
+ debug_logger->endElement("endAction");
+#endif
+}
+
+void OOXMLFastContextHandler::lcl_endAction(Token_t /* Element */)
+{
+}
+
+XMLTag::Pointer_t OOXMLFastContextHandler::toPropertiesTag
+ (OOXMLPropertySet::Pointer_t pProps)
+{
+ XMLTag::Pointer_t pTag;
+
+ if (pProps.get() != NULL)
+ {
+ PropertySetToTagHandler aHandler(IdToString::Pointer_t(new OOXMLIdToString()));
+
+ pProps->resolve(aHandler);
+ pTag = aHandler.getTag();
+ }
+
+ return pTag;
+}
+
+XMLTag::Pointer_t OOXMLFastContextHandler::toTag() const
+{
+ XMLTag::Pointer_t pTag(new XMLTag("context"));
+
+ static char sBuffer[128];
+ snprintf(sBuffer, sizeof(sBuffer), "%p", this);
+
+ pTag->addAttr("parent", sBuffer);
+ pTag->addAttr("type", getType());
+ pTag->addAttr("resource", getResourceString());
+ pTag->addAttr("token", fastTokenToId(getToken()));
+ pTag->addAttr("id", (*QNameToString::Instance())(getId()));
+
+ OOXMLValue::Pointer_t pVal(getValue());
+
+ if (pVal.get() != NULL)
+ pTag->addAttr("value", pVal->toString());
+ else
+ pTag->addAttr("value", "(null)");
+
+ XMLTag::Pointer_t pTagProps(toPropertiesTag(getPropertySet()));
+ if (pTagProps.get() != NULL)
+ pTag->addTag(pTagProps);
+
+ pTag->addTag(mpParserState->toTag());
+
+ return pTag;
+}
+
+string OOXMLFastContextHandler::toString() const
+{
+ return toTag()->toString();
+}
+
+string OOXMLFastContextHandler::getResourceString() const
+{
+ return resourceToString(getResource());
+}
+
+void OOXMLFastContextHandler::setId(Id rId)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("setId");
+
+ static char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), "%ld", rId);
+
+ debug_logger->attribute("id", sBuffer);
+ debug_logger->chars((*QNameToString::Instance())(rId));
+ debug_logger->endElement("setId");
+#endif
+
+ mId = rId;
+}
+
+Id OOXMLFastContextHandler::getId() const
+{
+ return mId;
+}
+
+void OOXMLFastContextHandler::setFallback(bool bFallback)
+{
+ mbFallback = bFallback;
+}
+
+bool OOXMLFastContextHandler::isFallback() const
+{
+ return mbFallback;
+}
+
+OOXMLParserState::Pointer_t OOXMLFastContextHandler::getParserState() const
+{
+ return mpParserState;
+}
+
+void OOXMLFastContextHandler::setToken(Token_t nToken)
+{
+ mnToken = nToken;
+
+#ifdef DEBUG_CONTEXT_STACK
+ msTokenString = fastTokenToId(mnToken);
+#endif
+}
+
+Token_t OOXMLFastContextHandler::getToken() const
+{
+ return mnToken;
+}
+
+void OOXMLFastContextHandler::mark(const Id & rId, OOXMLValue::Pointer_t pVal)
+{
+ OOXMLPropertySetImpl::Pointer_t pPropSet(new OOXMLPropertySetImpl());
+ OOXMLPropertyImpl::Pointer_t pProperty
+ (new OOXMLPropertyImpl(rId, pVal, OOXMLPropertyImpl::ATTRIBUTE));
+
+#ifdef DEBUG_PROPERTIES
+ debug_logger->startElement("mark");
+ debug_logger->chars(xmlify(pProperty->toString()));
+ debug_logger->endElement("mark");
+#endif
+ pPropSet->add(pProperty);
+ mpStream->props(pPropSet);
+}
+
+void OOXMLFastContextHandler::setParent
+(OOXMLFastContextHandler * pParent)
+{
+ mpParent = pParent;
+}
+
+OOXMLPropertySet * OOXMLFastContextHandler::getPicturePropSet
+(const ::rtl::OUString & rId)
+{
+ return dynamic_cast<OOXMLDocumentImpl *>(mpParserState->getDocument())->
+ getPicturePropSet(rId);
+}
+
+void OOXMLFastContextHandler::sendTableDepth() const
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("sendTableDepth");
+#endif
+
+ if (mnTableDepth > 0)
+ {
+ OOXMLPropertySet * pProps = new OOXMLPropertySetImpl();
+ {
+ OOXMLValue::Pointer_t pVal
+ (new OOXMLIntegerValue(mnTableDepth));
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(0x6649, pVal, OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+ }
+ {
+ OOXMLValue::Pointer_t pVal
+ (new OOXMLIntegerValue(1));
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(0x2416, pVal, OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+ }
+
+#ifdef DEBUG_PROPERTIES
+ debug_logger->startElement("props");
+ debug_logger->chars(pProps->toString());
+ debug_logger->endElement("props");
+#endif
+ mpStream->props(writerfilter::Reference<Properties>::Pointer_t(pProps));
+#ifdef DEBUG_PROPERTIES
+ debug_logger->endElement("sendTableDepth");
+#endif
+ }
+}
+
+void OOXMLFastContextHandler::setHandle()
+{
+ mpParserState->setHandle();
+ mpStream->info(mpParserState->getHandle());
+}
+
+void OOXMLFastContextHandler::startCharacterGroup()
+{
+ if (isForwardEvents())
+ {
+ if (mpParserState->isInCharacterGroup())
+ endCharacterGroup();
+
+ if (! mpParserState->isInParagraphGroup())
+ startParagraphGroup();
+
+ if (! mpParserState->isInCharacterGroup())
+ {
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("startCharacterGroup");
+#endif
+
+ mpStream->startCharacterGroup();
+ mpParserState->setInCharacterGroup(true);
+ mpParserState->resolveCharacterProperties(*mpStream);
+ }
+ }
+}
+
+void OOXMLFastContextHandler::endCharacterGroup()
+{
+ if (isForwardEvents() && mpParserState->isInCharacterGroup())
+ {
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("endCharacterGroup");
+#endif
+
+ mpStream->endCharacterGroup();
+ mpParserState->setInCharacterGroup(false);
+ }
+}
+
+void OOXMLFastContextHandler::startParagraphGroup()
+{
+ if (isForwardEvents())
+ {
+ if (mpParserState->isInParagraphGroup())
+ endParagraphGroup();
+
+ if (! mpParserState->isInSectionGroup())
+ startSectionGroup();
+
+ if (! mpParserState->isInParagraphGroup())
+ {
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("startParagraphGroup");
+#endif
+
+ mpStream->startParagraphGroup();
+ mpParserState->setInParagraphGroup(true);
+ }
+ }
+}
+
+void OOXMLFastContextHandler::endParagraphGroup()
+{
+ if (isForwardEvents())
+ {
+ if (mpParserState->isInCharacterGroup())
+ endCharacterGroup();
+
+ if (mpParserState->isInParagraphGroup())
+ {
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("endParagraphGroup");
+#endif
+ mpStream->endParagraphGroup();
+ mpParserState->setInParagraphGroup(false);
+ }
+ }
+}
+
+void OOXMLFastContextHandler::startSectionGroup()
+{
+ if (isForwardEvents())
+ {
+ if (mpParserState->isInSectionGroup())
+ endSectionGroup();
+
+ if (! mpParserState->isInSectionGroup())
+ {
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("startSectionGroup");
+#endif
+ mpStream->info(mpParserState->getHandle());
+ mpStream->startSectionGroup();
+ mpParserState->setInSectionGroup(true);
+ }
+ }
+}
+
+void OOXMLFastContextHandler::endSectionGroup()
+{
+ if (isForwardEvents())
+ {
+ if (mpParserState->isInParagraphGroup())
+ endParagraphGroup();
+
+ if (mpParserState->isInSectionGroup())
+ {
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("endSectionGroup");
+#endif
+ mpStream->endSectionGroup();
+ mpParserState->setInSectionGroup(false);
+ }
+ }
+}
+
+void OOXMLFastContextHandler::setLastParagraphInSection()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("setLastParagraphInSection");
+#endif
+
+ mpParserState->setLastParagraphInSection(true);
+}
+
+void OOXMLFastContextHandler::newProperty
+(const Id & /*nId*/, OOXMLValue::Pointer_t /*pVal*/)
+{
+}
+
+void OOXMLFastContextHandler::setPropertySet
+(OOXMLPropertySet::Pointer_t /* pPropertySet */)
+{
+}
+
+OOXMLPropertySet::Pointer_t OOXMLFastContextHandler::getPropertySet() const
+{
+ return OOXMLPropertySet::Pointer_t();
+}
+
+void OOXMLFastContextHandler::startField()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("startField");
+#endif
+ startCharacterGroup();
+ if (isForwardEvents())
+ mpStream->text(sFieldStart, 1);
+ endCharacterGroup();
+}
+
+void OOXMLFastContextHandler::fieldSeparator()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("fieldSeparator");
+#endif
+ startCharacterGroup();
+ if (isForwardEvents())
+ mpStream->text(sFieldSep, 1);
+ endCharacterGroup();
+}
+
+void OOXMLFastContextHandler::endField()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("endField");
+#endif
+ startCharacterGroup();
+ if (isForwardEvents())
+ mpStream->text(sFieldEnd, 1);
+ endCharacterGroup();
+}
+
+void OOXMLFastContextHandler::ftnednref()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("ftnednref");
+#endif
+ if (isForwardEvents())
+ mpStream->utext(sFtnEdnRef, 1);
+}
+
+void OOXMLFastContextHandler::ftnednsep()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("ftnednsep");
+#endif
+ if (isForwardEvents())
+ mpStream->utext(sFtnEdnSep, 1);
+}
+
+void OOXMLFastContextHandler::ftnedncont()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("ftnedncont");
+#endif
+ if (isForwardEvents())
+ mpStream->text(sFtnEdnCont, 1);
+}
+
+void OOXMLFastContextHandler::pgNum()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("pgNum");
+#endif
+ if (isForwardEvents())
+ mpStream->utext((const sal_uInt8*)sPgNum, 1);
+}
+
+void OOXMLFastContextHandler::tab()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("tab");
+#endif
+ if (isForwardEvents())
+ mpStream->utext((const sal_uInt8*)sTab, 1);
+}
+
+void OOXMLFastContextHandler::cr()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("cr");
+#endif
+ if (isForwardEvents())
+ mpStream->utext((const sal_uInt8*)sCR, 1);
+}
+
+void OOXMLFastContextHandler::noBreakHyphen()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("noBreakHyphen");
+#endif
+ if (isForwardEvents())
+ mpStream->utext((const sal_uInt8*)sNoBreakHyphen, 1);
+}
+
+void OOXMLFastContextHandler::softHyphen()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("softHyphen");
+#endif
+ if (isForwardEvents())
+ mpStream->utext((const sal_uInt8*)sSoftHyphen, 1);
+}
+
+void OOXMLFastContextHandler::handleLastParagraphInSection()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("handleLastParagraphInSection");
+#endif
+
+ if (mpParserState->isLastParagraphInSection())
+ {
+ mpParserState->setLastParagraphInSection(false);
+ startSectionGroup();
+ }
+}
+
+void OOXMLFastContextHandler::endOfParagraph()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("endOfParagraph");
+#endif
+ if (! mpParserState->isInCharacterGroup())
+ startCharacterGroup();
+ if (isForwardEvents())
+ mpStream->utext((const sal_uInt8*)sCR, 1);
+}
+
+void OOXMLFastContextHandler::text(const ::rtl::OUString & sText)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("text");
+ debug_logger->chars(sText);
+ debug_logger->endElement("text");
+#endif
+ if (isForwardEvents())
+ mpStream->utext(reinterpret_cast < const sal_uInt8 * >
+ (sText.getStr()),
+ sText.getLength());
+}
+
+void OOXMLFastContextHandler::propagateCharacterProperties()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("propagateCharacterProperties");
+ debug_logger->addTag(toPropertiesTag(getPropertySet()));
+ debug_logger->endElement("propagateCharacterProperties");
+#endif
+
+ mpParserState->setCharacterProperties(getPropertySet());
+}
+
+void OOXMLFastContextHandler::propagateCharacterPropertiesAsSet(const Id & rId)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("propagateCharacterPropertiesAsSet");
+ debug_logger->addTag(toPropertiesTag(getPropertySet()));
+ debug_logger->endElement("propagateCharacterPropertiesAsSet");
+#endif
+
+ OOXMLValue::Pointer_t pValue(new OOXMLPropertySetValue(getPropertySet()));
+ OOXMLPropertySet::Pointer_t pPropertySet(new OOXMLPropertySetImpl());
+
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(rId, pValue, OOXMLPropertyImpl::SPRM));
+
+ pPropertySet->add(pProp);
+ mpParserState->setCharacterProperties(pPropertySet);
+}
+
+bool OOXMLFastContextHandler::propagatesProperties() const
+{
+ return false;
+}
+
+void OOXMLFastContextHandler::propagateTableProperties()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("propagateTableProperties");
+#endif
+
+ mpParserState->setTableProperties(getPropertySet());
+}
+
+void OOXMLFastContextHandler::sendPropertiesWithId(const Id & rId)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("sendPropertiesWithId");
+ debug_logger->attribute("id", fastTokenToId(rId));
+#endif
+
+ OOXMLValue::Pointer_t pValue(new OOXMLPropertySetValue(getPropertySet()));
+ OOXMLPropertySet::Pointer_t pPropertySet(new OOXMLPropertySetImpl());
+
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(rId, pValue, OOXMLPropertyImpl::SPRM));
+
+ pPropertySet->add(pProp);
+ mpStream->props(pPropertySet);
+
+#ifdef DEBUG_ELEMENT
+ debug_logger->addTag(toPropertiesTag(pPropertySet));
+ debug_logger->endElement("sendPropertiesWithId");
+#endif
+}
+
+void OOXMLFastContextHandler::clearProps()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("clearProps");
+#endif
+
+ setPropertySet(OOXMLPropertySet::Pointer_t(new OOXMLPropertySetImpl()));
+}
+
+void OOXMLFastContextHandler::setDocument(OOXMLDocument * pDocument)
+{
+ mpParserState->setDocument(pDocument);
+}
+
+OOXMLDocument * OOXMLFastContextHandler::getDocument()
+{
+ return mpParserState->getDocument();
+}
+
+void OOXMLFastContextHandler::setForwardEvents(bool bForwardEvents)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("setForwardEvents");
+
+ if (bForwardEvents)
+ debug_logger->chars("true");
+ else
+ debug_logger->chars("false");
+
+ debug_logger->endElement("setForwardEvents");
+#endif
+
+ mpParserState->setForwardEvents(bForwardEvents);
+}
+
+bool OOXMLFastContextHandler::isForwardEvents() const
+{
+ return mpParserState->isForwardEvents();
+}
+
+void OOXMLFastContextHandler::setXNoteId(const ::rtl::OUString & rId)
+{
+ mpParserState->setXNoteId(rId);
+}
+
+const rtl::OUString & OOXMLFastContextHandler::getXNoteId() const
+{
+ return mpParserState->getXNoteId();
+}
+
+void OOXMLFastContextHandler::resolveFootnote
+(const rtl::OUString & rId)
+{
+ mpParserState->getDocument()->resolveFootnote
+ (*mpStream, 0, rId);
+}
+
+void OOXMLFastContextHandler::resolveEndnote(const rtl::OUString & rId)
+{
+ mpParserState->getDocument()->resolveEndnote
+ (*mpStream, 0, rId);
+}
+
+void OOXMLFastContextHandler::resolveComment(const rtl::OUString & rId)
+{
+ mpParserState->getDocument()->resolveComment(*mpStream, rId);
+}
+
+void OOXMLFastContextHandler::resolvePicture(const rtl::OUString & rId)
+{
+ mpParserState->getDocument()->resolvePicture(*mpStream, rId);
+}
+
+void OOXMLFastContextHandler::resolveHeader
+(const sal_Int32 type, const rtl::OUString & rId)
+{
+ mpParserState->getDocument()->resolveHeader(*mpStream, type, rId);
+}
+
+void OOXMLFastContextHandler::resolveFooter
+(const sal_Int32 type, const rtl::OUString & rId)
+{
+ mpParserState->getDocument()->resolveFooter(*mpStream, type, rId);
+}
+
+void OOXMLFastContextHandler::resolveOLE(const rtl::OUString & rId)
+{
+ uno::Reference<io::XInputStream> xInputStream
+ (mpParserState->getDocument()->getInputStreamForId(rId));
+
+ OOXMLValue::Pointer_t aValue(new OOXMLInputStreamValue(xInputStream));
+
+ newProperty(NS_ooxml::LN_inputstream, aValue);
+}
+
+::rtl::OUString OOXMLFastContextHandler::getTargetForId
+(const ::rtl::OUString & rId)
+{
+ return mpParserState->getDocument()->getTargetForId(rId);
+}
+
+void OOXMLFastContextHandler::resolvePropertySetAttrs()
+{
+}
+
+void OOXMLFastContextHandler::sendPropertyToParent()
+{
+ if (mpParent != NULL)
+ {
+ OOXMLPropertySet::Pointer_t pProps(mpParent->getPropertySet());
+
+ if (pProps.get() != NULL)
+ {
+ OOXMLProperty::Pointer_t
+ pProp(new OOXMLPropertyImpl(mId, getValue(),
+ OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+ }
+ }
+}
+
+uno::Reference< uno::XComponentContext >
+OOXMLFastContextHandler::getComponentContext()
+{
+ return m_xContext;
+}
+
+/*
+ class OOXMLFastContextHandlerNoResource
+ */
+OOXMLFastContextHandlerNoResource::OOXMLFastContextHandlerNoResource
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext)
+{
+}
+
+OOXMLFastContextHandlerNoResource::~OOXMLFastContextHandlerNoResource()
+{
+}
+
+/*
+ class OOXMLFastContextHandlerStream
+ */
+
+OOXMLFastContextHandlerStream::OOXMLFastContextHandlerStream
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext),
+ mpPropertySetAttrs(new OOXMLPropertySetImpl())
+{
+}
+
+OOXMLFastContextHandlerStream::~OOXMLFastContextHandlerStream()
+{
+}
+
+void OOXMLFastContextHandlerStream::newProperty(const Id & rId,
+ OOXMLValue::Pointer_t pVal)
+{
+ if (rId != 0x0)
+ {
+ OOXMLPropertyImpl::Pointer_t pProperty
+ (new OOXMLPropertyImpl(rId, pVal, OOXMLPropertyImpl::ATTRIBUTE));
+
+ mpPropertySetAttrs->add(pProperty);
+ }
+}
+
+void OOXMLFastContextHandlerStream::sendProperty(Id nId)
+{
+#ifdef DEBUG_PROPERTIES
+ debug_logger->startElement("sendProperty");
+ debug_logger->attribute("id", (*QNameToString::Instance())(nId));
+ debug_logger->chars(xmlify(getPropertySetAttrs()->toString()));
+ debug_logger->endElement("sendProperty");
+#endif
+
+ OOXMLPropertySetEntryToString aHandler(nId);
+ getPropertySetAttrs()->resolve(aHandler);
+ const ::rtl::OUString & sText = aHandler.getString();
+ mpStream->utext(reinterpret_cast < const sal_uInt8 * >
+ (sText.getStr()),
+ sText.getLength());
+}
+
+void OOXMLFastContextHandlerStream::setPropertySetAttrs
+(OOXMLPropertySet::Pointer_t pPropertySetAttrs)
+{
+ mpPropertySetAttrs = pPropertySetAttrs;
+}
+
+OOXMLPropertySet::Pointer_t
+OOXMLFastContextHandlerStream::getPropertySetAttrs() const
+{
+ return mpPropertySetAttrs;
+}
+
+void OOXMLFastContextHandlerStream::resolvePropertySetAttrs()
+{
+#ifdef DEBUG_PROPERTIES
+ debug_logger->startElement("resolvePropertySetAttrs");
+ debug_logger->chars(mpPropertySetAttrs->toString());
+ debug_logger->endElement("resolvePropertySetAttrs");
+#endif
+ mpStream->props(mpPropertySetAttrs);
+}
+
+OOXMLPropertySet::Pointer_t OOXMLFastContextHandlerStream::getPropertySet()
+ const
+{
+ return getPropertySetAttrs();
+}
+
+void OOXMLFastContextHandlerStream::handleHyperlink()
+{
+ OOXMLHyperlinkHandler aHyperlinkHandler(this);
+ getPropertySetAttrs()->resolve(aHyperlinkHandler);
+}
+
+void OOXMLFastContextHandlerStream::lcl_characters
+(const ::rtl::OUString & rChars)
+throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ text(rChars);
+}
+
+/*
+ class OOXMLFastContextHandlerProperties
+ */
+OOXMLFastContextHandlerProperties::OOXMLFastContextHandlerProperties
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext), mpPropertySet(new OOXMLPropertySetImpl()),
+ mbResolve(false)
+{
+ if (pContext->getResource() == STREAM)
+ mbResolve = true;
+}
+
+OOXMLFastContextHandlerProperties::~OOXMLFastContextHandlerProperties()
+{
+}
+
+void OOXMLFastContextHandlerProperties::lcl_endFastElement
+(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ endAction(Element);
+
+ if (mbResolve)
+ {
+ if (isForwardEvents())
+ {
+#ifdef DEBUG_PROPERTIES
+ debug_logger->startElement("sendproperties");
+ debug_logger->addTag(toPropertiesTag(getPropertySet()));
+ debug_logger->endElement("sendproperties");
+#endif
+ mpStream->props(mpPropertySet);
+ }
+ }
+ else
+ {
+ OOXMLValue::Pointer_t pVal
+ (new OOXMLPropertySetValue(mpPropertySet));
+
+ OOXMLPropertyImpl::Pointer_t pProperty
+ (new OOXMLPropertyImpl(mId, pVal, OOXMLPropertyImpl::SPRM));
+
+ OOXMLPropertySet::Pointer_t pProperties = (*mpParent).getPropertySet();
+
+ if (pProperties.get() != NULL)
+ {
+#ifdef DEBUG_PROPERTIES
+ debug_logger->startElement("property");
+ debug_logger->chars(xmlify(pProperty->toString()));
+ debug_logger->endElement("property");
+#endif
+ pProperties->add(pProperty);
+ }
+#ifdef DEBUG_PROPERTIES
+ else if (! propagatesProperties())
+ {
+ debug_logger->startElement("warning");
+ debug_logger->chars("properties lost");
+ debug_logger->endElement("warning");
+ }
+#endif
+ }
+}
+
+OOXMLValue::Pointer_t OOXMLFastContextHandlerProperties::getValue() const
+{
+ return OOXMLValue::Pointer_t(new OOXMLPropertySetValue(mpPropertySet));
+}
+
+XMLTag::Pointer_t OOXMLFastContextHandlerProperties::toTag() const
+{
+ XMLTag::Pointer_t pTag(OOXMLFastContextHandler::toTag());
+ pTag->addAttr("resolve", mbResolve ? "resolve" : "noResolve");
+
+ return pTag;
+}
+
+void OOXMLFastContextHandlerProperties::newProperty
+(const Id & rId, OOXMLValue::Pointer_t pVal)
+{
+ if (rId != 0x0)
+ {
+ OOXMLPropertyImpl::Pointer_t pProperty
+ (new OOXMLPropertyImpl(rId, pVal, OOXMLPropertyImpl::ATTRIBUTE));
+
+ mpPropertySet->add(pProperty);
+ }
+}
+
+void OOXMLFastContextHandlerProperties::handleXNotes()
+{
+ switch (mnToken)
+ {
+ case NS_wordprocessingml|OOXML_footnoteReference:
+ {
+ OOXMLFootnoteHandler aFootnoteHandler(this);
+ mpPropertySet->resolve(aFootnoteHandler);
+ }
+ break;
+ case NS_wordprocessingml|OOXML_endnoteReference:
+ {
+ OOXMLEndnoteHandler aEndnoteHandler(this);
+ mpPropertySet->resolve(aEndnoteHandler);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void OOXMLFastContextHandlerProperties::handleHdrFtr()
+{
+ switch (mnToken)
+ {
+ case NS_wordprocessingml|OOXML_footerReference:
+ {
+ OOXMLFooterHandler aFooterHandler(this);
+ mpPropertySet->resolve(aFooterHandler);
+ }
+ break;
+ case NS_wordprocessingml|OOXML_headerReference:
+ {
+ OOXMLHeaderHandler aHeaderHandler(this);
+ mpPropertySet->resolve(aHeaderHandler);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void OOXMLFastContextHandlerProperties::handleComment()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("handleComment");
+#endif
+
+ OOXMLCommentHandler aCommentHandler(this);
+ getPropertySet()->resolve(aCommentHandler);
+}
+
+void OOXMLFastContextHandlerProperties::handlePicture()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("handlePicture");
+#endif
+
+ OOXMLPictureHandler aPictureHandler(this);
+ getPropertySet()->resolve(aPictureHandler);
+}
+
+void OOXMLFastContextHandlerProperties::handleBreak()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("handleBreak");
+#endif
+
+ OOXMLBreakHandler aBreakHandler(*mpStream, this);
+ getPropertySet()->resolve(aBreakHandler);
+}
+
+void OOXMLFastContextHandlerProperties::handleOLE()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("handleOLE");
+#endif
+
+ OOXMLOLEHandler aOLEHandler(this);
+ getPropertySet()->resolve(aOLEHandler);
+}
+
+void OOXMLFastContextHandlerProperties::setParent
+(OOXMLFastContextHandler * pParent)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("setParent");
+ debug_logger->chars("OOXMLFastContextHandlerProperties");
+ debug_logger->endElement("setParent");
+#endif
+
+ OOXMLFastContextHandler::setParent(pParent);
+
+ if (mpParent->getResource() == STREAM)
+ mbResolve = true;
+}
+
+void OOXMLFastContextHandlerProperties::setPropertySet
+(OOXMLPropertySet::Pointer_t pPropertySet)
+{
+ if (pPropertySet.get() != NULL)
+ 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)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ OOXMLPropertySet::Pointer_t pPropSet(mpPropertySet->clone());
+ OOXMLTableImpl::ValuePointer_t pTmpVal
+ (new OOXMLPropertySetValue(pPropSet));
+
+ mTable.add(pTmpVal);
+
+ writerfilter::Reference<Table>::Pointer_t pTable(mTable.clone());
+ mpStream->table(mId, pTable);
+
+ endAction(Element);
+}
+
+/*
+ class OOXMLFastContextHandlerBooleanValue
+ */
+
+OOXMLFastContextHandlerBooleanValue::OOXMLFastContextHandlerBooleanValue
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext), mbValue(true)
+{
+}
+
+OOXMLFastContextHandlerBooleanValue::~OOXMLFastContextHandlerBooleanValue()
+{
+}
+
+void OOXMLFastContextHandlerBooleanValue::attributes
+(const uno::Reference < xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (Attribs->hasAttribute(NS_wordprocessingml|OOXML_val))
+ mbValue = Attribs->getValue(NS_wordprocessingml|OOXML_val).toBoolean();
+}
+
+OOXMLValue::Pointer_t OOXMLFastContextHandlerBooleanValue::getValue() const
+{
+ return OOXMLValue::Pointer_t(new OOXMLBooleanValue(mbValue));
+}
+
+void OOXMLFastContextHandlerBooleanValue::setValue
+(const ::rtl::OUString & rString)
+{
+ static rtl::OUString sOn(RTL_CONSTASCII_USTRINGPARAM("on"));
+ static rtl::OUString sOff(RTL_CONSTASCII_USTRINGPARAM("off"));
+ static rtl::OUString sTrue(RTL_CONSTASCII_USTRINGPARAM("true"));
+ static rtl::OUString sFalse(RTL_CONSTASCII_USTRINGPARAM("false"));
+
+ if (rString == sOn || rString == sTrue)
+ mbValue = true;
+ else if (rString == sOff || rString == sFalse)
+ mbValue = false;
+}
+
+void OOXMLFastContextHandlerBooleanValue::lcl_endFastElement
+(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ sendPropertyToParent();
+
+ endAction(Element);
+}
+
+/*
+ class OOXMLFastContextHandlerIntegerValue
+ */
+
+OOXMLFastContextHandlerIntegerValue::OOXMLFastContextHandlerIntegerValue
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext), mnValue(0)
+{
+}
+
+OOXMLFastContextHandlerIntegerValue::~OOXMLFastContextHandlerIntegerValue()
+{
+}
+
+void OOXMLFastContextHandlerIntegerValue::attributes
+(const uno::Reference < xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (Attribs->hasAttribute(NS_wordprocessingml|OOXML_val))
+ mnValue = Attribs->getValue(NS_wordprocessingml|OOXML_val).toInt32();
+}
+
+void OOXMLFastContextHandlerIntegerValue::lcl_endFastElement
+(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ sendPropertyToParent();
+
+ endAction(Element);
+}
+
+OOXMLValue::Pointer_t OOXMLFastContextHandlerIntegerValue::getValue() const
+{
+ return OOXMLValue::Pointer_t(new OOXMLIntegerValue(mnValue));
+}
+
+/*
+ class OOXMLFastContextHandlerStringValue
+ */
+
+OOXMLFastContextHandlerStringValue::OOXMLFastContextHandlerStringValue
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext)
+{
+}
+
+OOXMLFastContextHandlerStringValue::~OOXMLFastContextHandlerStringValue()
+{
+}
+
+void OOXMLFastContextHandlerStringValue::attributes
+(const uno::Reference < xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (Attribs->hasAttribute(NS_wordprocessingml|OOXML_val))
+ msValue = Attribs->getValue(NS_wordprocessingml|OOXML_val);
+}
+
+void OOXMLFastContextHandlerStringValue::lcl_endFastElement
+(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ sendPropertyToParent();
+
+ endAction(Element);
+}
+
+OOXMLValue::Pointer_t OOXMLFastContextHandlerStringValue::getValue() const
+{
+ return OOXMLValue::Pointer_t(new OOXMLStringValue(msValue));
+}
+
+/*
+ class OOXMLFastContextHandlerHexValue
+ */
+
+OOXMLFastContextHandlerHexValue::OOXMLFastContextHandlerHexValue
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext), mnValue(0)
+{
+}
+
+OOXMLFastContextHandlerHexValue::~OOXMLFastContextHandlerHexValue()
+{
+}
+
+void OOXMLFastContextHandlerHexValue::attributes
+(const uno::Reference < xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (Attribs->hasAttribute(NS_wordprocessingml|OOXML_val))
+ mnValue = Attribs->getValue(NS_wordprocessingml|OOXML_val).toInt32(16);
+}
+
+void OOXMLFastContextHandlerHexValue::lcl_endFastElement
+(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ sendPropertyToParent();
+
+ endAction(Element);
+}
+
+OOXMLValue::Pointer_t OOXMLFastContextHandlerHexValue::getValue() const
+{
+ return OOXMLValue::Pointer_t(new OOXMLIntegerValue(mnValue));
+}
+
+/*
+ class OOXMLFastContextHandlerListValue
+ */
+
+OOXMLFastContextHandlerListValue::OOXMLFastContextHandlerListValue
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext)
+{
+}
+
+OOXMLFastContextHandlerListValue::~OOXMLFastContextHandlerListValue()
+{
+}
+
+void OOXMLFastContextHandlerListValue::lcl_endFastElement
+(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ sendPropertyToParent();
+
+ endAction(Element);
+}
+
+OOXMLValue::Pointer_t OOXMLFastContextHandlerListValue::getValue() const
+{
+ return mpValue;
+}
+
+/*
+ class OOXMLFastContextHandlerTable
+*/
+
+OOXMLFastContextHandlerTable::OOXMLFastContextHandlerTable
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext)
+{
+}
+
+OOXMLFastContextHandlerTable::~OOXMLFastContextHandlerTable()
+{
+}
+
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+OOXMLFastContextHandlerTable::createFastChildContext
+(Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ addCurrentChild();
+
+ mCurrentChild.set
+ (OOXMLFastContextHandler::createFastChildContext(Element, Attribs));
+
+ return mCurrentChild;
+}
+
+void OOXMLFastContextHandlerTable::lcl_endFastElement
+(Token_t /*Element*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ addCurrentChild();
+
+ writerfilter::Reference<Table>::Pointer_t pTable(mTable.clone());
+ if (isForwardEvents() && mId != 0x0)
+ mpStream->table(mId, pTable);
+}
+
+void OOXMLFastContextHandlerTable::addCurrentChild()
+{
+ OOXMLFastContextHandler * pHandler = mCurrentChild.getPointer();
+ if ( pHandler != NULL)
+ {
+ OOXMLValue::Pointer_t pValue(pHandler->getValue());
+
+ if (pValue.get() != NULL)
+ {
+ OOXMLTableImpl::ValuePointer_t pTmpVal(pValue->clone());
+ mTable.add(pTmpVal);
+ }
+ }
+}
+
+void OOXMLFastContextHandlerTable::newPropertySet
+(OOXMLPropertySet::Pointer_t /*pPropertySet*/)
+{
+
+}
+
+/*
+ class OOXMLFastContextHandlerXNote
+ */
+
+OOXMLFastContextHandlerXNote::OOXMLFastContextHandlerXNote
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext)
+{
+}
+
+OOXMLFastContextHandlerXNote::~OOXMLFastContextHandlerXNote()
+{
+}
+
+void OOXMLFastContextHandlerXNote::lcl_startFastElement
+(Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ mbForwardEventsSaved = isForwardEvents();
+
+ if (msMyXNoteId.compareTo(getXNoteId()) == 0)
+ setForwardEvents(true);
+ else
+ setForwardEvents(false);
+
+ startAction(Element);
+}
+
+void OOXMLFastContextHandlerXNote::lcl_endFastElement
+(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ endAction(Element);
+
+ setForwardEvents(mbForwardEventsSaved);
+}
+
+void OOXMLFastContextHandlerXNote::checkId(const rtl::OUString & rId)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("checkId");
+ debug_logger->attribute("myId", rId);
+ debug_logger->attribute("id", getXNoteId());
+ debug_logger->endElement("checkId");
+#endif
+
+ msMyXNoteId = rId;
+}
+
+/*
+ class OOXMLFastContextHandlerTextTableCell
+ */
+
+OOXMLFastContextHandlerTextTableCell::OOXMLFastContextHandlerTextTableCell
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext)
+{
+}
+
+OOXMLFastContextHandlerTextTableCell::~OOXMLFastContextHandlerTextTableCell()
+{
+}
+
+void OOXMLFastContextHandlerTextTableCell::startCell()
+{
+}
+
+void OOXMLFastContextHandlerTextTableCell::endCell()
+{
+ if (isForwardEvents())
+ {
+ OOXMLPropertySet * pProps = new OOXMLPropertySetImpl();
+ {
+ OOXMLValue::Pointer_t pVal
+ (new OOXMLIntegerValue(mnTableDepth));
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(0x6649, pVal, OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+ }
+ {
+ OOXMLValue::Pointer_t pVal
+ (new OOXMLIntegerValue(1));
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(0x2416, pVal, OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+ }
+ {
+ OOXMLValue::Pointer_t pVal
+ (new OOXMLIntegerValue(mnTableDepth));
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(0x244b, pVal, OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+ }
+
+#ifdef DEBUG_PROPERTIES
+ debug_logger->startElement("endcell");
+ debug_logger->addTag(toPropertiesTag
+ (OOXMLPropertySet::Pointer_t(pProps->clone())));
+ debug_logger->endElement("endcell");
+#endif
+ mpStream->props(writerfilter::Reference<Properties>::Pointer_t(pProps));
+ }
+}
+
+/*
+ class OOXMLFastContextHandlerTextTableRow
+ */
+
+OOXMLFastContextHandlerTextTableRow::OOXMLFastContextHandlerTextTableRow
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext)
+{
+ startRow();
+}
+
+OOXMLFastContextHandlerTextTableRow::~OOXMLFastContextHandlerTextTableRow()
+{
+ endRow();
+}
+
+void OOXMLFastContextHandlerTextTableRow::startRow()
+{
+}
+
+void OOXMLFastContextHandlerTextTableRow::endRow()
+{
+ startParagraphGroup();
+
+ if (isForwardEvents())
+ {
+ OOXMLPropertySet * pProps = new OOXMLPropertySetImpl();
+ {
+ OOXMLValue::Pointer_t pVal
+ (new OOXMLIntegerValue(mnTableDepth));
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(0x6649, pVal, OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+ }
+ {
+ OOXMLValue::Pointer_t pVal
+ (new OOXMLIntegerValue(1));
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(0x2416, pVal, OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+ }
+ {
+ OOXMLValue::Pointer_t pVal
+ (new OOXMLIntegerValue(1));
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(0x244c, pVal, OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+ }
+
+#ifdef DEBUG_PROPERTIES
+ debug_logger->startElement("endrow");
+ debug_logger->addTag(toPropertiesTag
+ (OOXMLPropertySet::Pointer_t(pProps->clone())));
+ debug_logger->endElement("endrow");
+#endif
+
+ mpStream->props(writerfilter::Reference<Properties>::Pointer_t(pProps));
+ mpParserState->resolveTableProperties(*mpStream);
+ }
+
+ startCharacterGroup();
+
+ if (isForwardEvents())
+ mpStream->utext(s0xd, 1);
+
+ endParagraphGroup();
+}
+
+/*
+ class OOXMLFastContextHandlerTextTable
+ */
+
+OOXMLFastContextHandlerTextTable::OOXMLFastContextHandlerTextTable
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext)
+{
+}
+
+OOXMLFastContextHandlerTextTable::~OOXMLFastContextHandlerTextTable()
+{
+}
+
+void OOXMLFastContextHandlerTextTable::lcl_startFastElement
+(Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ mnTableDepth++;
+
+ boost::shared_ptr<OOXMLPropertySet> pProps( new OOXMLPropertySetImpl );
+ {
+ OOXMLValue::Pointer_t pVal
+ (new OOXMLIntegerValue(mnTableDepth));
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(NS_ooxml::LN_tblStart, pVal, OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+ }
+ mpParserState->setCharacterProperties(pProps);
+
+ startAction(Element);
+}
+
+void OOXMLFastContextHandlerTextTable::lcl_endFastElement
+(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ endAction(Element);
+
+ mnTableDepth--;
+}
+
+/*
+ class OOXMLFastContextHandlerShape
+ */
+
+class ShapesNoAdd:
+ public ::cppu::WeakImplHelper1<
+ drawing::XShapes>
+{
+public:
+ explicit ShapesNoAdd(uno::Reference< uno::XComponentContext > const & context, uno::Reference< drawing::XShapes> const & xShapes);
+
+private:
+ // container::XElementAccess:
+ virtual uno::Type SAL_CALL getElementType() throw (uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL hasElements() throw (uno::RuntimeException);
+
+ // container::XIndexAccess:
+ virtual ::sal_Int32 SAL_CALL getCount() throw (uno::RuntimeException);
+ virtual uno::Any SAL_CALL getByIndex(::sal_Int32 Index) throw (uno::RuntimeException, lang::IndexOutOfBoundsException, lang::WrappedTargetException);
+
+ // drawing::XShapes:
+ virtual void SAL_CALL add(const uno::Reference< drawing::XShape > & xShape) throw (uno::RuntimeException);
+ virtual void SAL_CALL remove(const uno::Reference< drawing::XShape > & xShape) throw (uno::RuntimeException);
+
+ ShapesNoAdd(ShapesNoAdd &); // not defined
+ void operator =(ShapesNoAdd &); // not defined
+
+ virtual ~ShapesNoAdd() {}
+
+ uno::Reference< uno::XComponentContext > m_xContext;
+ uno::Reference< drawing::XShapes > m_xShapes;
+};
+
+ShapesNoAdd::ShapesNoAdd(uno::Reference< uno::XComponentContext > const & context, uno::Reference< drawing::XShapes> const & xShapes) :
+m_xContext(context), m_xShapes(xShapes)
+{}
+
+// container::XElementAccess:
+uno::Type SAL_CALL ShapesNoAdd::getElementType() throw (uno::RuntimeException)
+{
+ return m_xShapes->getElementType();
+}
+
+::sal_Bool SAL_CALL ShapesNoAdd::hasElements() throw (uno::RuntimeException)
+{
+ return m_xShapes->hasElements();
+}
+
+// container::XIndexAccess:
+::sal_Int32 SAL_CALL ShapesNoAdd::getCount() throw (uno::RuntimeException)
+{
+ return m_xShapes->getCount();
+}
+
+uno::Any SAL_CALL ShapesNoAdd::getByIndex(::sal_Int32 Index) throw (uno::RuntimeException, lang::IndexOutOfBoundsException, lang::WrappedTargetException)
+{
+ return m_xShapes->getByIndex(Index);
+}
+
+// drawing::XShapes:
+void SAL_CALL ShapesNoAdd::add(const uno::Reference< drawing::XShape > &
+ ) throw (uno::RuntimeException)
+{
+}
+
+void SAL_CALL ShapesNoAdd::remove(const uno::Reference< drawing::XShape > & xShape) throw (uno::RuntimeException)
+{
+ m_xShapes->remove(xShape);
+}
+
+OOXMLFastContextHandlerShape::OOXMLFastContextHandlerShape
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandlerProperties(pContext), m_bShapeSent( false )
+{
+ uno::Reference<uno::XComponentContext> xContext(getComponentContext());
+ if (xContext.is())
+ {
+ uno::Reference<XMultiComponentFactory> rServiceManager
+ (xContext->getServiceManager());
+
+ mrShapeContext.set
+ (rServiceManager->
+ createInstanceWithContext
+ (::rtl::OUString
+ (RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.xml.sax.FastShapeContextHandler")), xContext),
+ uno::UNO_QUERY);
+
+ if (mrShapeContext.is())
+ {
+ mrShapeContext->setModel(getDocument()->getModel());
+ mrShapeContext->setDrawPage(getDocument()->getDrawPage());
+ mrShapeContext->setInputStream(getDocument()->getStorageStream());
+
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("setRelationFragmentPath");
+ debug_logger->attribute("path", mpParserState->getTarget());
+ debug_logger->endElement("setRelationFragmentPath");
+#endif
+ mrShapeContext->setRelationFragmentPath
+ (mpParserState->getTarget());
+ }
+#ifdef DEBUG_CONTEXT_STACK
+ else
+ {
+ debug_logger->startElement("error");
+ debug_logger->chars("failed to get shape handler");
+ debug_logger->endElement("error");
+ }
+#endif
+ }
+}
+
+OOXMLFastContextHandlerShape::~OOXMLFastContextHandlerShape()
+{
+}
+
+void OOXMLFastContextHandlerShape::lcl_startFastElement
+(Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ startAction(Element);
+
+ if (mrShapeContext.is())
+ {
+ mrShapeContext->startFastElement(Element, Attribs);
+ }
+}
+
+void SAL_CALL OOXMLFastContextHandlerShape::startUnknownElement
+(const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (mrShapeContext.is())
+ mrShapeContext->startUnknownElement(Namespace, Name, Attribs);
+}
+
+void OOXMLFastContextHandlerShape::setToken(Token_t nToken)
+{
+ OOXMLFastContextHandler::setToken(nToken);
+
+ if (mrShapeContext.is())
+ mrShapeContext->setStartToken(nToken);
+}
+
+void OOXMLFastContextHandlerShape::sendShape( Token_t Element )
+{
+ if ( mrShapeContext.is() && !m_bShapeSent )
+ {
+ uno::Reference<drawing::XShape> xShape(mrShapeContext->getShape());
+ if (xShape.is())
+ {
+ OOXMLValue::Pointer_t
+ pValue(new OOXMLShapeValue(xShape));
+ newProperty(NS_ooxml::LN_shape, pValue);
+ m_bShapeSent = true;
+
+ bool bIsPicture = Element == ( NS_picture | OOXML_pic );
+
+ // Notify the dmapper that the shape is ready to use
+ if ( !bIsPicture )
+ mpStream->startShape( xShape );
+ }
+ }
+}
+
+void OOXMLFastContextHandlerShape::lcl_endFastElement
+(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ 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 == ( NS_picture | OOXML_pic );
+ if ( !bIsPicture )
+ mpStream->endShape( );
+}
+
+void SAL_CALL OOXMLFastContextHandlerShape::endUnknownElement
+(const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ 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)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ uno::Reference< xml::sax::XFastContextHandler > xContextHandler;
+
+ sal_uInt32 nNamespace = Element & 0xffff0000;
+
+ switch (nNamespace)
+ {
+ case NS_wordprocessingml:
+ case NS_vml_wordprocessingDrawing:
+ case NS_office:
+ xContextHandler.set(createFromStart(Element, Attribs));
+ break;
+ default:
+ if (mrShapeContext.is())
+ {
+ uno::Reference<XFastContextHandler> pChildContext =
+ mrShapeContext->createFastChildContext(Element, Attribs);
+
+ OOXMLFastContextHandlerWrapper * pWrapper =
+ new OOXMLFastContextHandlerWrapper(this, pChildContext);
+
+ pWrapper->addNamespace(NS_wordprocessingml);
+ pWrapper->addNamespace(NS_vml_wordprocessingDrawing);
+ pWrapper->addNamespace(NS_office);
+ pWrapper->addToken( NS_vml|OOXML_textbox );
+
+ xContextHandler.set(pWrapper);
+ }
+ else
+ xContextHandler.set(this);
+ break;
+ }
+
+
+ return xContextHandler;
+}
+
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+OOXMLFastContextHandlerShape::createUnknownChildContext
+(const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ uno::Reference< xml::sax::XFastContextHandler > xResult;
+
+ if (mrShapeContext.is())
+ xResult.set(mrShapeContext->createUnknownChildContext
+ (Namespace, Name, Attribs));
+
+ return xResult;
+}
+
+void OOXMLFastContextHandlerShape::lcl_characters
+(const ::rtl::OUString & aChars)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (mrShapeContext.is())
+ mrShapeContext->characters(aChars);
+}
+
+/*
+ class OOXMLFastContextHandlerWrapper
+*/
+
+OOXMLFastContextHandlerWrapper::OOXMLFastContextHandlerWrapper
+(OOXMLFastContextHandler * pParent,
+ uno::Reference<XFastContextHandler> xContext)
+: OOXMLFastContextHandler(pParent), mxContext(xContext)
+{
+ if (pParent != NULL)
+ {
+ setId(pParent->getId());
+ setToken(pParent->getToken());
+ setPropertySet(pParent->getPropertySet());
+ }
+}
+
+OOXMLFastContextHandlerWrapper::~OOXMLFastContextHandlerWrapper()
+{
+}
+
+void SAL_CALL OOXMLFastContextHandlerWrapper::startUnknownElement
+(const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (mxContext.is())
+ mxContext->startUnknownElement(Namespace, Name, Attribs);
+}
+
+void SAL_CALL OOXMLFastContextHandlerWrapper::endUnknownElement
+(const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (mxContext.is())
+ mxContext->endUnknownElement(Namespace, Name);
+}
+
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+OOXMLFastContextHandlerWrapper::createUnknownChildContext
+(const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ uno::Reference< xml::sax::XFastContextHandler > xResult;
+
+ if (mxContext.is())
+ xResult = mxContext->createUnknownChildContext
+ (Namespace, Name, Attribs);
+ else
+ xResult.set(this);
+
+ return xResult;
+}
+
+void OOXMLFastContextHandlerWrapper::attributes
+(const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (mxContext.is())
+ {
+ OOXMLFastContextHandler * pHandler = getFastContextHandler();
+ if (pHandler != NULL)
+ pHandler->attributes(Attribs);
+ }
+}
+
+OOXMLFastContextHandler::ResourceEnum_t
+OOXMLFastContextHandlerWrapper::getResource() const
+{
+ return UNKNOWN;
+}
+
+void OOXMLFastContextHandlerWrapper::addNamespace(const 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)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (mxContext.is())
+ mxContext->startFastElement(Element, Attribs);
+}
+
+void OOXMLFastContextHandlerWrapper::lcl_endFastElement
+(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (mxContext.is())
+ mxContext->endFastElement(Element);
+}
+
+uno::Reference< xml::sax::XFastContextHandler >
+OOXMLFastContextHandlerWrapper::lcl_createFastChildContext
+(Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ uno::Reference< xml::sax::XFastContextHandler > xResult;
+
+ Id nNameSpace = Element & 0xffff0000;
+
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("Wrapper-createChildContext");
+ debug_logger->attribute("token", fastTokenToId(Element));
+
+ set<Id>::const_iterator aIt(mMyNamespaces.begin());
+ while (aIt != mMyNamespaces.end())
+ {
+ debug_logger->startElement("namespace");
+ debug_logger->attribute("id", fastTokenToId(*aIt));
+ debug_logger->endElement("namespace");
+
+ aIt++;
+ }
+
+ debug_logger->endElement("Wrapper-createChildContext");
+#endif
+
+ bool bInNamespaces = mMyNamespaces.find(nNameSpace) != mMyNamespaces.end();
+ bool bInTokens = mMyTokens.find( Element ) != mMyTokens.end( );
+ if ( bInNamespaces )
+ xResult.set(createFromStart(Element, Attribs));
+ else if (mxContext.is())
+ {
+ OOXMLFastContextHandlerWrapper * pWrapper =
+ new OOXMLFastContextHandlerWrapper
+ (this, mxContext->createFastChildContext(Element, Attribs));
+ pWrapper->mMyNamespaces = mMyNamespaces;
+ pWrapper->setPropertySet(getPropertySet());
+ xResult.set(pWrapper);
+ }
+ else
+ xResult.set(this);
+
+ if ( bInTokens )
+ {
+ OOXMLFastContextHandlerShape* pShapeCtx = (OOXMLFastContextHandlerShape*)mpParent;
+ pShapeCtx->sendShape( Element );
+ }
+
+ return xResult;
+}
+
+void OOXMLFastContextHandlerWrapper::lcl_characters
+(const ::rtl::OUString & aChars)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (mxContext.is())
+ mxContext->characters(aChars);
+}
+
+OOXMLFastContextHandler *
+OOXMLFastContextHandlerWrapper::getFastContextHandler() const
+{
+ if (mxContext.is())
+ return dynamic_cast<OOXMLFastContextHandler *>(mxContext.get());
+
+ return NULL;
+}
+
+void OOXMLFastContextHandlerWrapper::newProperty
+(const Id & rId, OOXMLValue::Pointer_t pVal)
+{
+ if (mxContext.is())
+ {
+ OOXMLFastContextHandler * pHandler = getFastContextHandler();
+ if (pHandler != NULL)
+ pHandler->newProperty(rId, pVal);
+ }
+}
+
+void OOXMLFastContextHandlerWrapper::setPropertySet
+(OOXMLPropertySet::Pointer_t pPropertySet)
+{
+ if (mxContext.is())
+ {
+ OOXMLFastContextHandler * pHandler = getFastContextHandler();
+ if (pHandler != NULL)
+ pHandler->setPropertySet(pPropertySet);
+ }
+
+ mpPropertySet = pPropertySet;
+}
+
+OOXMLPropertySet::Pointer_t OOXMLFastContextHandlerWrapper::getPropertySet()
+ const
+{
+ OOXMLPropertySet::Pointer_t pResult(mpPropertySet);
+
+ if (mxContext.is())
+ {
+ OOXMLFastContextHandler * pHandler = getFastContextHandler();
+ if (pHandler != NULL)
+ pResult = pHandler->getPropertySet();
+ }
+
+ return pResult;
+}
+
+string OOXMLFastContextHandlerWrapper::getType() const
+{
+ string sResult = "Wrapper(";
+
+ if (mxContext.is())
+ {
+ OOXMLFastContextHandler * pHandler = getFastContextHandler();
+ if (pHandler != NULL)
+ sResult += pHandler->getType();
+ }
+
+ sResult += ")";
+
+ return sResult;
+}
+
+void OOXMLFastContextHandlerWrapper::setId(Id rId)
+{
+ OOXMLFastContextHandler::setId(rId);
+
+ if (mxContext.is())
+ {
+ OOXMLFastContextHandler * pHandler = getFastContextHandler();
+ if (pHandler != NULL)
+ pHandler->setId(rId);
+ }
+}
+
+Id OOXMLFastContextHandlerWrapper::getId() const
+{
+ Id nResult = OOXMLFastContextHandler::getId();
+
+ if (mxContext.is())
+ {
+ OOXMLFastContextHandler * pHandler = getFastContextHandler();
+ if (pHandler != NULL && pHandler->getId() != 0)
+ nResult = pHandler->getId();
+ }
+
+ return nResult;
+}
+
+void OOXMLFastContextHandlerWrapper::setToken(Token_t nToken)
+{
+ OOXMLFastContextHandler::setToken(nToken);
+
+ if (mxContext.is())
+ {
+ OOXMLFastContextHandler * pHandler = getFastContextHandler();
+ if (pHandler != NULL)
+ pHandler->setToken(nToken);
+ }
+}
+
+Token_t OOXMLFastContextHandlerWrapper::getToken() const
+{
+ Token_t nResult = OOXMLFastContextHandler::getToken();
+
+ if (mxContext.is())
+ {
+ OOXMLFastContextHandler * pHandler = getFastContextHandler();
+ if (pHandler != NULL)
+ nResult = pHandler->getToken();
+ }
+
+ return nResult;
+}
+
+}}
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
new file mode 100644
index 000000000000..26e040182f57
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
@@ -0,0 +1,696 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_OOXML_FAST_CONTEXT_HANDLER_HXX
+#define INCLUDED_OOXML_FAST_CONTEXT_HANDLER_HXX
+
+#include <com/sun/star/xml/sax/XFastShapeContextHandler.hpp>
+
+#include <string>
+#include <set>
+#include "sal/config.h"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "cppuhelper/implbase1.hxx"
+#include "com/sun/star/xml/sax/XFastContextHandler.hpp"
+#include "OOXMLParserState.hxx"
+#include "OOXMLPropertySetImpl.hxx"
+#include "OOXMLDocumentImpl.hxx"
+#include "RefAndPointer.hxx"
+#include <ooxml/OOXMLFastTokens.hxx>
+
+namespace writerfilter {
+namespace ooxml
+{
+using namespace ::std;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::xml::sax;
+
+typedef boost::shared_ptr<Stream> StreamPointer_t;
+
+class OOXMLFastContextHandler:
+ public ::cppu::WeakImplHelper1<
+ xml::sax::XFastContextHandler>
+{
+public:
+ typedef RefAndPointer<XFastContextHandler, OOXMLFastContextHandler>
+ RefAndPointer_t;
+ typedef boost::shared_ptr<OOXMLFastContextHandler> Pointer_t;
+
+ enum ResourceEnum_t { UNKNOWN, STREAM, PROPERTIES, TABLE, SHAPE };
+
+ OOXMLFastContextHandler();
+ explicit OOXMLFastContextHandler
+ (uno::Reference< uno::XComponentContext > const & context);
+
+ explicit OOXMLFastContextHandler
+ (OOXMLFastContextHandler * pContext);
+
+ virtual ~OOXMLFastContextHandler();
+
+ // ::com::sun::star::xml::sax::XFastContextHandler:
+ virtual void SAL_CALL startFastElement
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void SAL_CALL startUnknownElement
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void SAL_CALL endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void SAL_CALL endUnknownElement
+ (const ::rtl::OUString & Namespace, const ::rtl::OUString & Name)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ createFastChildContext
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ createUnknownChildContext
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void SAL_CALL characters(const ::rtl::OUString & aChars)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ static const uno::Sequence< sal_Int8 > & getUnoTunnelId();
+ virtual sal_Int64 SAL_CALL getSomething(const uno::Sequence<sal_Int8> & rId)
+ throw (uno::RuntimeException);
+
+ // 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 string getType() const { return "??"; }
+
+ virtual ResourceEnum_t getResource() const { return UNKNOWN; }
+
+ static XMLTag::Pointer_t toPropertiesTag(OOXMLPropertySet::Pointer_t);
+ virtual XMLTag::Pointer_t toTag() const;
+ virtual string toString() const;
+
+ virtual void attributes
+ (const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void newProperty(const Id & rId, OOXMLValue::Pointer_t pVal);
+ virtual void setPropertySet(OOXMLPropertySet::Pointer_t pPropertySet);
+ virtual OOXMLPropertySet::Pointer_t getPropertySet() const;
+
+ virtual void setToken(Token_t nToken);
+ virtual Token_t getToken() const;
+
+ void mark(const Id & rId, OOXMLValue::Pointer_t pVal);
+
+ void resolveFootnote(const rtl::OUString & rId);
+ void resolveEndnote(const rtl::OUString & rId);
+ void resolveComment(const rtl::OUString & rId);
+ void resolvePicture(const rtl::OUString & rId);
+ void resolveHeader(const sal_Int32 type,
+ const rtl::OUString & rId);
+ void resolveFooter(const sal_Int32 type,
+ const rtl::OUString & rId);
+ void resolveOLE(const rtl::OUString & rId);
+
+ ::rtl::OUString getTargetForId(const ::rtl::OUString & rId);
+
+ uno::Reference < xml::sax::XFastContextHandler >
+ createFromStart
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs);
+
+ void setDocument(OOXMLDocument * pDocument);
+ OOXMLDocument * getDocument();
+ void setXNoteId(const ::rtl::OUString & rId);
+ const rtl::OUString & getXNoteId() const;
+ void setForwardEvents(bool bForwardEvents);
+ bool isForwardEvents() const;
+ virtual void setParent(OOXMLFastContextHandler * pParent);
+ virtual void setId(Id nId);
+ virtual Id getId() const;
+
+ void setFallback(bool bFallbac);
+ bool isFallback() const;
+
+ OOXMLParserState::Pointer_t getParserState() const;
+
+#ifdef DEBUG_MEMORY
+ virtual void SAL_CALL acquire() throw();
+ virtual void SAL_CALL release() throw();
+#endif
+
+ sal_uInt32 getInstanceNumber() const;
+
+ static void dumpOpenContexts();
+
+protected:
+ OOXMLFastContextHandler * mpParent;
+ Id mId;
+ Token_t mnToken;
+
+#ifdef DEBUG_CONTEXT_STACK
+ string msTokenString;
+#endif
+
+ // 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;
+
+ virtual void lcl_startFastElement
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual uno::Reference< xml::sax::XFastContextHandler >
+ lcl_createFastChildContext
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void lcl_characters(const ::rtl::OUString & aChars)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ void startAction(Token_t Element);
+ virtual void lcl_startAction(Token_t Element);
+ void endAction(Token_t Element);
+ virtual void lcl_endAction(Token_t Element);
+
+
+ // Returns string for resource of this context. (debug)
+ string getResourceString() const;
+
+ virtual OOXMLPropertySet * getPicturePropSet
+ (const ::rtl::OUString & rId);
+ virtual void resolvePropertySetAttrs();
+
+ void sendTableDepth() const;
+ void setHandle();
+
+ void startSectionGroup();
+ void setLastParagraphInSection();
+ void endSectionGroup();
+ void startParagraphGroup();
+ void endParagraphGroup();
+ void startCharacterGroup();
+ void endCharacterGroup();
+
+ void startField();
+ void fieldSeparator();
+ void endField();
+ void ftnednref();
+ void ftnedncont();
+ void ftnednsep();
+ void pgNum();
+ void tab();
+ void cr();
+ void noBreakHyphen();
+ void softHyphen();
+ void handleLastParagraphInSection();
+ void endOfParagraph();
+ void text(const ::rtl::OUString & sText);
+ virtual void propagateCharacterProperties();
+ virtual void propagateCharacterPropertiesAsSet(const Id & rId);
+ virtual bool propagatesProperties() const;
+ void sendPropertiesWithId(const Id & rId);
+ void propagateTableProperties();
+ void clearProps();
+
+ void sendPropertyToParent();
+
+ uno::Reference< uno::XComponentContext > getComponentContext();
+
+ sal_uInt32 mnInstanceNumber;
+ sal_uInt32 mnRefCount;
+private:
+ void operator =(OOXMLFastContextHandler &); // not defined
+
+ uno::Reference< uno::XComponentContext > m_xContext;
+
+ static sal_uInt32 mnInstanceCount;
+
+ bool mbFallback;
+};
+
+class OOXMLFastContextHandlerNoResource : public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerNoResource(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerNoResource();
+};
+
+class OOXMLFastContextHandlerStream : public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerStream(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerStream();
+
+ virtual ResourceEnum_t getResource() const { return STREAM; }
+
+ OOXMLPropertySet::Pointer_t getPropertySetAttrs() const;
+
+ virtual void newProperty(const Id & rId, OOXMLValue::Pointer_t pVal);
+ virtual void sendProperty(Id nId);
+ virtual OOXMLPropertySet::Pointer_t getPropertySet() const;
+
+ void handleHyperlink();
+
+protected:
+ void setPropertySetAttrs(OOXMLPropertySet::Pointer_t pPropertySetAttrs);
+ virtual void resolvePropertySetAttrs();
+ virtual void lcl_characters(const ::rtl::OUString & aChars)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+private:
+ mutable OOXMLPropertySet::Pointer_t mpPropertySetAttrs;
+};
+
+class OOXMLFastContextHandlerProperties : public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerProperties(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerProperties();
+
+ virtual OOXMLValue::Pointer_t getValue() const;
+ virtual ResourceEnum_t getResource() const { return PROPERTIES; }
+
+ virtual XMLTag::Pointer_t toTag() const;
+
+ virtual void newProperty(const Id & nId, OOXMLValue::Pointer_t pVal);
+
+ void handleXNotes();
+ void handleHdrFtr();
+ void handleComment();
+ void handlePicture();
+ void handleBreak();
+ void handleOLE();
+
+ virtual void setPropertySet(OOXMLPropertySet::Pointer_t pPropertySet);
+ virtual OOXMLPropertySet::Pointer_t getPropertySet() const;
+
+protected:
+ /// the properties
+ OOXMLPropertySet::Pointer_t mpPropertySet;
+
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual void setParent(OOXMLFastContextHandler * pParent);
+
+private:
+
+ bool mbResolve;
+};
+
+class OOXMLFastContextHandlerPropertyTable :
+ public OOXMLFastContextHandlerProperties
+{
+public:
+ OOXMLFastContextHandlerPropertyTable(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerPropertyTable();
+
+protected:
+ OOXMLTableImpl mTable;
+
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ };
+
+class OOXMLFastContextHandlerBooleanValue :
+ public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerBooleanValue
+ (OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerBooleanValue();
+
+protected:
+ bool mbValue;
+
+ virtual void attributes
+ (const uno::Reference < xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual OOXMLValue::Pointer_t getValue() const;
+ void setValue(const ::rtl::OUString & rString);
+};
+
+class OOXMLFastContextHandlerIntegerValue :
+ public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerIntegerValue
+ (OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerIntegerValue();
+
+protected:
+ sal_Int32 mnValue;
+
+ void attributes
+ (const uno::Reference < xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual OOXMLValue::Pointer_t getValue() const;
+};
+
+class OOXMLFastContextHandlerStringValue :
+ public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerStringValue
+ (OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerStringValue();
+
+protected:
+ ::rtl::OUString msValue;
+
+ void attributes
+ (const uno::Reference < xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual OOXMLValue::Pointer_t getValue() const;
+};
+
+class OOXMLFastContextHandlerHexValue :
+ public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerHexValue
+ (OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerHexValue();
+
+protected:
+ sal_Int32 mnValue;
+
+ void attributes
+ (const uno::Reference < xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual OOXMLValue::Pointer_t getValue() const;
+};
+
+class OOXMLFastContextHandlerListValue :
+ public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerListValue
+ (OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerListValue();
+
+protected:
+ mutable OOXMLValue::Pointer_t mpValue;
+
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual OOXMLValue::Pointer_t getValue() const;
+};
+
+class OOXMLFastContextHandlerTable : public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerTable(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerTable();
+
+ virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ createFastChildContext
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void newPropertySet(OOXMLPropertySet::Pointer_t pPropertySet);
+protected:
+ OOXMLTableImpl mTable;
+
+ RefAndPointer_t mCurrentChild;
+
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual ResourceEnum_t getResource() const { return TABLE; }
+
+ void addCurrentChild();
+};
+
+class OOXMLFastContextHandlerXNote : public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerXNote(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerXNote();
+
+ void checkId(const rtl::OUString & rId);
+private:
+ bool mbForwardEventsSaved;
+ ::rtl::OUString msMyXNoteId;
+
+ virtual void lcl_startFastElement
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual ResourceEnum_t getResource() const { return STREAM; }
+};
+
+class OOXMLFastContextHandlerTextTableCell : public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerTextTableCell
+ (OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerTextTableCell();
+
+ void startCell();
+ void endCell();
+};
+
+class OOXMLFastContextHandlerTextTableRow : public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerTextTableRow
+ (OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerTextTableRow();
+
+ void startRow();
+ void endRow();
+};
+
+class OOXMLFastContextHandlerTextTable : public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerTextTable
+ (OOXMLFastContextHandler * pContext);
+
+ virtual ~OOXMLFastContextHandlerTextTable();
+
+protected:
+ virtual void lcl_startFastElement
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+};
+
+class OOXMLFastContextHandlerShape: public OOXMLFastContextHandlerProperties
+{
+private:
+ bool m_bShapeSent;
+
+public:
+ explicit OOXMLFastContextHandlerShape
+ (OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerShape();
+
+ // ::com::sun::star::xml::sax::XFastContextHandler:
+ virtual void SAL_CALL startUnknownElement
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void SAL_CALL endUnknownElement
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ createUnknownChildContext
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void setToken(Token_t nToken);
+
+ virtual ResourceEnum_t getResource() const { return SHAPE; }
+
+ void sendShape( Token_t Element );
+
+protected:
+ typedef uno::Reference<XFastShapeContextHandler> ShapeContextRef;
+ ShapeContextRef mrShapeContext;
+
+ virtual void lcl_startFastElement
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual uno::Reference< xml::sax::XFastContextHandler >
+ lcl_createFastChildContext
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void lcl_characters(const ::rtl::OUString & aChars)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+};
+
+/**
+ OOXMLFastContextHandlerWrapper wraps an OOXMLFastContextHandler.
+
+ The method calls for the interface
+ ::com::sun::star::xml::sax::XFastContextHandler are forwarded to the wrapped
+ OOXMLFastContextHandler.
+ */
+class OOXMLFastContextHandlerWrapper : public OOXMLFastContextHandler
+{
+public:
+ explicit OOXMLFastContextHandlerWrapper
+ (OOXMLFastContextHandler * pParent,
+ uno::Reference<XFastContextHandler> xContext);
+ virtual ~OOXMLFastContextHandlerWrapper();
+
+ // ::com::sun::star::xml::sax::XFastContextHandler:
+ virtual void SAL_CALL startUnknownElement
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void SAL_CALL endUnknownElement
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ createUnknownChildContext
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void attributes
+ (const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual ResourceEnum_t getResource() const;
+
+ void addNamespace(const Id & nId);
+ void addToken( Token_t Element );
+
+ virtual void newProperty(const Id & rId, OOXMLValue::Pointer_t pVal);
+ virtual void setPropertySet(OOXMLPropertySet::Pointer_t pPropertySet);
+ virtual OOXMLPropertySet::Pointer_t getPropertySet() const;
+
+ virtual string getType() const;
+
+protected:
+ virtual void lcl_startFastElement
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual uno::Reference< xml::sax::XFastContextHandler >
+ lcl_createFastChildContext
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void lcl_characters(const ::rtl::OUString & aChars)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void setId(Id nId);
+ virtual Id getId() const;
+
+ virtual void setToken(Token_t nToken);
+ virtual Token_t getToken() const;
+
+private:
+ uno::Reference<XFastContextHandler> mxContext;
+ set<Id> mMyNamespaces;
+ set<Token_t> mMyTokens;
+ OOXMLPropertySet::Pointer_t mpPropertySet;
+
+ OOXMLFastContextHandler * getFastContextHandler() const;
+};
+}}
+#endif // INCLUDED_OOXML_FAST_CONTEXT_HANDLER_HXX
diff --git a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx
new file mode 100644
index 000000000000..e9a7ece6a487
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx
@@ -0,0 +1,225 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <iostream>
+#include <boost/shared_ptr.hpp>
+#include "OOXMLFastDocumentHandler.hxx"
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+
+namespace writerfilter {
+namespace ooxml
+{
+using namespace ::com::sun::star;
+using namespace ::std;
+
+
+OOXMLFastDocumentHandler::OOXMLFastDocumentHandler
+(uno::Reference< uno::XComponentContext > const & context)
+: m_xContext(context)
+{}
+
+// ::com::sun::star::xml::sax::XFastContextHandler:
+void SAL_CALL OOXMLFastDocumentHandler::startFastElement
+(::sal_Int32
+#ifdef DEBUG_CONTEXT_STACK
+Element
+#endif
+, const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_STACK
+ clog << this << ":start element:"
+ << fastTokenToId(Element)
+ << endl;
+#endif
+}
+
+void SAL_CALL OOXMLFastDocumentHandler::startUnknownElement
+(const ::rtl::OUString &
+#ifdef DEBUG_CONTEXT_STACK
+Namespace
+#endif
+, const ::rtl::OUString &
+#ifdef DEBUG_CONTEXT_STACK
+Name
+#endif
+,
+ const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
+throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_STACK
+ clog << this << ":start unknown element:"
+ << OUStringToOString(Namespace, RTL_TEXTENCODING_ASCII_US).getStr()
+ << ":"
+ << OUStringToOString(Name, RTL_TEXTENCODING_ASCII_US).getStr()
+ << endl;
+#endif
+}
+
+void SAL_CALL OOXMLFastDocumentHandler::endFastElement(::sal_Int32
+#ifdef DEBUG_CONTEXT_STACK
+Element
+#endif
+)
+throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_STACK
+ clog << this << ":end element:"
+ << fastTokenToId(Element)
+ << endl;
+#endif
+}
+
+void SAL_CALL OOXMLFastDocumentHandler::endUnknownElement
+(const ::rtl::OUString &
+#ifdef DEBUG_CONTEXT_STACK
+Namespace
+#endif
+, const ::rtl::OUString &
+#ifdef DEBUG_CONTEXT_STACK
+Name
+#endif
+)
+throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_STACK
+ clog << this << ":end unknown element:"
+ << OUStringToOString(Namespace, RTL_TEXTENCODING_ASCII_US).getStr()
+ << ":"
+ << OUStringToOString(Name, RTL_TEXTENCODING_ASCII_US).getStr()
+ << endl;
+#endif
+}
+
+OOXMLFastContextHandler::Pointer_t
+OOXMLFastDocumentHandler::getContextHandler() const
+{
+ if (mpContextHandler == OOXMLFastContextHandler::Pointer_t())
+ {
+ mpContextHandler.reset
+ (new OOXMLFastContextHandler(m_xContext));
+ mpContextHandler->setStream(mpStream);
+ mpContextHandler->setDocument(mpDocument);
+ mpContextHandler->setXNoteId(msXNoteId);
+ mpContextHandler->setForwardEvents(true);
+ }
+
+ return mpContextHandler;
+}
+
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ OOXMLFastDocumentHandler::createFastChildContext
+(::sal_Int32 Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_STACK
+ clog << this << ":createFastChildContext:"
+ << fastTokenToId(Element)
+ << endl;
+#endif
+
+ return getContextHandler()->createFromStart(Element, Attribs);
+}
+
+OOXMLParserState::Pointer_t OOXMLFastDocumentHandler::getParserState() const
+{
+ OOXMLParserState::Pointer_t pParserState;
+
+ return getContextHandler()->getParserState();
+}
+
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+OOXMLFastDocumentHandler::createUnknownChildContext
+(const ::rtl::OUString &
+#ifdef DEBUG_CONTEXT_STACK
+Namespace
+#endif
+,
+ const ::rtl::OUString &
+#ifdef DEBUG_CONTEXT_STACK
+Name
+#endif
+, const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_STACK
+ clog << this << ":createUnknownChildContext:"
+ << OUStringToOString(Namespace, RTL_TEXTENCODING_ASCII_US).getStr()
+ << ":"
+ << OUStringToOString(Name, RTL_TEXTENCODING_ASCII_US).getStr()
+ << endl;
+#endif
+
+ return uno::Reference< xml::sax::XFastContextHandler >
+ (new OOXMLFastDocumentHandler(m_xContext));
+}
+
+void SAL_CALL OOXMLFastDocumentHandler::characters(const ::rtl::OUString & /*aChars*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ // TODO: Insert your implementation for "characters" here.
+}
+
+// ::com::sun::star::xml::sax::XFastDocumentHandler:
+void SAL_CALL OOXMLFastDocumentHandler::startDocument()
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+}
+
+void SAL_CALL OOXMLFastDocumentHandler::endDocument()
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_STACK
+ OOXMLFastContextHandler::dumpOpenContexts();
+#endif
+}
+
+void SAL_CALL OOXMLFastDocumentHandler::setDocumentLocator
+(const uno::Reference< xml::sax::XLocator > & /*xLocator*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ // TODO: Insert your implementation for "setDocumentLocator" here.
+}
+
+void OOXMLFastDocumentHandler::setStream(Stream * pStream)
+{
+ mpStream = pStream;
+}
+
+void OOXMLFastDocumentHandler::setDocument(OOXMLDocument * pDocument)
+{
+ mpDocument = pDocument;
+}
+
+void OOXMLFastDocumentHandler::setXNoteId(const ::rtl::OUString & rXNoteId)
+{
+ msXNoteId = rXNoteId;
+}
+
+}}
diff --git a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx
new file mode 100644
index 000000000000..a95fd3306d3a
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx
@@ -0,0 +1,114 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_OOXML_FAST_DOCUMENT_HANDLER_HXX
+#define INCLUDED_OOXML_FAST_DOCUMENT_HANDLER_HXX
+
+#include <sal/config.h>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <cppuhelper/implbase1.hxx>
+#include <com/sun/star/xml/sax/XFastDocumentHandler.hpp>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <ooxml/OOXMLDocument.hxx>
+#include "OOXMLParserState.hxx"
+
+namespace writerfilter {
+namespace ooxml
+{
+using namespace ::com::sun::star;
+
+class OOXMLFastContextHandler;
+
+class OOXMLFastDocumentHandler:
+ public ::cppu::WeakImplHelper1<
+ xml::sax::XFastDocumentHandler>
+{
+public:
+ OOXMLFastDocumentHandler
+ (uno::Reference< uno::XComponentContext > const & context);
+ virtual ~OOXMLFastDocumentHandler() {}
+
+ // ::com::sun::star::xml::sax::XFastDocumentHandler:
+ virtual void SAL_CALL startDocument()
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual void SAL_CALL endDocument()
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual void SAL_CALL setDocumentLocator
+ (const uno::Reference< xml::sax::XLocator > & xLocator)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ // ::com::sun::star::xml::sax::XFastContextHandler:
+ virtual void SAL_CALL startFastElement
+ (::sal_Int32 Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual void SAL_CALL startUnknownElement
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual void SAL_CALL endFastElement(::sal_Int32 Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual void SAL_CALL endUnknownElement
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ createFastChildContext
+ (::sal_Int32 Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ createUnknownChildContext
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual void SAL_CALL characters(const ::rtl::OUString & aChars)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ void setStream(Stream * pStream);
+ void setDocument(OOXMLDocument * pDocument);
+ void setXNoteId(const ::rtl::OUString & rXNoteId);
+
+ OOXMLParserState::Pointer_t getParserState() const;
+
+private:
+ OOXMLFastDocumentHandler(OOXMLFastDocumentHandler &); // not defined
+ void operator =(OOXMLFastDocumentHandler &); // not defined
+
+ uno::Reference< uno::XComponentContext > m_xContext;
+
+ Stream * mpStream;
+ OOXMLDocument * mpDocument;
+ ::rtl::OUString msXNoteId;
+ mutable boost::shared_ptr<OOXMLFastContextHandler> mpContextHandler;
+ boost::shared_ptr<OOXMLFastContextHandler> getContextHandler() const;
+};
+}}
+
+#endif // INCLUDED_OOXML_FAST_DOCUMENT_HANDLER_HXX
diff --git a/writerfilter/source/ooxml/OOXMLFastHelper.hxx b/writerfilter/source/ooxml/OOXMLFastHelper.hxx
new file mode 100644
index 000000000000..ff0e30e4da0f
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLFastHelper.hxx
@@ -0,0 +1,221 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_FAST_HELPER_HXX
+#define INCLUDED_FAST_HELPER_HXX
+
+#include <iostream>
+#include <resourcemodel/QNameToString.hxx>
+#include "OOXMLFastContextHandler.hxx"
+#include "ooxmlLoggers.hxx"
+namespace writerfilter {
+
+namespace ooxml
+{
+using namespace ::std;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::xml::sax;
+
+template <class T>
+class OOXMLFastHelper
+{
+public:
+ static uno::Reference<XFastContextHandler> createAndSetParent
+ (OOXMLFastContextHandler * pHandler, sal_uInt32 nToken, Id nId);
+
+ static uno::Reference<XFastContextHandler> createAndSetParentRef
+ (OOXMLFastContextHandler * pHandler, sal_uInt32 nToken,
+ const uno::Reference < xml::sax::XFastAttributeList > & Attribs);
+
+ static void newProperty(OOXMLFastContextHandler * pHandler,
+ Id nId,
+ const ::rtl::OUString & rValue);
+
+ static void newProperty(OOXMLFastContextHandler * pHandler,
+ Id nId, sal_Int32 nValue);
+
+ static void mark(OOXMLFastContextHandler * pHandler,
+ Id nId,
+ const ::rtl::OUString & rValue);
+
+ static void attributes
+ (OOXMLFastContextHandler * pContext,
+ const uno::Reference < xml::sax::XFastAttributeList > & Attribs);
+};
+
+template <class T>
+uno::Reference<XFastContextHandler>
+OOXMLFastHelper<T>::createAndSetParent
+(OOXMLFastContextHandler * pHandler, sal_uInt32 nToken, Id nId)
+{
+ OOXMLFastContextHandler * pTmp = new T(pHandler);
+ OOXMLFastContextHandler::RefAndPointer_t aResult(pTmp);
+
+ pTmp->setToken(nToken);
+ pTmp->setId(nId);
+
+#ifdef DEBUG_CREATE
+ debug_logger->startElement("createAndSetParent");
+ debug_logger->attribute("context", pHandler->getType());
+ debug_logger->attribute("token", fastTokenToId(pTmp->getToken()));
+ debug_logger->attribute("id", (*QNameToString::Instance())(nId));
+ if (pTmp->isFallback())
+ debug_logger->attribute("fallback", "yes");
+
+ debug_logger->startElement("created");
+ debug_logger->addTag(pTmp->toTag());
+ debug_logger->endElement("created");
+ debug_logger->endElement("createAndSetParent");
+#endif
+
+ return aResult;
+}
+
+template <class T>
+uno::Reference<XFastContextHandler>
+OOXMLFastHelper<T>::createAndSetParentRef
+(OOXMLFastContextHandler * pHandler, sal_uInt32 nToken,
+ const uno::Reference < xml::sax::XFastAttributeList > & Attribs)
+{
+ boost::shared_ptr<OOXMLFastContextHandler> pTmp(new T(pHandler));
+
+ uno::Reference<XFastContextHandler> xChild =
+ pTmp->createFastChildContext(nToken, Attribs);
+
+ OOXMLFastContextHandler * pResult = NULL;
+ if (xChild.is())
+ {
+ pResult = dynamic_cast<OOXMLFastContextHandler *>(xChild.get());
+ pResult->setToken(nToken);
+ pResult->setParent(pHandler);
+ }
+
+
+#ifdef DEBUG_CREATE
+ debug_logger->startElement("createAndSetParentRef");
+ debug_logger->attribute("context", pHandler->getType());
+ debug_logger->attribute("type", fastTokenToId(nToken));
+
+ if (pTmp->isFallback())
+ debug_logger->attribute("fallback", "yes");
+
+ debug_logger->startElement("created");
+ debug_logger->chars(pTmp->getType());
+ debug_logger->endElement("created");
+ debug_logger->endElement("createAndSetParentRef");
+#endif
+
+ return xChild;
+}
+
+template <class T>
+void OOXMLFastHelper<T>::newProperty(OOXMLFastContextHandler * pHandler,
+ Id nId,
+ const ::rtl::OUString & rValue)
+{
+ OOXMLValue::Pointer_t pVal(new T(rValue));
+
+ string aStr = (*QNameToString::Instance())(nId);
+
+#ifdef DEBUG_PROPERTIES
+ debug_logger->startElement("newProperty");
+ debug_logger->attribute("name", aStr);
+ debug_logger->attribute
+ ("value",
+ ::rtl::OUStringToOString
+ (rValue, RTL_TEXTENCODING_ASCII_US).getStr());
+
+ if (aStr.size() == 0)
+ debug_logger->addTag(XMLTag::Pointer_t(new XMLTag("unknown-qname")));
+
+ debug_logger->endElement("newProperty");
+#endif
+
+ pHandler->newProperty(nId, pVal);
+}
+
+template <class T>
+void OOXMLFastHelper<T>::newProperty(OOXMLFastContextHandler * pHandler,
+ Id nId,
+ sal_Int32 nVal)
+{
+ OOXMLValue::Pointer_t pVal(new T(nVal));
+
+ string aStr = (*QNameToString::Instance())(nId);
+
+#ifdef DEBUG_PROPERTIES
+ debug_logger->startElement("newProperty");
+ debug_logger->attribute("name", aStr);
+ debug_logger->attribute("value", pVal->toString());
+
+ if (aStr.size() == 0)
+ debug_logger->addTag(XMLTag::Pointer_t(new XMLTag("unknown-qname")));
+
+ debug_logger->endElement("newProperty");
+#endif
+
+ pHandler->newProperty(nId, pVal);
+}
+
+template <class T>
+void OOXMLFastHelper<T>::mark(OOXMLFastContextHandler * pHandler,
+ Id nId,
+ const ::rtl::OUString & rValue)
+{
+ OOXMLValue::Pointer_t pVal(new T(rValue));
+
+ string aStr = (*QNameToString::Instance())(nId);
+
+#ifdef DEBUG_PROPERTIES
+ debug_logger->startElement("mark");
+ debug_logger->attribute("name", aStr);
+ debug_logger->attribute
+ ("value",
+ ::rtl::OUStringToOString
+ (rValue, RTL_TEXTENCODING_ASCII_US).getStr());
+
+ if (aStr.size() == 0)
+ debug_logger->addTag(XMLTag::Pointer_t(new XMLTag("unknown-qname")));
+
+ debug_logger->endElement("mark");
+#endif
+
+ pHandler->mark(nId, pVal);
+}
+
+template <class T>
+void OOXMLFastHelper<T>::attributes
+(OOXMLFastContextHandler * pContext,
+ const uno::Reference < xml::sax::XFastAttributeList > & Attribs)
+ {
+ T aContext(pContext);
+
+ aContext.setPropertySet(pContext->getPropertySet());
+ aContext.attributes(Attribs);
+}
+
+}}
+#endif // INCLUDED_FAST_HELPER_HXX
diff --git a/writerfilter/source/ooxml/OOXMLFastTokenHandler.cxx b/writerfilter/source/ooxml/OOXMLFastTokenHandler.cxx
new file mode 100644
index 000000000000..bb44111195d2
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLFastTokenHandler.cxx
@@ -0,0 +1,119 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <iostream>
+#include <string.h>
+#include <ooxml/resourceids.hxx>
+#include "OOXMLFastTokenHandler.hxx"
+#include "gperffasttoken.hxx"
+
+namespace writerfilter {
+namespace ooxml
+{
+
+using namespace ::std;
+
+OOXMLFastTokenHandler::OOXMLFastTokenHandler
+(css::uno::Reference< css::uno::XComponentContext > const & context)
+: m_xContext(context)
+{}
+
+// ::com::sun::star::xml::sax::XFastTokenHandler:
+::sal_Int32 SAL_CALL OOXMLFastTokenHandler::getToken(const ::rtl::OUString & Identifier)
+ throw (css::uno::RuntimeException)
+{
+ ::sal_Int32 nResult = OOXML_FAST_TOKENS_END;
+
+ struct tokenmap::token * pToken =
+ tokenmap::Perfect_Hash::in_word_set
+ (OUStringToOString(Identifier, RTL_TEXTENCODING_ASCII_US).getStr(),
+ Identifier.getLength());
+
+ if (pToken != NULL)
+ nResult = pToken->nToken;
+
+#ifdef DEBUG_TOKEN
+ clog << "getToken: "
+ << OUStringToOString(Identifier, RTL_TEXTENCODING_ASCII_US).getStr()
+ << ", " << nResult
+ << endl;
+#endif
+
+ return nResult;
+}
+
+::rtl::OUString SAL_CALL OOXMLFastTokenHandler::getIdentifier(::sal_Int32 Token)
+ throw (css::uno::RuntimeException)
+{
+ ::rtl::OUString sResult;
+
+ if ( Token >= 0 || Token < OOXML_FAST_TOKENS_END )
+ {
+ static ::rtl::OUString aTokens[OOXML_FAST_TOKENS_END];
+
+ if (aTokens[Token].getLength() == 0)
+ aTokens[Token] = ::rtl::OUString::createFromAscii
+ (tokenmap::wordlist[Token].name);
+ }
+
+ return sResult;
+}
+
+css::uno::Sequence< ::sal_Int8 > SAL_CALL OOXMLFastTokenHandler::getUTF8Identifier(::sal_Int32 Token)
+ throw (css::uno::RuntimeException)
+{
+ if ( Token < 0 || Token >= OOXML_FAST_TOKENS_END )
+ return css::uno::Sequence< ::sal_Int8 >();
+
+ return css::uno::Sequence< ::sal_Int8 >(reinterpret_cast< const sal_Int8 *>(tokenmap::wordlist[Token].name), strlen(tokenmap::wordlist[Token].name));
+}
+
+::sal_Int32 SAL_CALL OOXMLFastTokenHandler::getTokenFromUTF8
+(const css::uno::Sequence< ::sal_Int8 > & Identifier) throw (css::uno::RuntimeException)
+{
+ ::sal_Int32 nResult = OOXML_FAST_TOKENS_END;
+
+ struct tokenmap::token * pToken =
+ tokenmap::Perfect_Hash::in_word_set
+ (reinterpret_cast<const char *>(Identifier.getConstArray()),
+ Identifier.getLength());
+
+ if (pToken != NULL)
+ nResult = pToken->nToken;
+
+#ifdef DEBUG_TOKEN
+ clog << "getTokenFromUTF8: "
+ << string(reinterpret_cast<const char *>
+ (Identifier.getConstArray()), Identifier.getLength())
+ << ", " << nResult
+ << (pToken == NULL ? ", failed" : "") << endl;
+#endif
+
+ return nResult;
+}
+
+}}
diff --git a/writerfilter/source/ooxml/OOXMLFastTokenHandler.hxx b/writerfilter/source/ooxml/OOXMLFastTokenHandler.hxx
new file mode 100644
index 000000000000..5debd7224cb9
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLFastTokenHandler.hxx
@@ -0,0 +1,65 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_OOXML_FAST_TOKEN_HANDLER_HXX
+#define INCLUDED_OOXML_FAST_TOKEN_HANDLER_HXX
+
+#include "sal/config.h"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "cppuhelper/implbase1.hxx"
+#include "com/sun/star/xml/sax/XFastTokenHandler.hpp"
+
+namespace css = ::com::sun::star;
+
+namespace writerfilter {
+namespace ooxml
+{
+
+class OOXMLFastTokenHandler:
+ public ::cppu::WeakImplHelper1<
+ css::xml::sax::XFastTokenHandler>
+{
+public:
+ explicit OOXMLFastTokenHandler(css::uno::Reference< css::uno::XComponentContext > const & context);
+
+ // ::com::sun::star::xml::sax::XFastTokenHandler:
+ virtual ::sal_Int32 SAL_CALL getToken(const ::rtl::OUString & Identifier) throw (css::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getIdentifier(::sal_Int32 Token) throw (css::uno::RuntimeException);
+ virtual css::uno::Sequence< ::sal_Int8 > SAL_CALL getUTF8Identifier(::sal_Int32 Token) throw (css::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getTokenFromUTF8(const css::uno::Sequence< ::sal_Int8 > & Identifier) throw (css::uno::RuntimeException);
+
+private:
+ OOXMLFastTokenHandler(OOXMLFastTokenHandler &); // not defined
+ void operator =(OOXMLFastTokenHandler &); // not defined
+
+ virtual ~OOXMLFastTokenHandler() {}
+
+ css::uno::Reference< css::uno::XComponentContext > m_xContext;
+};
+
+}}
+#endif // INCLUDED_OOXML_FAST_TOKEN_HANDLER_HXX
diff --git a/writerfilter/source/ooxml/OOXMLParserState.cxx b/writerfilter/source/ooxml/OOXMLParserState.cxx
new file mode 100644
index 000000000000..255f97558cb3
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLParserState.cxx
@@ -0,0 +1,275 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <stdio.h>
+#include <iostream>
+#include "OOXMLParserState.hxx"
+#include "ooxmlLoggers.hxx"
+
+namespace writerfilter {
+namespace ooxml
+{
+/*
+ class OOXMLParserState
+*/
+
+OOXMLParserState::OOXMLParserState() :
+ mbInSectionGroup(false),
+ mbInParagraphGroup(false),
+ mbInCharacterGroup(false),
+ mbLastParagraphInSection(false),
+ mbForwardEvents(true),
+ mnContexts(0),
+ mnHandle(0),
+ mpDocument(NULL)
+{
+}
+
+OOXMLParserState::~OOXMLParserState()
+{
+}
+
+void OOXMLParserState::setLastParagraphInSection(bool bLastParagraphInSection)
+{
+ mbLastParagraphInSection = bLastParagraphInSection;
+}
+
+bool OOXMLParserState::isLastParagraphInSection() const
+{
+ return mbLastParagraphInSection;
+}
+
+bool OOXMLParserState::isInSectionGroup() const
+{
+ return mbInSectionGroup;
+}
+
+void OOXMLParserState::setInSectionGroup(bool bInSectionGroup)
+{
+ mbInSectionGroup = bInSectionGroup;
+}
+
+bool OOXMLParserState::isInParagraphGroup() const
+{
+ return mbInParagraphGroup;
+}
+
+void OOXMLParserState::setInParagraphGroup(bool bInParagraphGroup)
+{
+ mbInParagraphGroup = bInParagraphGroup;
+}
+
+bool OOXMLParserState::isInCharacterGroup() const
+{
+ return mbInCharacterGroup;
+}
+
+void OOXMLParserState::setInCharacterGroup(bool bInCharacterGroup)
+{
+ mbInCharacterGroup = bInCharacterGroup;
+}
+
+void OOXMLParserState::setForwardEvents(bool bForwardEvents)
+{
+ mbForwardEvents = bForwardEvents;
+}
+
+bool OOXMLParserState::isForwardEvents() const
+{
+ return mbForwardEvents;
+}
+
+void OOXMLParserState::incContextCount()
+{
+ mnContexts++;
+}
+
+const string OOXMLParserState::getHandle() const
+{
+ char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer), "%d", mnHandle);
+
+ return sBuffer;
+}
+
+void OOXMLParserState::setHandle()
+{
+ mnHandle = mnContexts;
+}
+
+unsigned int OOXMLParserState::getContextCount() const
+{
+ return mnContexts;
+}
+
+void OOXMLParserState::setDocument(OOXMLDocument * pDocument)
+{
+ mpDocument = pDocument;
+}
+
+OOXMLDocument * OOXMLParserState::getDocument() const
+{
+ return mpDocument;
+}
+
+void OOXMLParserState::setXNoteId(const rtl::OUString & rId)
+{
+ mpDocument->setXNoteId(rId);
+}
+
+const rtl::OUString & OOXMLParserState::getXNoteId() const
+{
+ return mpDocument->getXNoteId();
+}
+
+void OOXMLParserState::setXNoteType(const Id & rId)
+{
+ mpDocument->setXNoteType(rId);
+}
+
+const Id & OOXMLParserState::getXNoteType() const
+{
+ return mpDocument->getXNoteType();
+}
+
+const ::rtl::OUString & OOXMLParserState::getTarget() const
+{
+ return mpDocument->getTarget();
+}
+
+void OOXMLParserState::newCharacterProperty(const Id & rId,
+ OOXMLValue::Pointer_t pVal)
+{
+ if (rId != 0x0)
+ {
+ if (mpCharacterProps.get() == NULL)
+ mpCharacterProps =
+ OOXMLPropertySet::Pointer_t(new OOXMLPropertySetImpl());
+
+ OOXMLPropertyImpl::Pointer_t pProperty
+ (new OOXMLPropertyImpl(rId, pVal, OOXMLPropertyImpl::ATTRIBUTE));
+
+#ifdef DEBUG_PROPERTIES
+ debug_logger->startElement("<newCharacterProperty");
+ debug_logger->chars(pProperty->toString());
+ debug_logger->endElement("newCharacterProperty");
+#endif
+
+ mpCharacterProps->add(pProperty);
+ }
+
+}
+
+void OOXMLParserState::resolveCharacterProperties(Stream & rStream)
+{
+ if (mpCharacterProps.get() != NULL)
+ {
+#ifdef DEBUG_PROPERTIES
+ debug_logger->startElement("resolveCharacterProperties");
+ debug_logger->chars(mpCharacterProps->toString());
+ debug_logger->endElement("resolveCharacterProperties");
+#endif
+ rStream.props(mpCharacterProps);
+ mpCharacterProps.reset(new OOXMLPropertySetImpl());
+ }
+}
+
+OOXMLPropertySet::Pointer_t OOXMLParserState::getCharacterProperties() const
+{
+ return mpCharacterProps;
+}
+
+void OOXMLParserState::setCharacterProperties
+(OOXMLPropertySet::Pointer_t pProps)
+{
+ if (mpCharacterProps.get() == NULL)
+ mpCharacterProps = pProps;
+ else
+ mpCharacterProps->add(pProps);
+}
+
+void OOXMLParserState::resolveTableProperties(Stream & rStream)
+{
+ if (mpTableProps.get() != NULL)
+ {
+ rStream.props(mpTableProps);
+ mpTableProps.reset(new OOXMLPropertySetImpl());
+ }
+}
+
+void OOXMLParserState::setTableProperties
+(OOXMLPropertySet::Pointer_t pProps)
+{
+ if (mpTableProps.get() == NULL)
+ mpTableProps = pProps;
+ else
+ mpTableProps->add(pProps);
+}
+
+XMLTag::Pointer_t OOXMLParserState::toTag() const
+{
+ XMLTag::Pointer_t pTag(new XMLTag("parserstate"));
+
+ string sTmp;
+
+ if (isInSectionGroup())
+ sTmp += "s";
+ else
+ sTmp += "-";
+
+ if (isInParagraphGroup())
+ sTmp += "p";
+ else
+ sTmp += "-";
+
+ if (isInCharacterGroup())
+ sTmp += "c";
+ else
+ sTmp += "-";
+
+ if (isForwardEvents())
+ sTmp += "f";
+ else
+ sTmp += "-";
+
+ pTag->addAttr("state", sTmp);
+ pTag->addAttr("XNoteId",
+ OUStringToOString(getXNoteId(),
+ RTL_TEXTENCODING_ASCII_US).getStr());
+ if (mpCharacterProps != OOXMLPropertySet::Pointer_t())
+ pTag->chars(mpCharacterProps->toString());
+
+ return pTag;
+ }
+
+string OOXMLParserState::toString() const
+{
+ return toTag()->toString();
+}
+
+}}
diff --git a/writerfilter/source/ooxml/OOXMLParserState.hxx b/writerfilter/source/ooxml/OOXMLParserState.hxx
new file mode 100644
index 000000000000..2953e00a499f
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLParserState.hxx
@@ -0,0 +1,102 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDE_OOXML_PARSER_STATE_HXX
+#define INCLUDE_OOXML_PARSER_STATE_HXX
+
+#include <ooxml/OOXMLDocument.hxx>
+#include <resourcemodel/TagLogger.hxx>
+#include "OOXMLPropertySetImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml
+{
+
+class OOXMLParserState
+{
+ bool mbInSectionGroup;
+ bool mbInParagraphGroup;
+ bool mbInCharacterGroup;
+ bool mbLastParagraphInSection;
+ bool mbForwardEvents;
+ unsigned int mnContexts;
+ unsigned int mnHandle;
+ OOXMLDocument * mpDocument;
+ rtl::OUString msXNoteId;
+ rtl::OUString msTarget;
+ OOXMLPropertySet::Pointer_t mpCharacterProps;
+ OOXMLPropertySet::Pointer_t mpTableProps;
+
+public:
+ typedef boost::shared_ptr<OOXMLParserState> Pointer_t;
+
+ OOXMLParserState();
+ virtual ~OOXMLParserState();
+
+ bool isInSectionGroup() const;
+ void setInSectionGroup(bool bInSectionGroup);
+
+ void setLastParagraphInSection(bool bLastParagraphInSection);
+ bool isLastParagraphInSection() const;
+
+ bool isInParagraphGroup() const;
+ void setInParagraphGroup(bool bInParagraphGroup);
+
+ bool isInCharacterGroup() const;
+ void setInCharacterGroup(bool bInCharacterGroup);
+
+ void setForwardEvents(bool bForwardEvents);
+ bool isForwardEvents() const;
+
+ void incContextCount();
+ const string getHandle() const;
+ void setHandle();
+ unsigned int getContextCount() const;
+
+ void setDocument(OOXMLDocument * pDocument);
+ OOXMLDocument * getDocument() const;
+
+ void setXNoteId(const rtl::OUString & rId);
+ const rtl::OUString & getXNoteId() const;
+ void setXNoteType(const Id & rId);
+ const Id & getXNoteType() const;
+
+ const rtl::OUString & getTarget() const;
+
+ void newCharacterProperty(const Id & rId, OOXMLValue::Pointer_t pVal);
+ void resolveCharacterProperties(Stream & rStream);
+ OOXMLPropertySet::Pointer_t getCharacterProperties() const;
+ void setCharacterProperties(OOXMLPropertySet::Pointer_t pProps);
+ void resolveTableProperties(Stream & rStream);
+ void setTableProperties(OOXMLPropertySet::Pointer_t pProps);
+
+ string toString() const;
+ XMLTag::Pointer_t toTag() const;
+};
+
+}}
+
+#endif // INCLUDE_OOXML_PARSER_STATE_HXX
diff --git a/writerfilter/source/ooxml/OOXMLPropertySet.hxx b/writerfilter/source/ooxml/OOXMLPropertySet.hxx
new file mode 100644
index 000000000000..d448b58cc304
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLPropertySet.hxx
@@ -0,0 +1,82 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_OOXML_PROPERTY_SET_HXX
+#define INCLUDED_OOXML_PROPERTY_SET_HXX
+
+#include <resourcemodel/WW8ResourceModel.hxx>
+
+namespace writerfilter {
+namespace ooxml
+{
+
+class OOXMLProperty : public Sprm
+{
+public:
+ typedef boost::shared_ptr<OOXMLProperty> Pointer_t;
+
+ virtual ~OOXMLProperty();
+
+ virtual sal_uInt32 getId() const = 0;
+ virtual Value::Pointer_t getValue() = 0;
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary() = 0;
+ virtual writerfilter::Reference<Stream>::Pointer_t getStream() = 0;
+ virtual writerfilter::Reference<Properties>::Pointer_t getProps() = 0;
+ virtual string getName() const = 0;
+ virtual string toString() const = 0;
+ virtual void resolve(Properties & rProperties) = 0;
+
+ virtual Sprm * clone() = 0;
+};
+
+class OOXMLPropertySet : public writerfilter::Reference<Properties>
+{
+public:
+ typedef boost::shared_ptr<OOXMLPropertySet> Pointer_t;
+
+ virtual ~OOXMLPropertySet();
+
+ virtual void resolve(Properties & rHandler) = 0;
+ virtual string getType() const = 0;
+ virtual void add(OOXMLProperty::Pointer_t pProperty) = 0;
+ virtual void add(OOXMLPropertySet::Pointer_t pPropertySet) = 0;
+ virtual OOXMLPropertySet * clone() const = 0;
+ virtual void setType(const string & rsType) = 0;
+
+ virtual string toString() = 0;
+};
+
+class OOXMLTable : public writerfilter::Reference<Table>
+{
+public:
+ virtual ~OOXMLTable();
+
+ virtual void resolve(Table & rTable) = 0;
+ virtual OOXMLTable * clone() const = 0;
+};
+}}
+
+#endif // INCLUDED_OOXML_PROPERTY_SET_HXX
diff --git a/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx b/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx
new file mode 100644
index 000000000000..6f9bf9a3480d
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx
@@ -0,0 +1,777 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "OOXMLPropertySetImpl.hxx"
+#include <stdio.h>
+#include <iostream>
+#include <resourcemodel/QNameToString.hxx>
+#include <com/sun/star/drawing/XShape.hpp>
+
+//#define DEBUG_RESOLVE
+
+namespace writerfilter {
+namespace ooxml
+{
+using namespace ::std;
+
+static ::rtl::OUString strue(RTL_CONSTASCII_USTRINGPARAM("true"));
+static ::rtl::OUString sTrue(RTL_CONSTASCII_USTRINGPARAM("True"));
+static ::rtl::OUString s1(RTL_CONSTASCII_USTRINGPARAM("1"));
+static ::rtl::OUString sOn(RTL_CONSTASCII_USTRINGPARAM("On"));
+static ::rtl::OUString son(RTL_CONSTASCII_USTRINGPARAM("on"));
+
+OOXMLProperty::~OOXMLProperty()
+{
+}
+
+OOXMLPropertySet::~OOXMLPropertySet()
+{
+}
+
+OOXMLTable::~OOXMLTable()
+{
+}
+
+OOXMLPropertyImpl::OOXMLPropertyImpl(Id id, OOXMLValue::Pointer_t pValue,
+ OOXMLPropertyImpl::Type_t eType)
+: mId(id), mpValue(pValue), meType(eType)
+{
+}
+
+OOXMLPropertyImpl::OOXMLPropertyImpl(const OOXMLPropertyImpl & rSprm)
+: OOXMLProperty(), mId(rSprm.mId), mpValue(rSprm.mpValue), meType(rSprm.meType)
+{
+}
+
+OOXMLPropertyImpl::~OOXMLPropertyImpl()
+{
+}
+
+sal_uInt32 OOXMLPropertyImpl::getId() const
+{
+ return mId;
+}
+
+Value::Pointer_t OOXMLPropertyImpl::getValue()
+{
+ Value::Pointer_t pResult;
+
+ if (mpValue.get() != NULL)
+ pResult = Value::Pointer_t(mpValue->clone());
+ else
+ pResult = Value::Pointer_t(new OOXMLValue());
+
+ return pResult;
+}
+
+writerfilter::Reference<BinaryObj>::Pointer_t OOXMLPropertyImpl::getBinary()
+{
+ writerfilter::Reference<BinaryObj>::Pointer_t pResult;
+
+ if (mpValue.get() != NULL)
+ pResult = mpValue->getBinary();
+
+ return pResult;
+}
+
+writerfilter::Reference<Stream>::Pointer_t OOXMLPropertyImpl::getStream()
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ if (mpValue.get() != NULL)
+ pResult = mpValue->getStream();
+
+ return pResult;
+}
+
+writerfilter::Reference<Properties>::Pointer_t OOXMLPropertyImpl::getProps()
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ if (mpValue.get() != NULL)
+ pResult = mpValue->getProperties();
+
+ return pResult;
+}
+
+string OOXMLPropertyImpl::getName() const
+{
+ string sResult = (*QNameToString::Instance())(mId);
+
+ if (sResult.length() == 0)
+ sResult = (*SprmIdToString::Instance())(mId);
+
+ return sResult;
+}
+
+string OOXMLPropertyImpl::toString() const
+{
+ string sResult = "(";
+
+ sResult += getName();
+ sResult += ", ";
+ if (mpValue.get() != NULL)
+ sResult += mpValue->toString();
+ else
+ sResult +="(null)";
+ sResult +=")";
+
+ return sResult;
+}
+
+Sprm::Kind OOXMLPropertyImpl::getKind()
+{
+ return SprmKind(getId());
+}
+
+Sprm * OOXMLPropertyImpl::clone()
+{
+ return new OOXMLPropertyImpl(*this);
+}
+
+void OOXMLPropertyImpl::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(const rtl::OUString & /*rValue*/)
+{
+}
+
+OOXMLValue::~OOXMLValue()
+{
+}
+
+bool OOXMLValue::getBool() const
+{
+ return false;
+}
+
+int OOXMLValue::getInt() const
+{
+ return 0;
+}
+
+::rtl::OUString OOXMLValue::getString() const
+{
+ return ::rtl::OUString();
+}
+
+uno::Any OOXMLValue::getAny() const
+{
+ return uno::Any();
+}
+
+writerfilter::Reference<Properties>::Pointer_t OOXMLValue::getProperties()
+{
+ return writerfilter::Reference<Properties>::Pointer_t();
+}
+
+writerfilter::Reference<Stream>::Pointer_t OOXMLValue::getStream()
+{
+ return writerfilter::Reference<Stream>::Pointer_t();
+}
+
+writerfilter::Reference<BinaryObj>::Pointer_t OOXMLValue::getBinary()
+{
+ return writerfilter::Reference<BinaryObj>::Pointer_t();
+}
+
+string OOXMLValue::toString() const
+{
+ return "OOXMLValue";
+}
+
+OOXMLValue * OOXMLValue::clone() const
+{
+ return new OOXMLValue(*this);
+}
+
+/*
+ class OOXMLBinaryValue
+ */
+
+OOXMLBinaryValue::OOXMLBinaryValue(OOXMLBinaryObjectReference::Pointer_t
+ pBinaryObj)
+: mpBinaryObj(pBinaryObj)
+{
+}
+
+OOXMLBinaryValue::~OOXMLBinaryValue()
+{
+}
+
+writerfilter::Reference<BinaryObj>::Pointer_t OOXMLBinaryValue::getBinary()
+{
+ return mpBinaryObj;
+}
+
+string OOXMLBinaryValue::toString() const
+{
+ return "BinaryObj";
+}
+
+OOXMLValue * OOXMLBinaryValue::clone() const
+{
+ return new OOXMLBinaryValue(mpBinaryObj);
+}
+
+/*
+ class OOXMLBooleanValue
+*/
+
+OOXMLBooleanValue::OOXMLBooleanValue(bool bValue)
+: mbValue(bValue)
+{
+}
+
+OOXMLBooleanValue::OOXMLBooleanValue(const rtl::OUString & rValue)
+: mbValue(false)
+{
+ if (strue.compareTo(rValue) == 0
+ || sTrue.compareTo(rValue) == 0
+ || s1.compareTo(rValue) == 0
+ || son.compareTo(rValue) == 0
+ || sOn.compareTo(rValue) == 0)
+ mbValue = true;
+ else
+ mbValue = false;
+}
+
+OOXMLBooleanValue::~OOXMLBooleanValue()
+{
+}
+
+bool OOXMLBooleanValue::getBool() const
+{
+ return mbValue;
+}
+
+int OOXMLBooleanValue::getInt() const
+{
+ return mbValue ? 1 : 0;
+}
+
+uno::Any OOXMLBooleanValue::getAny() const
+{
+ uno::Any aResult(mbValue);
+
+ return aResult;
+}
+
+string OOXMLBooleanValue::toString() const
+{
+ return mbValue ? "true" : "false";
+}
+
+OOXMLValue * OOXMLBooleanValue::clone() const
+{
+ return new OOXMLBooleanValue(*this);
+}
+
+/*
+ class OOXMLStringValue
+*/
+
+OOXMLStringValue::OOXMLStringValue(const rtl::OUString & rStr)
+: mStr(rStr)
+{
+}
+
+OOXMLStringValue::~OOXMLStringValue()
+{
+}
+
+uno::Any OOXMLStringValue::getAny() const
+{
+ uno::Any aAny(mStr);
+
+ return aAny;
+}
+
+rtl::OUString OOXMLStringValue::getString() const
+{
+ return mStr;
+}
+
+string OOXMLStringValue::toString() const
+{
+ return OUStringToOString(mStr, RTL_TEXTENCODING_ASCII_US).getStr();
+}
+
+OOXMLValue * OOXMLStringValue::clone() const
+{
+ return new OOXMLStringValue(*this);
+}
+
+/*
+ class OOXMLInputStreamValue
+ */
+OOXMLInputStreamValue::OOXMLInputStreamValue(uno::Reference<io::XInputStream> xInputStream)
+: mxInputStream(xInputStream)
+{
+}
+
+OOXMLInputStreamValue::~OOXMLInputStreamValue()
+{
+}
+
+uno::Any OOXMLInputStreamValue::getAny() const
+{
+ uno::Any aAny(mxInputStream);
+
+ return aAny;
+}
+
+string OOXMLInputStreamValue::toString() const
+{
+ return "InputStream";
+}
+
+OOXMLValue * OOXMLInputStreamValue::clone() const
+{
+ return new OOXMLInputStreamValue(mxInputStream);
+}
+
+/*
+ struct OOXMLPropertySetImplCompare
+ */
+
+bool OOXMLPropertySetImplCompare::operator()(const OOXMLProperty::Pointer_t x,
+ const OOXMLProperty::Pointer_t y) const
+{
+ bool bResult = false;
+
+ if (x.get() == NULL && y.get() != NULL)
+ bResult = true;
+ else if (x.get() != NULL && y.get() != NULL)
+ bResult = x->getId() < y->getId();
+
+ return bResult;
+}
+
+/**
+ class OOXMLPropertySetImpl
+*/
+
+OOXMLPropertySetImpl::OOXMLPropertySetImpl()
+: msType("OOXMLPropertySetImpl")
+{
+}
+
+OOXMLPropertySetImpl::~OOXMLPropertySetImpl()
+{
+}
+
+void OOXMLPropertySetImpl::resolve(Properties & rHandler)
+{
+ OOXMLProperties_t::iterator aIt = begin();
+ while (aIt != end())
+ {
+ OOXMLProperty::Pointer_t pProp = *aIt;
+
+ if (pProp.get() != NULL)
+ pProp->resolve(rHandler);
+#ifdef DEBUG_RESOLVE
+ else
+ {
+ debug_logger->startElement("error");
+ debug_logger->chars("zero-property");
+ debug_logger->endElement("error");
+ }
+#endif
+
+ aIt++;
+ }
+}
+
+OOXMLPropertySetImpl::OOXMLProperties_t::iterator OOXMLPropertySetImpl::begin()
+{
+ return mProperties.begin();
+}
+
+OOXMLPropertySetImpl::OOXMLProperties_t::iterator OOXMLPropertySetImpl::end()
+{
+ return mProperties.end();
+}
+
+OOXMLPropertySetImpl::OOXMLProperties_t::const_iterator
+OOXMLPropertySetImpl::begin() const
+{
+ return mProperties.begin();
+}
+
+OOXMLPropertySetImpl::OOXMLProperties_t::const_iterator
+OOXMLPropertySetImpl::end() const
+{
+ return mProperties.end();
+}
+
+string OOXMLPropertySetImpl::getType() const
+{
+ return msType;
+}
+
+void OOXMLPropertySetImpl::add(OOXMLProperty::Pointer_t pProperty)
+{
+ if (pProperty.get() != NULL && pProperty->getId() != 0x0)
+ mProperties.push_back(pProperty);
+}
+
+void OOXMLPropertySetImpl::add(OOXMLPropertySet::Pointer_t pPropertySet)
+{
+ if (pPropertySet.get() != NULL)
+ {
+ OOXMLPropertySetImpl * pSet =
+ dynamic_cast<OOXMLPropertySetImpl *>(pPropertySet.get());
+
+ if (pSet != NULL)
+ {
+ mProperties.resize(mProperties.size() + pSet->mProperties.size());
+ for (OOXMLProperties_t::iterator aIt = pSet->mProperties.begin();
+ aIt != pSet->mProperties.end(); aIt++)
+ add(*aIt);
+ }
+ }
+}
+
+OOXMLPropertySet * OOXMLPropertySetImpl::clone() const
+{
+ return new OOXMLPropertySetImpl(*this);
+}
+
+void OOXMLPropertySetImpl::setType(const string & rsType)
+{
+ msType = rsType;
+}
+
+string OOXMLPropertySetImpl::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).get() != NULL)
+ sResult += (*aIt)->toString();
+ else
+ sResult += "0x0";
+ }
+
+ sResult += "]";
+
+ return sResult;
+}
+
+/*
+ class OOXMLPropertySetValue
+*/
+
+OOXMLPropertySetValue::OOXMLPropertySetValue
+(OOXMLPropertySet::Pointer_t pPropertySet)
+: mpPropertySet(pPropertySet)
+{
+}
+
+OOXMLPropertySetValue::~OOXMLPropertySetValue()
+{
+}
+
+writerfilter::Reference<Properties>::Pointer_t OOXMLPropertySetValue::getProperties()
+{
+ return writerfilter::Reference<Properties>::Pointer_t
+ (mpPropertySet->clone());
+}
+
+string OOXMLPropertySetValue::toString() const
+{
+ char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer), "t:%p, m:%p", this, mpPropertySet.get());
+
+ return "OOXMLPropertySetValue(" + string(sBuffer) + ")";
+}
+
+OOXMLValue * OOXMLPropertySetValue::clone() const
+{
+ return new OOXMLPropertySetValue(*this);
+}
+
+/*
+ class OOXMLIntegerValue
+*/
+
+OOXMLIntegerValue::OOXMLIntegerValue(sal_Int32 nValue)
+: mnValue(nValue)
+{
+}
+
+OOXMLIntegerValue::OOXMLIntegerValue(const rtl::OUString & rValue)
+: mnValue(0)
+{
+ mnValue = rValue.toInt32();
+}
+
+OOXMLIntegerValue::~OOXMLIntegerValue()
+{
+}
+
+int OOXMLIntegerValue::getInt() const
+{
+ return mnValue;
+}
+
+uno::Any OOXMLIntegerValue::getAny() const
+{
+ uno::Any aResult(mnValue);
+
+ return aResult;
+}
+
+OOXMLValue * OOXMLIntegerValue::clone() const
+{
+ return new OOXMLIntegerValue(*this);
+}
+
+string OOXMLIntegerValue::toString() const
+{
+ char buffer[256];
+ snprintf(buffer, sizeof(buffer), "%" SAL_PRIdINT32, mnValue);
+
+ return buffer;
+}
+
+/*
+ class OOXMLHexValue
+*/
+
+OOXMLHexValue::OOXMLHexValue(sal_uInt32 nValue)
+: mnValue(nValue)
+{
+}
+
+OOXMLHexValue::OOXMLHexValue(const rtl::OUString & rValue)
+{
+ mnValue = static_cast<sal_uInt32>(rValue.toInt32(16));
+}
+
+OOXMLHexValue::~OOXMLHexValue()
+{
+}
+
+int OOXMLHexValue::getInt() const
+{
+ return mnValue;
+}
+
+OOXMLValue * OOXMLHexValue::clone() const
+{
+ return new OOXMLHexValue(*this);
+}
+
+string OOXMLHexValue::toString() const
+{
+ char buffer[256];
+ snprintf(buffer, sizeof(buffer), "0x%" SAL_PRIxUINT32, mnValue);
+
+ return buffer;
+}
+
+/*
+ class OOXMLListValue
+*/
+OOXMLListValue::OOXMLListValue()
+: OOXMLIntegerValue(0)
+{
+}
+
+OOXMLListValue::OOXMLListValue(sal_Int32 nValue)
+: OOXMLIntegerValue(nValue)
+{
+}
+
+
+OOXMLListValue::~OOXMLListValue()
+{
+}
+
+/*
+ class OOXMLShapeValue
+ */
+
+
+OOXMLShapeValue::OOXMLShapeValue(uno::Reference<XShape> rShape)
+: mrShape(rShape)
+{
+}
+
+OOXMLShapeValue::~OOXMLShapeValue()
+{
+}
+
+uno::Any OOXMLShapeValue::getAny() const
+{
+ return uno::Any(mrShape);
+}
+
+string OOXMLShapeValue::toString() const
+{
+ return "Shape";
+}
+
+OOXMLValue * OOXMLShapeValue::clone() const
+{
+ return new OOXMLShapeValue(mrShape);
+}
+
+/*
+ class OOXMLTableImpl
+ */
+
+OOXMLTableImpl::OOXMLTableImpl()
+{
+}
+
+OOXMLTableImpl::~OOXMLTableImpl()
+{
+}
+
+void OOXMLTableImpl::resolve(Table & rTable)
+{
+ int nPos = 0;
+
+ PropertySets_t::iterator it = mPropertySets.begin();
+ PropertySets_t::iterator itEnd = mPropertySets.end();
+
+ while (it != itEnd)
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties
+ ((*it)->getProperties());
+
+ if (pProperties.get() != NULL)
+ rTable.entry(nPos, pProperties);
+
+ ++nPos;
+ it++;
+ }
+}
+
+void OOXMLTableImpl::add(ValuePointer_t pPropertySet)
+{
+ if (pPropertySet.get() != NULL)
+ mPropertySets.push_back(pPropertySet);
+}
+
+string OOXMLTableImpl::getType() const
+{
+ return "OOXMLTableImpl";
+}
+
+OOXMLTable * OOXMLTableImpl::clone() const
+{
+ return new OOXMLTableImpl(*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();
+}
+
+const ::rtl::OUString & OOXMLPropertySetEntryToString::getString() const
+{
+ return mStr;
+}
+
+OOXMLPropertySetEntryToInteger::OOXMLPropertySetEntryToInteger(Id nId)
+: mnId(nId)
+{
+}
+
+OOXMLPropertySetEntryToInteger::~OOXMLPropertySetEntryToInteger()
+{
+}
+
+void OOXMLPropertySetEntryToInteger::sprm(Sprm & /*rSprm*/)
+{
+}
+
+void OOXMLPropertySetEntryToInteger::attribute(Id nId, Value & rValue)
+{
+ if (nId == mnId)
+ mnValue = rValue.getInt();
+}
+
+int OOXMLPropertySetEntryToInteger::getValue() const
+{
+ return mnValue;
+}
+
+}}
diff --git a/writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx b/writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx
new file mode 100644
index 000000000000..78c39b79d515
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx
@@ -0,0 +1,298 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_OOXML_PROPERTY_SET_IMPL_HXX
+#define INCLUDED_OOXML_PROPERTY_SET_IMPL_HXX
+
+#include <vector>
+#include "OOXMLPropertySet.hxx"
+#include "OOXMLBinaryObjectReference.hxx"
+
+namespace com {
+namespace sun {
+namespace star {
+namespace drawing {
+class XShape;
+}}}}
+
+namespace writerfilter {
+namespace ooxml
+{
+using namespace ::std;
+using ::com::sun::star::drawing::XShape;
+
+class OOXMLValue : public Value
+{
+public:
+ typedef boost::shared_ptr<OOXMLValue> Pointer_t;
+ OOXMLValue(const rtl::OUString & rValue);
+ OOXMLValue();
+ virtual ~OOXMLValue();
+
+ virtual int getInt() const;
+ virtual bool getBool() const;
+ virtual ::rtl::OUString getString() const;
+ virtual uno::Any getAny() const;
+ virtual writerfilter::Reference<Properties>::Pointer_t getProperties();
+ virtual writerfilter::Reference<Stream>::Pointer_t getStream();
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary();
+ virtual string toString() const;
+ virtual OOXMLValue * clone() const;
+};
+
+class OOXMLPropertyImpl : public OOXMLProperty
+{
+public:
+ enum Type_t { SPRM, ATTRIBUTE };
+private:
+ Id mId;
+ mutable OOXMLValue::Pointer_t mpValue;
+ Type_t meType;
+
+public:
+ typedef boost::shared_ptr<OOXMLProperty> Pointer_t;
+
+ OOXMLPropertyImpl(Id id, OOXMLValue::Pointer_t pValue, Type_t eType);
+ OOXMLPropertyImpl(const OOXMLPropertyImpl & rSprm);
+ virtual ~OOXMLPropertyImpl();
+
+ virtual sal_uInt32 getId() const;
+ virtual Value::Pointer_t getValue();
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary();
+ virtual writerfilter::Reference<Stream>::Pointer_t getStream();
+ virtual writerfilter::Reference<Properties>::Pointer_t getProps();
+ virtual string getName() const;
+ virtual Kind getKind();
+ virtual string toString() const;
+ virtual Sprm * clone();
+ virtual void resolve(Properties & rProperties);
+};
+
+class OOXMLBinaryValue : public OOXMLValue
+{
+protected:
+ mutable OOXMLBinaryObjectReference::Pointer_t mpBinaryObj;
+public:
+ explicit OOXMLBinaryValue(OOXMLBinaryObjectReference::Pointer_t pBinaryObj);
+ virtual ~OOXMLBinaryValue();
+
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary();
+ virtual string toString() const;
+ virtual OOXMLValue * clone() const;
+};
+
+class OOXMLBooleanValue : public OOXMLValue
+{
+protected:
+ bool mbValue;
+public:
+ explicit OOXMLBooleanValue(bool bValue);
+ explicit OOXMLBooleanValue(const rtl::OUString & rValue);
+ virtual ~OOXMLBooleanValue();
+
+ virtual int getInt() const;
+ virtual bool getBool() const;
+ virtual uno::Any getAny() const;
+ virtual string toString() const;
+ virtual OOXMLValue * clone() const;
+};
+
+class OOXMLStringValue : public OOXMLValue
+{
+protected:
+ rtl::OUString mStr;
+public:
+ explicit OOXMLStringValue(const rtl::OUString & rStr);
+ virtual ~OOXMLStringValue();
+
+ virtual uno::Any getAny() const;
+ virtual rtl::OUString getString() const;
+ virtual string toString() const;
+ virtual OOXMLValue * clone() const;
+};
+
+class OOXMLInputStreamValue : public OOXMLValue
+{
+protected:
+ uno::Reference<io::XInputStream> mxInputStream;
+
+public:
+ explicit OOXMLInputStreamValue(uno::Reference<io::XInputStream> xInputStream);
+ virtual ~OOXMLInputStreamValue();
+
+ virtual uno::Any getAny() const;
+ virtual string toString() const;
+ virtual OOXMLValue * clone() const;
+};
+
+struct OOXMLPropertySetImplCompare
+{
+ bool operator()(const OOXMLProperty::Pointer_t x,
+ const OOXMLProperty::Pointer_t y) const;
+};
+
+class OOXMLPropertySetImpl : public OOXMLPropertySet
+{
+public:
+ typedef vector<OOXMLProperty::Pointer_t> OOXMLProperties_t;
+private:
+ OOXMLProperties_t mProperties;
+ string msType;
+public:
+ OOXMLPropertySetImpl();
+ virtual ~OOXMLPropertySetImpl();
+
+ virtual void resolve(Properties & rHandler);
+ virtual string getType() const;
+ virtual void add(OOXMLProperty::Pointer_t pProperty);
+ virtual void add(OOXMLPropertySet::Pointer_t pPropertySet);
+ virtual OOXMLPropertySet * clone() const;
+
+ OOXMLProperties_t::iterator begin();
+ OOXMLProperties_t::iterator end();
+ OOXMLProperties_t::const_iterator begin() const;
+ OOXMLProperties_t::const_iterator end() const;
+
+ virtual void setType(const string & rsType);
+
+ virtual string toString();
+};
+
+class OOXMLPropertySetValue : public OOXMLValue
+{
+ OOXMLPropertySet::Pointer_t mpPropertySet;
+public:
+ OOXMLPropertySetValue(OOXMLPropertySet::Pointer_t pPropertySet);
+ virtual ~OOXMLPropertySetValue();
+
+ virtual writerfilter::Reference<Properties>::Pointer_t getProperties();
+ virtual string toString() const;
+ virtual OOXMLValue * clone() const;
+};
+
+class OOXMLIntegerValue : public OOXMLValue
+{
+protected:
+ sal_Int32 mnValue;
+public:
+ explicit OOXMLIntegerValue(sal_Int32 nValue);
+ explicit OOXMLIntegerValue(const rtl::OUString & rValue);
+ virtual ~OOXMLIntegerValue();
+
+ virtual int getInt() const;
+ virtual uno::Any getAny() const;
+ virtual string toString() const;
+ virtual OOXMLValue * clone() const;
+};
+
+class OOXMLHexValue : public OOXMLValue
+{
+protected:
+ sal_uInt32 mnValue;
+public:
+ explicit OOXMLHexValue(sal_uInt32 nValue);
+ explicit OOXMLHexValue(const rtl::OUString & rValue);
+ virtual ~OOXMLHexValue();
+
+ virtual int getInt() const;
+ virtual string toString() const;
+ virtual OOXMLValue * clone() const;
+};
+
+class OOXMLListValue : public OOXMLIntegerValue
+{
+public:
+ OOXMLListValue();
+ OOXMLListValue(sal_Int32 nValue);
+ virtual ~OOXMLListValue();
+};
+
+class OOXMLShapeValue : public OOXMLValue
+{
+protected:
+ uno::Reference<XShape> mrShape;
+public:
+ explicit OOXMLShapeValue(uno::Reference<XShape> rShape);
+ virtual ~OOXMLShapeValue();
+
+ virtual uno::Any getAny() const;
+ virtual string toString() const;
+ virtual OOXMLValue * clone() const;
+};
+
+class OOXMLTableImpl : public OOXMLTable
+{
+public:
+ typedef boost::shared_ptr<OOXMLValue> ValuePointer_t;
+private:
+ typedef vector<ValuePointer_t> PropertySets_t;
+ PropertySets_t mPropertySets;
+
+public:
+ OOXMLTableImpl();
+ virtual ~OOXMLTableImpl();
+
+ virtual void resolve(Table & rTable);
+ virtual void add(ValuePointer_t pPropertySet);
+ virtual string getType() const;
+ virtual OOXMLTable * clone() const;
+};
+
+class OOXMLPropertySetEntryToString : public Properties
+{
+ Id mnId;
+ ::rtl::OUString mStr;
+
+public:
+ OOXMLPropertySetEntryToString(Id nId);
+ virtual ~OOXMLPropertySetEntryToString();
+
+ virtual void sprm(Sprm & rSprm);
+ virtual void attribute(Id nId, Value & rValue);
+
+ const ::rtl::OUString & getString() const;
+};
+
+class OOXMLPropertySetEntryToInteger : public Properties
+{
+ Id mnId;
+ int mnValue;
+public:
+ OOXMLPropertySetEntryToInteger(Id nId);
+ virtual ~OOXMLPropertySetEntryToInteger();
+
+ virtual void sprm(Sprm & rSprm);
+ virtual void attribute(Id nId, Value & rValue);
+
+ int getValue() const;
+};
+
+Sprm::Kind SprmKind(sal_uInt32 nSprmCode);
+
+} // namespace ooxml
+} // namespace writerfilter
+
+#endif // INCLUDED_OOXML_PROPERTY_SET_IMPL_HXX
diff --git a/writerfilter/source/ooxml/OOXMLStreamImpl.cxx b/writerfilter/source/ooxml/OOXMLStreamImpl.cxx
new file mode 100644
index 000000000000..91188eeda701
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLStreamImpl.cxx
@@ -0,0 +1,333 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "OOXMLStreamImpl.hxx"
+#include "OOXMLFastTokenHandler.hxx"
+#include "ooxmlLoggers.hxx"
+#include <iostream>
+
+#ifndef _COM_SUN_STAR_CONTAINER_XHIERARCHICALSTORAGEACCESS_HPP_
+#include <com/sun/star/embed/XHierarchicalStorageAccess.hpp>
+#endif
+
+//#define DEBUG_STREAM
+
+namespace writerfilter {
+namespace ooxml
+{
+
+using namespace ::std;
+
+OOXMLStreamImpl::OOXMLStreamImpl
+(uno::Reference<uno::XComponentContext> xContext,
+ uno::Reference<io::XInputStream> xStorageStream, StreamType_t nType)
+: mxContext(xContext), mxStorageStream(xStorageStream), mnStreamType(nType)
+{
+ mxStorage.set
+ (comphelper::OStorageHelper::GetStorageOfFormatFromInputStream
+ (OFOPXML_STORAGE_FORMAT_STRING, mxStorageStream));
+ mxRelationshipAccess.set(mxStorage, uno::UNO_QUERY_THROW);
+
+ init();
+}
+
+OOXMLStreamImpl::OOXMLStreamImpl
+(OOXMLStreamImpl & 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
+(uno::Reference<uno::XComponentContext> xContext,
+ uno::Reference<io::XInputStream> xStorageStream, const rtl::OUString & rId)
+: mxContext(xContext),
+ mxStorageStream(xStorageStream),
+ mnStreamType(UNKNOWN),
+ msId(rId)
+{
+ mxStorage.set
+ (comphelper::OStorageHelper::GetStorageOfFormatFromInputStream
+ (OFOPXML_STORAGE_FORMAT_STRING, mxStorageStream));
+ mxRelationshipAccess.set(mxStorage, uno::UNO_QUERY_THROW);
+
+ init();
+}
+
+OOXMLStreamImpl::OOXMLStreamImpl
+(OOXMLStreamImpl & rOOXMLStream, const rtl::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()
+{
+#ifdef DEBUG_STREAM
+ debug_logger->endElement("stream");
+#endif
+}
+
+const ::rtl::OUString & OOXMLStreamImpl::getTarget() const
+{
+ return msTarget;
+}
+
+bool OOXMLStreamImpl::lcl_getTarget(uno::Reference<embed::XRelationshipAccess>
+ xRelationshipAccess,
+ StreamType_t nStreamType,
+ const ::rtl::OUString & rId,
+ ::rtl::OUString & rDocumentTarget)
+{
+ bool bFound = false;
+
+ static rtl::OUString sType(RTL_CONSTASCII_USTRINGPARAM("Type"));
+ static rtl::OUString sId(RTL_CONSTASCII_USTRINGPARAM("Id"));
+ static rtl::OUString sDocumentType(RTL_CONSTASCII_USTRINGPARAM("http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"));
+ static rtl::OUString sStylesType(RTL_CONSTASCII_USTRINGPARAM("http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"));
+ static rtl::OUString sNumberingType(RTL_CONSTASCII_USTRINGPARAM("http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering"));
+ static rtl::OUString sFonttableType(RTL_CONSTASCII_USTRINGPARAM("http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable"));
+ static rtl::OUString sFootnotesType(RTL_CONSTASCII_USTRINGPARAM("http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes"));
+ static rtl::OUString sEndnotesType(RTL_CONSTASCII_USTRINGPARAM("http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes"));
+ static rtl::OUString sCommentsType(RTL_CONSTASCII_USTRINGPARAM("http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments"));
+ static rtl::OUString sThemeType(RTL_CONSTASCII_USTRINGPARAM("http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"));
+ static rtl::OUString sSettingsType(RTL_CONSTASCII_USTRINGPARAM("http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings"));
+ static rtl::OUString sTarget(RTL_CONSTASCII_USTRINGPARAM("Target"));
+ static rtl::OUString sTargetMode(RTL_CONSTASCII_USTRINGPARAM("TargetMode"));
+ static rtl::OUString sExternal(RTL_CONSTASCII_USTRINGPARAM("External"));
+
+ rtl::OUString sStreamType;
+
+ switch (nStreamType)
+ {
+ case DOCUMENT:
+ sStreamType = sDocumentType;
+ break;
+ case STYLES:
+ sStreamType = sStylesType;
+ break;
+ case NUMBERING:
+ sStreamType = sNumberingType;
+ break;
+ case FONTTABLE:
+ sStreamType = sFonttableType;
+ break;
+ case FOOTNOTES:
+ sStreamType = sFootnotesType;
+ break;
+ case ENDNOTES:
+ sStreamType = sEndnotesType;
+ break;
+ case COMMENTS:
+ sStreamType = sCommentsType;
+ break;
+ case THEME:
+ sStreamType = sThemeType;
+ break;
+ case SETTINGS:
+ sStreamType = sSettingsType;
+ break;
+ default:
+ break;
+ }
+
+ if (xRelationshipAccess.is())
+ {
+ uno::Sequence< uno::Sequence< beans::StringPair > >aSeqs =
+ xRelationshipAccess->getAllRelationships();
+
+ for (sal_Int32 j = 0; j < aSeqs.getLength(); j++)
+ {
+ uno::Sequence< beans::StringPair > aSeq = aSeqs[j];
+
+ bool bExternalTarget = false;
+ ::rtl::OUString sMyTarget;
+ for (sal_Int32 i = 0; i < aSeq.getLength(); i++)
+ {
+ beans::StringPair aPair = aSeq[i];
+
+ if (aPair.First.compareTo(sType) == 0 &&
+ aPair.Second.compareTo(sStreamType) == 0)
+ bFound = true;
+ else if (aPair.First.compareTo(sId) == 0 &&
+ aPair.Second.compareTo(rId) == 0)
+ bFound = true;
+ else if (aPair.First.compareTo(sTarget) == 0)
+ sMyTarget = aPair.Second;
+ else if (aPair.First.compareTo(sTargetMode) == 0 &&
+ aPair.Second.compareTo(sExternal) == 0)
+ bExternalTarget = true;
+
+ }
+
+ if (bFound)
+ {
+ if (bExternalTarget)
+ rDocumentTarget = sMyTarget;
+ else
+ {
+ rDocumentTarget = msPath;
+ rDocumentTarget += sMyTarget;
+ }
+
+ break;
+ }
+ }
+ }
+
+ return bFound;
+}
+
+::rtl::OUString OOXMLStreamImpl::getTargetForId(const ::rtl::OUString & rId)
+{
+ ::rtl::OUString sTarget;
+
+ uno::Reference<embed::XRelationshipAccess> xRelationshipAccess
+ (mxDocumentStream, uno::UNO_QUERY_THROW);
+
+ if (lcl_getTarget(xRelationshipAccess, UNKNOWN, rId, sTarget))
+ return sTarget;
+
+ return ::rtl::OUString();
+}
+
+void OOXMLStreamImpl::init()
+{
+ bool bFound = lcl_getTarget(mxRelationshipAccess,
+ mnStreamType, msId, msTarget);
+#ifdef DEBUG_STREAM
+ debug_logger->startElement("stream");
+ debug_logger->attribute("target", msTarget);
+#endif
+
+ if (bFound)
+ {
+ 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;
+ }
+ }
+}
+
+uno::Reference<io::XInputStream> OOXMLStreamImpl::getDocumentStream()
+{
+ uno::Reference<io::XInputStream> xResult;
+
+ if (mxDocumentStream.is())
+ xResult = mxDocumentStream->getInputStream();
+
+ return xResult;
+}
+
+uno::Reference<io::XInputStream> OOXMLStreamImpl::getStorageStream()
+{
+ return mxStorageStream;
+}
+
+uno::Reference<xml::sax::XParser> OOXMLStreamImpl::getParser()
+{
+ uno::Reference<lang::XMultiComponentFactory> xFactory =
+ uno::Reference<lang::XMultiComponentFactory>
+ (mxContext->getServiceManager());
+
+ uno::Reference<xml::sax::XParser> xParser
+ (xFactory->createInstanceWithContext
+ ( rtl::OUString::createFromAscii( "com.sun.star.xml.sax.Parser" ),
+ mxContext ),
+ uno::UNO_QUERY );
+
+ return xParser;
+}
+
+uno::Reference<uno::XComponentContext> OOXMLStreamImpl::getContext()
+{
+ return mxContext;
+}
+
+uno::Reference <xml::sax::XFastTokenHandler>
+OOXMLStreamImpl::getFastTokenHandler
+(uno::Reference<uno::XComponentContext> xContext)
+{
+ if (! mxFastTokenHandler.is())
+ mxFastTokenHandler.set(new OOXMLFastTokenHandler(xContext));
+
+ return mxFastTokenHandler;
+}
+
+OOXMLStream::Pointer_t
+OOXMLDocumentFactory::createStream
+(uno::Reference<uno::XComponentContext> xContext,
+ uno::Reference<io::XInputStream> rStream,
+ OOXMLStream::StreamType_t nStreamType)
+{
+ OOXMLStreamImpl * pStream = new OOXMLStreamImpl(xContext, rStream,
+ nStreamType);
+ return OOXMLStream::Pointer_t(pStream);
+}
+
+OOXMLStream::Pointer_t
+OOXMLDocumentFactory::createStream
+(OOXMLStream::Pointer_t pStream, OOXMLStream::StreamType_t nStreamType)
+{
+ return OOXMLStream::Pointer_t
+ (new OOXMLStreamImpl(*dynamic_cast<OOXMLStreamImpl *>(pStream.get()),
+ nStreamType));
+}
+
+OOXMLStream::Pointer_t
+OOXMLDocumentFactory::createStream
+(OOXMLStream::Pointer_t pStream, const rtl::OUString & rId)
+{
+ return OOXMLStream::Pointer_t
+ (new OOXMLStreamImpl(*dynamic_cast<OOXMLStreamImpl *>(pStream.get()),
+ rId));
+}
+
+}}
diff --git a/writerfilter/source/ooxml/OOXMLStreamImpl.hxx b/writerfilter/source/ooxml/OOXMLStreamImpl.hxx
new file mode 100644
index 000000000000..64682fab250c
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLStreamImpl.hxx
@@ -0,0 +1,95 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_OOXML_STREAM_IMPL_HXX
+#define INCLUDED_OOXML_STREAM_IMPL_HXX
+
+#include <ooxml/OOXMLDocument.hxx>
+#include <comphelper/storagehelper.hxx>
+#include <com/sun/star/embed/XRelationshipAccess.hpp>
+#include <com/sun/star/io/XStream.hpp>
+
+namespace writerfilter {
+namespace ooxml
+{
+
+using namespace com::sun::star;
+
+class OOXMLStreamImpl : public OOXMLStream
+{
+ void init();
+
+ uno::Reference<uno::XComponentContext> mxContext;
+ uno::Reference<io::XInputStream> mxStorageStream;
+ uno::Reference<embed::XStorage> mxStorage;
+ uno::Reference<embed::XRelationshipAccess> mxRelationshipAccess;
+ uno::Reference<io::XStream> mxDocumentStream;
+ uno::Reference<xml::sax::XFastParser> mxFastParser;
+ uno::Reference<xml::sax::XFastTokenHandler> mxFastTokenHandler;
+
+ StreamType_t mnStreamType;
+
+ rtl::OUString msId;
+ rtl::OUString msPath;
+ rtl::OUString msTarget;
+
+ bool lcl_getTarget(uno::Reference<embed::XRelationshipAccess>
+ xRelationshipAccess,
+ StreamType_t nStreamType,
+ const ::rtl::OUString & rId,
+ ::rtl::OUString & rDocumentTarget);
+public:
+ typedef boost::shared_ptr<OOXMLStreamImpl> Pointer_t;
+
+ OOXMLStreamImpl
+ (OOXMLStreamImpl & rStream, StreamType_t nType);
+ OOXMLStreamImpl
+ (uno::Reference<uno::XComponentContext> xContext,
+ uno::Reference<io::XInputStream> xStorageStream,
+ StreamType_t nType);
+ OOXMLStreamImpl(OOXMLStreamImpl & rStream, const rtl::OUString & rId);
+ OOXMLStreamImpl
+ (uno::Reference<uno::XComponentContext> xContext,
+ uno::Reference<io::XInputStream> xStorageStream,
+ const rtl::OUString & rId);
+
+ virtual ~OOXMLStreamImpl();
+
+ virtual uno::Reference<xml::sax::XParser> getParser();
+ virtual uno::Reference<xml::sax::XFastParser> getFastParser();
+ virtual uno::Reference<io::XInputStream> getDocumentStream();
+ virtual uno::Reference<io::XInputStream> getStorageStream();
+ virtual uno::Reference<uno::XComponentContext> getContext();
+ virtual ::rtl::OUString getTargetForId(const ::rtl::OUString & rId);
+ virtual const ::rtl::OUString & getTarget() const;
+
+ virtual uno::Reference<xml::sax::XFastTokenHandler>
+ getFastTokenHandler(uno::Reference<uno::XComponentContext> rContext);
+
+ void setInputStream(uno::Reference<io::XInputStream> rxInputStream);
+};
+}}
+#endif // INCLUDED_OOXML_STREAM_IMPL_HXX
diff --git a/writerfilter/source/ooxml/RefAndPointer.hxx b/writerfilter/source/ooxml/RefAndPointer.hxx
new file mode 100644
index 000000000000..c997d302fd33
--- /dev/null
+++ b/writerfilter/source/ooxml/RefAndPointer.hxx
@@ -0,0 +1,119 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_REF_AND_POINTER_HXX
+#define INCLUDED_REF_AND_POINTER_HXX
+
+#include <iostream>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
+
+namespace writerfilter {
+namespace ooxml
+{
+using namespace ::com::sun::star;
+using namespace ::std;
+
+template <class Interface, class ChildClass>
+class RefAndPointer
+{
+ mutable ChildClass * mpHandler;
+ mutable uno::Reference<Interface> mRef;
+
+public:
+ RefAndPointer()
+ : mpHandler(NULL)
+ {
+#ifdef DEBUG_MEMORY
+ clog << "MEMORY:" << mpHandler->getInstanceNumber() << ":RefAndPointer"
+ << endl;
+#endif
+ }
+
+ RefAndPointer(ChildClass * pHandler)
+ : mpHandler(pHandler), mRef(pHandler)
+ {
+#ifdef DEBUG_MEMORY
+ clog << "MEMORY:" << mpHandler->getInstanceNumber() << ":RefAndPointer"
+ << endl;
+#endif
+ }
+
+ RefAndPointer(uno::Reference<Interface> xRef)
+ : mRef(xRef)
+ {
+#if 0
+ uno::Reference<lang::XUnoTunnel> xTunnel( xRef, uno::UNO_QUERY);
+
+ if (xTunnel.is())
+ mpHandler = reinterpret_cast<ChildClass *>(xTunnel->getSomething(ChildClass::getUnoTunnelId()));
+#else
+ mpHandler = dynamic_cast<ChildClass *>(xRef.get());
+#endif
+ if (mpHandler != NULL)
+ clog << "MEMORY:" << mpHandler->getInstanceNumber()
+ << ":RefAndPointer" << endl;
+ }
+
+ virtual ~RefAndPointer()
+ {
+#ifdef DEBUG_MEMORY
+ if (mpHandler != NULL)
+ clog << "MEMORY:" << mpHandler->getInstanceNumber()
+ << ":~RefAndPointer" << endl;
+#endif
+ }
+
+ void set(ChildClass * pHandler)
+ {
+ mpHandler = pHandler;
+ mRef = pHandler;
+ }
+
+ void set(uno::Reference<Interface> xHandler)
+ {
+ mpHandler = dynamic_cast<ChildClass*>(xHandler.get());
+ mRef = xHandler;
+ }
+
+ ChildClass * getPointer() const { return mpHandler; }
+ const uno::Reference<Interface> getRef() const { return mRef; }
+
+ RefAndPointer & operator=
+ (const RefAndPointer & rSrc)
+ {
+ set(rSrc.getHandler());
+
+ return *this;
+ }
+
+ bool is() { return getRef().is(); }
+
+ operator ChildClass* () { return getPointer(); }
+ operator uno::Reference<Interface> () { return getRef(); }
+};
+}}
+#endif // INCLUDED_REF_AND_POINTER_HXX
diff --git a/writerfilter/source/ooxml/analyzer.xsl b/writerfilter/source/ooxml/analyzer.xsl
new file mode 100644
index 000000000000..155de88d954a
--- /dev/null
+++ b/writerfilter/source/ooxml/analyzer.xsl
@@ -0,0 +1,46 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xalan="http://xml.apache.org/xalan"
+ exclude-result-prefixes = "xalan"
+ xml:space="default">
+ <xsl:output method="text" />
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="analyzerooxmlids"/>
+ </xsl:template>
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/checkmodel.xsl b/writerfilter/source/ooxml/checkmodel.xsl
new file mode 100644
index 000000000000..b40544f796cf
--- /dev/null
+++ b/writerfilter/source/ooxml/checkmodel.xsl
@@ -0,0 +1,167 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xml:space="default" xml:indent="true">
+ <xsl:output method="text" />
+
+
+ <xsl:template name="noannotation">
+ <xsl:for-each select="//namespace">
+ <xsl:variable name="nsname" select="@name"/>
+ <xsl:value-of select="./rng:grammar/@ns"/>
+ <xsl:text>&#xa;</xsl:text>
+ <xsl:for-each select=".//rng:define">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:if test="not(ancestor::namespace//resource[@name=$name])">
+ <xsl:text>noannotation: </xsl:text>
+ <xsl:value-of select="$nsname"/>
+ <xsl:text>::</xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="checkmodel">
+ <xsl:for-each select="//namespace">
+ <xsl:variable name="nsname" select="@name"/>
+ <xsl:for-each select=".//rng:define">
+ <xsl:call-template name="orphanedprops"/>
+ <xsl:variable name="definename" select="@name"/>
+ <xsl:if test="not(ancestor::namespace//resource[@name=$definename])">
+ <xsl:text>no annotation: </xsl:text>
+ <xsl:value-of select="$nsname"/>
+ <xsl:text>::</xsl:text>
+ <xsl:value-of select="$definename"/>
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:if>
+ <xsl:for-each select=".//rng:element">
+ <xsl:variable name="elementname" select="@name"/>
+ <xsl:for-each select="ancestor::namespace//resource[@name=$definename and @resource='Properties']">
+ <xsl:if test="not(.//element[@name=$elementname])">
+ <xsl:text>missing element: </xsl:text>
+ <xsl:value-of select="$nsname"/>
+ <xsl:text>::</xsl:text>
+ <xsl:value-of select="$definename"/>
+ <xsl:text>::</xsl:text>
+ <xsl:value-of select="$elementname"/>
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:if>
+ <xsl:call-template name="orphanedprops"/>
+ </xsl:for-each>
+ </xsl:for-each>
+ <xsl:for-each select=".//rng:attribute">
+ <xsl:variable name="attributename" select="@name"/>
+ <xsl:for-each select="ancestor::namespace//resource[@name=$definename and @resource='Properties']">
+ <xsl:if test="not(.//attribute[@name=$attributename])">
+ <xsl:text>missing attribute: </xsl:text>
+ <xsl:value-of select="$nsname"/>
+ <xsl:text>::</xsl:text>
+ <xsl:value-of select="$definename"/>
+ <xsl:text>::</xsl:text>
+ <xsl:value-of select="$attributename"/>
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:if>
+ <xsl:call-template name="orphanedprops"/>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:key name="defines-with-name" match="rng:define" use="@name"/>
+
+ <xsl:template name="defineforref">
+ <xsl:variable name="grammarid" select="generate-id(ancestor::grammar)"/>
+ <xsl:variable name="defineingrammar" select="key('defines-with-name', @name)[generate-id(ancestor::grammar) = $grammarid]"/>
+ <xsl:choose>
+ <xsl:when test="$defineingrammar">
+ <xsl:value-of select="$defineingrammar"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="key('defines-with-name', @name)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="contextresource">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:value-of select="ancestor::namespace//resource[@name=$name]/@resource"/>
+ </xsl:template>
+
+ <xsl:template name="orphanedprops">
+ <xsl:variable name="nsname" select="ancestor::namespace/@name"/>
+ <xsl:for-each select=".//rng:ref[not (ancestor::rng:element or ancestor::rng:attribute)]">
+ <xsl:variable name="defineresource">
+ <xsl:for-each select="ancestor::rng:define">
+ <xsl:call-template name="contextresource"/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="definename" select="ancestor::rng:define/@name"/>
+ <xsl:variable name="mydefine">
+ <xsl:copy>
+ <xsl:call-template name="defineforref"/>
+ </xsl:copy>
+ </xsl:variable>
+ <xsl:variable name="myresource">
+ <xsl:call-template name="contextresource"/>
+ </xsl:variable>
+ <xsl:if test="$myresource = 'Properties'">
+ <xsl:choose>
+ <xsl:when test="$defineresource = 'Properties'"/>
+ <xsl:when test="$defineresource = 'Stream'"/>
+ <xsl:otherwise>
+ <xsl:text>orphaned properties: </xsl:text>
+ <xsl:value-of select="$nsname"/>
+ <xsl:text>:</xsl:text>
+ <xsl:value-of select="$definename"/>
+ <xsl:text>(</xsl:text>
+ <xsl:value-of select="$defineresource"/>
+ <xsl:text>)-&gt;</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>(</xsl:text>
+ <xsl:value-of select="$myresource"/>
+ <xsl:text>)&#xa;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template match="/">
+ <out>
+ <xsl:call-template name="checkmodel"/>
+ </out>
+ </xsl:template>
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/dummyannotate.xsl b/writerfilter/source/ooxml/dummyannotate.xsl
new file mode 100644
index 000000000000..029fd6aef569
--- /dev/null
+++ b/writerfilter/source/ooxml/dummyannotate.xsl
@@ -0,0 +1,845 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xml:space="default" xml:indent="true">
+ <xsl:output method="xml" />
+
+ <xsl:template match="rng:define" mode="dummydoc">
+<xsl:processing-instruction name="mso-application">progid="Word.Document"</xsl:processing-instruction>
+<pkg:package xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage">
+ <pkg:part pkg:name="/_rels/.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="512">
+ <pkg:xmlData>
+ <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
+ <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>
+ <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
+ <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/>
+ </Relationships>
+ </pkg:xmlData>
+ </pkg:part>
+ <pkg:part pkg:name="/word/_rels/document.xml.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="256">
+ <pkg:xmlData>
+ <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
+ <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings" Target="webSettings.xml"/>
+ <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings" Target="settings.xml"/>
+ <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>
+ <Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/>
+ <Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable" Target="fontTable.xml"/>
+ </Relationships>
+ </pkg:xmlData>
+ </pkg:part>
+ <pkg:part pkg:name="/word/document.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml">
+ <pkg:xmlData>
+ <w:document xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml">
+ <w:body>
+ <xsl:for-each select=".//rng:element">
+ <w:p>
+ <w:pPr/>
+ <w:r>
+ <w:rPr>
+ <xsl:element name="w:{@name}"/>
+ </w:rPr>
+ <xsl:element name="w:t">
+ <xsl:value-of select="@name"/>
+ </xsl:element>
+ </w:r>
+ </w:p>
+ </xsl:for-each>
+ <w:sectPr w:rsidR="00164A8D" w:rsidSect="008B7467">
+ <w:pgSz w:w="11906" w:h="16838"/>
+ <w:pgMar w:top="1417" w:right="1417" w:bottom="1134" w:left="1417" w:header="708" w:footer="708" w:gutter="0"/>
+ <w:cols w:space="708"/>
+ <w:docGrid w:linePitch="360"/>
+ </w:sectPr>
+ </w:body>
+ </w:document>
+ </pkg:xmlData>
+ </pkg:part>
+ <pkg:part pkg:name="/word/theme/theme1.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.theme+xml">
+ <pkg:xmlData>
+ <a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme">
+ <a:themeElements>
+ <a:clrScheme name="Office">
+ <a:dk1>
+ <a:sysClr val="windowText" lastClr="000000"/>
+ </a:dk1>
+ <a:lt1>
+ <a:sysClr val="window" lastClr="FFFFFF"/>
+ </a:lt1>
+ <a:dk2>
+ <a:srgbClr val="1F497D"/>
+ </a:dk2>
+ <a:lt2>
+ <a:srgbClr val="EEECE1"/>
+ </a:lt2>
+ <a:accent1>
+ <a:srgbClr val="4F81BD"/>
+ </a:accent1>
+ <a:accent2>
+ <a:srgbClr val="C0504D"/>
+ </a:accent2>
+ <a:accent3>
+ <a:srgbClr val="9BBB59"/>
+ </a:accent3>
+ <a:accent4>
+ <a:srgbClr val="8064A2"/>
+ </a:accent4>
+ <a:accent5>
+ <a:srgbClr val="4BACC6"/>
+ </a:accent5>
+ <a:accent6>
+ <a:srgbClr val="F79646"/>
+ </a:accent6>
+ <a:hlink>
+ <a:srgbClr val="0000FF"/>
+ </a:hlink>
+ <a:folHlink>
+ <a:srgbClr val="800080"/>
+ </a:folHlink>
+ </a:clrScheme>
+ <a:fontScheme name="Office">
+ <a:majorFont>
+ <a:latin typeface="Cambria"/>
+ <a:ea typeface=""/>
+ <a:cs typeface=""/>
+ <a:font script="Jpan" typeface="MS ゴシック"/>
+ <a:font script="Hang" typeface="ë§‘ì€ ê³ ë”•"/>
+ <a:font script="Hans" typeface="宋体"/>
+ <a:font script="Hant" typeface="新細明體"/>
+ <a:font script="Arab" typeface="Times New Roman"/>
+ <a:font script="Hebr" typeface="Times New Roman"/>
+ <a:font script="Thai" typeface="Angsana New"/>
+ <a:font script="Ethi" typeface="Nyala"/>
+ <a:font script="Beng" typeface="Vrinda"/>
+ <a:font script="Gujr" typeface="Shruti"/>
+ <a:font script="Khmr" typeface="MoolBoran"/>
+ <a:font script="Knda" typeface="Tunga"/>
+ <a:font script="Guru" typeface="Raavi"/>
+ <a:font script="Cans" typeface="Euphemia"/>
+ <a:font script="Cher" typeface="Plantagenet Cherokee"/>
+ <a:font script="Yiii" typeface="Microsoft Yi Baiti"/>
+ <a:font script="Tibt" typeface="Microsoft Himalaya"/>
+ <a:font script="Thaa" typeface="MV Boli"/>
+ <a:font script="Deva" typeface="Mangal"/>
+ <a:font script="Telu" typeface="Gautami"/>
+ <a:font script="Taml" typeface="Latha"/>
+ <a:font script="Syrc" typeface="Estrangelo Edessa"/>
+ <a:font script="Orya" typeface="Kalinga"/>
+ <a:font script="Mlym" typeface="Kartika"/>
+ <a:font script="Laoo" typeface="DokChampa"/>
+ <a:font script="Sinh" typeface="Iskoola Pota"/>
+ <a:font script="Mong" typeface="Mongolian Baiti"/>
+ <a:font script="Viet" typeface="Times New Roman"/>
+ <a:font script="Uigh" typeface="Microsoft Uighur"/>
+ </a:majorFont>
+ <a:minorFont>
+ <a:latin typeface="Calibri"/>
+ <a:ea typeface=""/>
+ <a:cs typeface=""/>
+ <a:font script="Jpan" typeface="ï¼­ï¼³ 明æœ"/>
+ <a:font script="Hang" typeface="ë§‘ì€ ê³ ë”•"/>
+ <a:font script="Hans" typeface="宋体"/>
+ <a:font script="Hant" typeface="新細明體"/>
+ <a:font script="Arab" typeface="Arial"/>
+ <a:font script="Hebr" typeface="Arial"/>
+ <a:font script="Thai" typeface="Cordia New"/>
+ <a:font script="Ethi" typeface="Nyala"/>
+ <a:font script="Beng" typeface="Vrinda"/>
+ <a:font script="Gujr" typeface="Shruti"/>
+ <a:font script="Khmr" typeface="DaunPenh"/>
+ <a:font script="Knda" typeface="Tunga"/>
+ <a:font script="Guru" typeface="Raavi"/>
+ <a:font script="Cans" typeface="Euphemia"/>
+ <a:font script="Cher" typeface="Plantagenet Cherokee"/>
+ <a:font script="Yiii" typeface="Microsoft Yi Baiti"/>
+ <a:font script="Tibt" typeface="Microsoft Himalaya"/>
+ <a:font script="Thaa" typeface="MV Boli"/>
+ <a:font script="Deva" typeface="Mangal"/>
+ <a:font script="Telu" typeface="Gautami"/>
+ <a:font script="Taml" typeface="Latha"/>
+ <a:font script="Syrc" typeface="Estrangelo Edessa"/>
+ <a:font script="Orya" typeface="Kalinga"/>
+ <a:font script="Mlym" typeface="Kartika"/>
+ <a:font script="Laoo" typeface="DokChampa"/>
+ <a:font script="Sinh" typeface="Iskoola Pota"/>
+ <a:font script="Mong" typeface="Mongolian Baiti"/>
+ <a:font script="Viet" typeface="Arial"/>
+ <a:font script="Uigh" typeface="Microsoft Uighur"/>
+ </a:minorFont>
+ </a:fontScheme>
+ <a:fmtScheme name="Office">
+ <a:fillStyleLst>
+ <a:solidFill>
+ <a:schemeClr val="phClr"/>
+ </a:solidFill>
+ <a:gradFill rotWithShape="1">
+ <a:gsLst>
+ <a:gs pos="0">
+ <a:schemeClr val="phClr">
+ <a:tint val="50000"/>
+ <a:satMod val="300000"/>
+ </a:schemeClr>
+ </a:gs>
+ <a:gs pos="35000">
+ <a:schemeClr val="phClr">
+ <a:tint val="37000"/>
+ <a:satMod val="300000"/>
+ </a:schemeClr>
+ </a:gs>
+ <a:gs pos="100000">
+ <a:schemeClr val="phClr">
+ <a:tint val="15000"/>
+ <a:satMod val="350000"/>
+ </a:schemeClr>
+ </a:gs>
+ </a:gsLst>
+ <a:lin ang="16200000" scaled="1"/>
+ </a:gradFill>
+ <a:gradFill rotWithShape="1">
+ <a:gsLst>
+ <a:gs pos="0">
+ <a:schemeClr val="phClr">
+ <a:shade val="51000"/>
+ <a:satMod val="130000"/>
+ </a:schemeClr>
+ </a:gs>
+ <a:gs pos="80000">
+ <a:schemeClr val="phClr">
+ <a:shade val="93000"/>
+ <a:satMod val="130000"/>
+ </a:schemeClr>
+ </a:gs>
+ <a:gs pos="100000">
+ <a:schemeClr val="phClr">
+ <a:shade val="94000"/>
+ <a:satMod val="135000"/>
+ </a:schemeClr>
+ </a:gs>
+ </a:gsLst>
+ <a:lin ang="16200000" scaled="0"/>
+ </a:gradFill>
+ </a:fillStyleLst>
+ <a:lnStyleLst>
+ <a:ln w="9525" cap="flat" cmpd="sng" algn="ctr">
+ <a:solidFill>
+ <a:schemeClr val="phClr">
+ <a:shade val="95000"/>
+ <a:satMod val="105000"/>
+ </a:schemeClr>
+ </a:solidFill>
+ <a:prstDash val="solid"/>
+ </a:ln>
+ <a:ln w="25400" cap="flat" cmpd="sng" algn="ctr">
+ <a:solidFill>
+ <a:schemeClr val="phClr"/>
+ </a:solidFill>
+ <a:prstDash val="solid"/>
+ </a:ln>
+ <a:ln w="38100" cap="flat" cmpd="sng" algn="ctr">
+ <a:solidFill>
+ <a:schemeClr val="phClr"/>
+ </a:solidFill>
+ <a:prstDash val="solid"/>
+ </a:ln>
+ </a:lnStyleLst>
+ <a:effectStyleLst>
+ <a:effectStyle>
+ <a:effectLst>
+ <a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0">
+ <a:srgbClr val="000000">
+ <a:alpha val="38000"/>
+ </a:srgbClr>
+ </a:outerShdw>
+ </a:effectLst>
+ </a:effectStyle>
+ <a:effectStyle>
+ <a:effectLst>
+ <a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0">
+ <a:srgbClr val="000000">
+ <a:alpha val="35000"/>
+ </a:srgbClr>
+ </a:outerShdw>
+ </a:effectLst>
+ </a:effectStyle>
+ <a:effectStyle>
+ <a:effectLst>
+ <a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0">
+ <a:srgbClr val="000000">
+ <a:alpha val="35000"/>
+ </a:srgbClr>
+ </a:outerShdw>
+ </a:effectLst>
+ <a:scene3d>
+ <a:camera prst="orthographicFront">
+ <a:rot lat="0" lon="0" rev="0"/>
+ </a:camera>
+ <a:lightRig rig="threePt" dir="t">
+ <a:rot lat="0" lon="0" rev="1200000"/>
+ </a:lightRig>
+ </a:scene3d>
+ <a:sp3d>
+ <a:bevelT w="63500" h="25400"/>
+ </a:sp3d>
+ </a:effectStyle>
+ </a:effectStyleLst>
+ <a:bgFillStyleLst>
+ <a:solidFill>
+ <a:schemeClr val="phClr"/>
+ </a:solidFill>
+ <a:gradFill rotWithShape="1">
+ <a:gsLst>
+ <a:gs pos="0">
+ <a:schemeClr val="phClr">
+ <a:tint val="40000"/>
+ <a:satMod val="350000"/>
+ </a:schemeClr>
+ </a:gs>
+ <a:gs pos="40000">
+ <a:schemeClr val="phClr">
+ <a:tint val="45000"/>
+ <a:shade val="99000"/>
+ <a:satMod val="350000"/>
+ </a:schemeClr>
+ </a:gs>
+ <a:gs pos="100000">
+ <a:schemeClr val="phClr">
+ <a:shade val="20000"/>
+ <a:satMod val="255000"/>
+ </a:schemeClr>
+ </a:gs>
+ </a:gsLst>
+ <a:path path="circle">
+ <a:fillToRect l="50000" t="-80000" r="50000" b="180000"/>
+ </a:path>
+ </a:gradFill>
+ <a:gradFill rotWithShape="1">
+ <a:gsLst>
+ <a:gs pos="0">
+ <a:schemeClr val="phClr">
+ <a:tint val="80000"/>
+ <a:satMod val="300000"/>
+ </a:schemeClr>
+ </a:gs>
+ <a:gs pos="100000">
+ <a:schemeClr val="phClr">
+ <a:shade val="30000"/>
+ <a:satMod val="200000"/>
+ </a:schemeClr>
+ </a:gs>
+ </a:gsLst>
+ <a:path path="circle">
+ <a:fillToRect l="50000" t="50000" r="50000" b="50000"/>
+ </a:path>
+ </a:gradFill>
+ </a:bgFillStyleLst>
+ </a:fmtScheme>
+ </a:themeElements>
+ <a:objectDefaults/>
+ <a:extraClrSchemeLst/>
+ </a:theme>
+ </pkg:xmlData>
+ </pkg:part>
+ <pkg:part pkg:name="/word/settings.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml">
+ <pkg:xmlData>
+ <w:settings xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:sl="http://schemas.openxmlformats.org/schemaLibrary/2006/main">
+ <w:zoom w:percent="100"/>
+ <w:defaultTabStop w:val="708"/>
+ <w:hyphenationZone w:val="425"/>
+ <w:characterSpacingControl w:val="doNotCompress"/>
+ <w:compat/>
+ <w:rsids>
+ <w:rsidRoot w:val="009E60C2"/>
+ <w:rsid w:val="001D264D"/>
+ <w:rsid w:val="008B7467"/>
+ <w:rsid w:val="009E60C2"/>
+ <w:rsid w:val="00E36106"/>
+ </w:rsids>
+ <m:mathPr>
+ <m:mathFont m:val="Cambria Math"/>
+ <m:brkBin m:val="before"/>
+ <m:brkBinSub m:val="--"/>
+ <m:smallFrac m:val="off"/>
+ <m:dispDef/>
+ <m:lMargin m:val="0"/>
+ <m:rMargin m:val="0"/>
+ <m:defJc m:val="centerGroup"/>
+ <m:wrapIndent m:val="1440"/>
+ <m:intLim m:val="subSup"/>
+ <m:naryLim m:val="undOvr"/>
+ </m:mathPr>
+ <w:themeFontLang w:val="de-DE"/>
+ <w:clrSchemeMapping w:bg1="light1" w:t1="dark1" w:bg2="light2" w:t2="dark2" w:accent1="accent1" w:accent2="accent2" w:accent3="accent3" w:accent4="accent4" w:accent5="accent5" w:accent6="accent6" w:hyperlink="hyperlink" w:followedHyperlink="followedHyperlink"/>
+ <w:shapeDefaults>
+ <o:shapedefaults v:ext="edit" spidmax="1026"/>
+ <o:shapelayout v:ext="edit">
+ <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout>
+ </w:shapeDefaults>
+ <w:decimalSymbol w:val=","/>
+ <w:listSeparator w:val=";"/>
+ </w:settings>
+ </pkg:xmlData>
+ </pkg:part>
+ <pkg:part pkg:name="/word/fontTable.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml">
+ <pkg:xmlData>
+ <w:fonts xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
+ <w:font w:name="Calibri">
+ <w:panose1 w:val="020F0502020204030204"/>
+ <w:charset w:val="00"/>
+ <w:family w:val="swiss"/>
+ <w:pitch w:val="variable"/>
+ <w:sig w:usb0="A00002EF" w:usb1="4000207B" w:usb2="00000000" w:usb3="00000000" w:csb0="0000009F" w:csb1="00000000"/>
+ </w:font>
+ <w:font w:name="Times New Roman">
+ <w:panose1 w:val="02020603050405020304"/>
+ <w:charset w:val="00"/>
+ <w:family w:val="roman"/>
+ <w:pitch w:val="variable"/>
+ <w:sig w:usb0="20002A87" w:usb1="80000000" w:usb2="00000008" w:usb3="00000000" w:csb0="000001FF" w:csb1="00000000"/>
+ </w:font>
+ <w:font w:name="Cambria">
+ <w:panose1 w:val="02040503050406030204"/>
+ <w:charset w:val="00"/>
+ <w:family w:val="roman"/>
+ <w:pitch w:val="variable"/>
+ <w:sig w:usb0="A00002EF" w:usb1="4000004B" w:usb2="00000000" w:usb3="00000000" w:csb0="0000009F" w:csb1="00000000"/>
+ </w:font>
+ </w:fonts>
+ </pkg:xmlData>
+ </pkg:part>
+ <pkg:part pkg:name="/word/webSettings.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml">
+ <pkg:xmlData>
+ <w:webSettings xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
+ <w:optimizeForBrowser/>
+ </w:webSettings>
+ </pkg:xmlData>
+ </pkg:part>
+ <pkg:part pkg:name="/docProps/app.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.extended-properties+xml" pkg:padding="256">
+ <pkg:xmlData>
+ <Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">
+ <Template>Normal.dotm</Template>
+ <TotalTime>0</TotalTime>
+ <Pages>1</Pages>
+ <Words>0</Words>
+ <Characters>4</Characters>
+ <Application>Microsoft Office Word</Application>
+ <DocSecurity>0</DocSecurity>
+ <Lines>1</Lines>
+ <Paragraphs>1</Paragraphs>
+ <ScaleCrop>false</ScaleCrop>
+ <Company>Sun Microsystems GmbH</Company>
+ <LinksUpToDate>false</LinksUpToDate>
+ <CharactersWithSpaces>4</CharactersWithSpaces>
+ <SharedDoc>false</SharedDoc>
+ <HyperlinksChanged>false</HyperlinksChanged>
+ <AppVersion>12.0000</AppVersion>
+ </Properties>
+ </pkg:xmlData>
+ </pkg:part>
+ <pkg:part pkg:name="/docProps/core.xml" pkg:contentType="application/vnd.openxmlformats-package.core-properties+xml" pkg:padding="256">
+ <pkg:xmlData>
+ <cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <dc:title/>
+ <dc:subject/>
+ <dc:creator>Administrator</dc:creator>
+ <cp:keywords/>
+ <dc:description/>
+ <cp:lastModifiedBy>Administrator</cp:lastModifiedBy>
+ <cp:revision>1</cp:revision>
+ <dcterms:created xsi:type="dcterms:W3CDTF">2007-04-02T14:46:00Z</dcterms:created>
+ <dcterms:modified xsi:type="dcterms:W3CDTF">2007-04-02T14:47:00Z</dcterms:modified>
+ </cp:coreProperties>
+ </pkg:xmlData>
+ </pkg:part>
+ <pkg:part pkg:name="/word/styles.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml">
+ <pkg:xmlData>
+ <w:styles xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
+ <w:docDefaults>
+ <w:rPrDefault>
+ <w:rPr>
+ <w:rFonts w:asciiTheme="minorHAnsi" w:eastAsiaTheme="minorHAnsi" w:hAnsiTheme="minorHAnsi" w:cstheme="minorBidi"/>
+ <w:sz w:val="22"/>
+ <w:szCs w:val="22"/>
+ <w:lang w:val="de-DE" w:eastAsia="en-US" w:bidi="ar-SA"/>
+ </w:rPr>
+ </w:rPrDefault>
+ <w:pPrDefault>
+ <w:pPr>
+ <w:spacing w:after="200" w:line="276" w:lineRule="auto"/>
+ </w:pPr>
+ </w:pPrDefault>
+ </w:docDefaults>
+ <w:latentStyles w:defLockedState="0" w:defUIPriority="99" w:defSemiHidden="1" w:defUnhideWhenUsed="1" w:defQFormat="0" w:count="267">
+ <w:lsdException w:name="Normal" w:semiHidden="0" w:uiPriority="0" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="heading 1" w:semiHidden="0" w:uiPriority="9" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="heading 2" w:uiPriority="9" w:qFormat="1"/>
+ <w:lsdException w:name="heading 3" w:uiPriority="9" w:qFormat="1"/>
+ <w:lsdException w:name="heading 4" w:uiPriority="9" w:qFormat="1"/>
+ <w:lsdException w:name="heading 5" w:uiPriority="9" w:qFormat="1"/>
+ <w:lsdException w:name="heading 6" w:uiPriority="9" w:qFormat="1"/>
+ <w:lsdException w:name="heading 7" w:uiPriority="9" w:qFormat="1"/>
+ <w:lsdException w:name="heading 8" w:uiPriority="9" w:qFormat="1"/>
+ <w:lsdException w:name="heading 9" w:uiPriority="9" w:qFormat="1"/>
+ <w:lsdException w:name="toc 1" w:uiPriority="39"/>
+ <w:lsdException w:name="toc 2" w:uiPriority="39"/>
+ <w:lsdException w:name="toc 3" w:uiPriority="39"/>
+ <w:lsdException w:name="toc 4" w:uiPriority="39"/>
+ <w:lsdException w:name="toc 5" w:uiPriority="39"/>
+ <w:lsdException w:name="toc 6" w:uiPriority="39"/>
+ <w:lsdException w:name="toc 7" w:uiPriority="39"/>
+ <w:lsdException w:name="toc 8" w:uiPriority="39"/>
+ <w:lsdException w:name="toc 9" w:uiPriority="39"/>
+ <w:lsdException w:name="caption" w:uiPriority="35" w:qFormat="1"/>
+ <w:lsdException w:name="Title" w:semiHidden="0" w:uiPriority="10" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Default Paragraph Font" w:uiPriority="1"/>
+ <w:lsdException w:name="Subtitle" w:semiHidden="0" w:uiPriority="11" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Strong" w:semiHidden="0" w:uiPriority="22" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Emphasis" w:semiHidden="0" w:uiPriority="20" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Table Grid" w:semiHidden="0" w:uiPriority="59" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Placeholder Text" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="No Spacing" w:semiHidden="0" w:uiPriority="1" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Light Shading" w:semiHidden="0" w:uiPriority="60" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light List" w:semiHidden="0" w:uiPriority="61" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Grid" w:semiHidden="0" w:uiPriority="62" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 1" w:semiHidden="0" w:uiPriority="63" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 2" w:semiHidden="0" w:uiPriority="64" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 1" w:semiHidden="0" w:uiPriority="65" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 2" w:semiHidden="0" w:uiPriority="66" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 1" w:semiHidden="0" w:uiPriority="67" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 2" w:semiHidden="0" w:uiPriority="68" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 3" w:semiHidden="0" w:uiPriority="69" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Dark List" w:semiHidden="0" w:uiPriority="70" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Shading" w:semiHidden="0" w:uiPriority="71" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful List" w:semiHidden="0" w:uiPriority="72" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Grid" w:semiHidden="0" w:uiPriority="73" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Shading Accent 1" w:semiHidden="0" w:uiPriority="60" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light List Accent 1" w:semiHidden="0" w:uiPriority="61" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Grid Accent 1" w:semiHidden="0" w:uiPriority="62" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 1 Accent 1" w:semiHidden="0" w:uiPriority="63" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 2 Accent 1" w:semiHidden="0" w:uiPriority="64" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 1 Accent 1" w:semiHidden="0" w:uiPriority="65" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Revision" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="List Paragraph" w:semiHidden="0" w:uiPriority="34" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Quote" w:semiHidden="0" w:uiPriority="29" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Intense Quote" w:semiHidden="0" w:uiPriority="30" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Medium List 2 Accent 1" w:semiHidden="0" w:uiPriority="66" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 1 Accent 1" w:semiHidden="0" w:uiPriority="67" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 2 Accent 1" w:semiHidden="0" w:uiPriority="68" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 3 Accent 1" w:semiHidden="0" w:uiPriority="69" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Dark List Accent 1" w:semiHidden="0" w:uiPriority="70" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Shading Accent 1" w:semiHidden="0" w:uiPriority="71" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful List Accent 1" w:semiHidden="0" w:uiPriority="72" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Grid Accent 1" w:semiHidden="0" w:uiPriority="73" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Shading Accent 2" w:semiHidden="0" w:uiPriority="60" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light List Accent 2" w:semiHidden="0" w:uiPriority="61" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Grid Accent 2" w:semiHidden="0" w:uiPriority="62" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 1 Accent 2" w:semiHidden="0" w:uiPriority="63" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 2 Accent 2" w:semiHidden="0" w:uiPriority="64" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 1 Accent 2" w:semiHidden="0" w:uiPriority="65" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 2 Accent 2" w:semiHidden="0" w:uiPriority="66" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 1 Accent 2" w:semiHidden="0" w:uiPriority="67" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 2 Accent 2" w:semiHidden="0" w:uiPriority="68" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 3 Accent 2" w:semiHidden="0" w:uiPriority="69" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Dark List Accent 2" w:semiHidden="0" w:uiPriority="70" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Shading Accent 2" w:semiHidden="0" w:uiPriority="71" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful List Accent 2" w:semiHidden="0" w:uiPriority="72" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Grid Accent 2" w:semiHidden="0" w:uiPriority="73" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Shading Accent 3" w:semiHidden="0" w:uiPriority="60" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light List Accent 3" w:semiHidden="0" w:uiPriority="61" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Grid Accent 3" w:semiHidden="0" w:uiPriority="62" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 1 Accent 3" w:semiHidden="0" w:uiPriority="63" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 2 Accent 3" w:semiHidden="0" w:uiPriority="64" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 1 Accent 3" w:semiHidden="0" w:uiPriority="65" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 2 Accent 3" w:semiHidden="0" w:uiPriority="66" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 1 Accent 3" w:semiHidden="0" w:uiPriority="67" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 2 Accent 3" w:semiHidden="0" w:uiPriority="68" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 3 Accent 3" w:semiHidden="0" w:uiPriority="69" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Dark List Accent 3" w:semiHidden="0" w:uiPriority="70" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Shading Accent 3" w:semiHidden="0" w:uiPriority="71" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful List Accent 3" w:semiHidden="0" w:uiPriority="72" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Grid Accent 3" w:semiHidden="0" w:uiPriority="73" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Shading Accent 4" w:semiHidden="0" w:uiPriority="60" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light List Accent 4" w:semiHidden="0" w:uiPriority="61" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Grid Accent 4" w:semiHidden="0" w:uiPriority="62" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 1 Accent 4" w:semiHidden="0" w:uiPriority="63" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 2 Accent 4" w:semiHidden="0" w:uiPriority="64" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 1 Accent 4" w:semiHidden="0" w:uiPriority="65" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 2 Accent 4" w:semiHidden="0" w:uiPriority="66" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 1 Accent 4" w:semiHidden="0" w:uiPriority="67" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 2 Accent 4" w:semiHidden="0" w:uiPriority="68" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 3 Accent 4" w:semiHidden="0" w:uiPriority="69" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Dark List Accent 4" w:semiHidden="0" w:uiPriority="70" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Shading Accent 4" w:semiHidden="0" w:uiPriority="71" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful List Accent 4" w:semiHidden="0" w:uiPriority="72" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Grid Accent 4" w:semiHidden="0" w:uiPriority="73" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Shading Accent 5" w:semiHidden="0" w:uiPriority="60" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light List Accent 5" w:semiHidden="0" w:uiPriority="61" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Grid Accent 5" w:semiHidden="0" w:uiPriority="62" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 1 Accent 5" w:semiHidden="0" w:uiPriority="63" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 2 Accent 5" w:semiHidden="0" w:uiPriority="64" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 1 Accent 5" w:semiHidden="0" w:uiPriority="65" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 2 Accent 5" w:semiHidden="0" w:uiPriority="66" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 1 Accent 5" w:semiHidden="0" w:uiPriority="67" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 2 Accent 5" w:semiHidden="0" w:uiPriority="68" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 3 Accent 5" w:semiHidden="0" w:uiPriority="69" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Dark List Accent 5" w:semiHidden="0" w:uiPriority="70" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Shading Accent 5" w:semiHidden="0" w:uiPriority="71" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful List Accent 5" w:semiHidden="0" w:uiPriority="72" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Grid Accent 5" w:semiHidden="0" w:uiPriority="73" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Shading Accent 6" w:semiHidden="0" w:uiPriority="60" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light List Accent 6" w:semiHidden="0" w:uiPriority="61" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Grid Accent 6" w:semiHidden="0" w:uiPriority="62" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 1 Accent 6" w:semiHidden="0" w:uiPriority="63" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 2 Accent 6" w:semiHidden="0" w:uiPriority="64" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 1 Accent 6" w:semiHidden="0" w:uiPriority="65" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 2 Accent 6" w:semiHidden="0" w:uiPriority="66" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 1 Accent 6" w:semiHidden="0" w:uiPriority="67" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 2 Accent 6" w:semiHidden="0" w:uiPriority="68" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 3 Accent 6" w:semiHidden="0" w:uiPriority="69" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Dark List Accent 6" w:semiHidden="0" w:uiPriority="70" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Shading Accent 6" w:semiHidden="0" w:uiPriority="71" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful List Accent 6" w:semiHidden="0" w:uiPriority="72" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Grid Accent 6" w:semiHidden="0" w:uiPriority="73" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Subtle Emphasis" w:semiHidden="0" w:uiPriority="19" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Intense Emphasis" w:semiHidden="0" w:uiPriority="21" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Subtle Reference" w:semiHidden="0" w:uiPriority="31" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Intense Reference" w:semiHidden="0" w:uiPriority="32" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Book Title" w:semiHidden="0" w:uiPriority="33" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Bibliography" w:uiPriority="37"/>
+ <w:lsdException w:name="TOC Heading" w:uiPriority="39" w:qFormat="1"/>
+ </w:latentStyles>
+ <w:style w:type="paragraph" w:default="1" w:styleId="Normal">
+ <w:name w:val="Normal"/>
+ <w:qFormat/>
+ <w:rsid w:val="008B7467"/>
+ </w:style>
+ <w:style w:type="character" w:default="1" w:styleId="DefaultParagraphFont">
+ <w:name w:val="Default Paragraph Font"/>
+ <w:uiPriority w:val="1"/>
+ <w:semiHidden/>
+ <w:unhideWhenUsed/>
+ </w:style>
+ <w:style w:type="table" w:default="1" w:styleId="TableNormal">
+ <w:name w:val="Normal Table"/>
+ <w:uiPriority w:val="99"/>
+ <w:semiHidden/>
+ <w:unhideWhenUsed/>
+ <w:qFormat/>
+ <w:tblPr>
+ <w:tblInd w:w="0" w:type="dxa"/>
+ <w:tblCellMar>
+ <w:top w:w="0" w:type="dxa"/>
+ <w:left w:w="108" w:type="dxa"/>
+ <w:bottom w:w="0" w:type="dxa"/>
+ <w:right w:w="108" w:type="dxa"/>
+ </w:tblCellMar>
+ </w:tblPr>
+ </w:style>
+ <w:style w:type="numbering" w:default="1" w:styleId="NoList">
+ <w:name w:val="No List"/>
+ <w:uiPriority w:val="99"/>
+ <w:semiHidden/>
+ <w:unhideWhenUsed/>
+ </w:style>
+ </w:styles>
+ </pkg:xmlData>
+ </pkg:part>
+</pkg:package>
+ </xsl:template>
+
+ <xsl:template match="rng:define" mode="attrvalue">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:element name="resource">
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="resource">List</xsl:attribute>
+ <xsl:for-each select=".//rng:value">
+ <xsl:element name="value">
+ <xsl:attribute name="tokenid">
+ <xsl:text>ooxml:Value_</xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="."/>
+ </xsl:attribute>
+ <xsl:value-of select="."/>
+ </xsl:element>
+ </xsl:for-each>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template match="rng:define" mode="resourcesPropertySetValue">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:element name="resource">
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="resource">
+ <xsl:text>Properties</xsl:text>
+ </xsl:attribute>
+ <xsl:for-each select=".//rng:element">
+ <xsl:element name="element">
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="tokenid">
+ <xsl:text>ooxml:</xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ </xsl:element>
+ </xsl:for-each>
+ <xsl:for-each select=".//rng:attribute">
+ <xsl:element name="attribute">
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="tokenid">
+ <xsl:text>ooxml:</xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ </xsl:element>
+ </xsl:for-each>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template match="rng:define" mode="resourcevalues">
+ <xsl:variable name="definename" select="@name"/>
+ <xsl:element name="resource">
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="resource">List</xsl:attribute>
+ <xsl:for-each select=".//rng:value">
+ <xsl:element name="value">
+ <xsl:attribute name="name">
+ <xsl:value-of select="."/>
+ </xsl:attribute>
+ <xsl:attribute name="tokenid">
+ <xsl:text>ooxml:Value_</xsl:text>
+ <xsl:value-of select="$definename"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="."/>
+ </xsl:attribute>
+ <xsl:value-of select="."/>
+ </xsl:element>
+ </xsl:for-each>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template match="rng:define" mode="tabledoc" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
+ <xsl:for-each select=".//rng:element">
+ <w:tbl>
+ <w:tblPr>
+ <xsl:element name="w:{@name}"/>
+ </w:tblPr>
+ <w:tr>
+ <w:tc>
+ <w:tcPr/>
+ <w:p >
+ <w:pPr>
+ <w:rPr/>
+ </w:pPr>
+ <w:r><w:t><xsl:value-of select="@name"/></w:t></w:r>
+ </w:p>
+ </w:tc>
+ </w:tr>
+ </w:tbl>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:key name="resources" match="resource" use="@resource"/>
+
+ <xsl:template name="resources">
+ <xsl:for-each select="//resource">
+ <xsl:if test="generate-id(.) = generate-id(key('resources', @resource)[1])">
+ <xsl:element name="resource">
+ <xsl:attribute name="resource">
+ <xsl:value-of select="@resource"/>
+ </xsl:attribute>
+ </xsl:element>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="genfastresxsl">
+ <xsl:for-each select="//namespace[not(@name = 'wml')]">
+ <xsl:text>
+sed "s/wml/</xsl:text>
+<xsl:value-of select="@name"/>
+<xsl:text>/" &lt; fastresourcesimpl_wml.xsl &gt; fastresourcesimpl_</xsl:text>
+<xsl:value-of select="@name"/>
+<xsl:text>.xsl</xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="genresxsl">
+ <xsl:for-each select="//namespace">
+ <xsl:text>
+sed "s/wml/</xsl:text>
+<xsl:value-of select="@name"/>
+<xsl:text>/;s/_WML_/_</xsl:text>
+<xsl:value-of select="translate(@name, 'abcdefghijklmnopqrstuvwxyz-', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_')"/>
+<xsl:text>_/" &lt; fastresources_.xsl &gt; fastresources_</xsl:text>
+<xsl:value-of select="@name"/>
+<xsl:text>.xsl</xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="findpath">
+ <xsl:param name="path"/>
+ <xsl:variable name="name" select="@name"/>
+ <xsl:if test="not(contains($path, concat(@name, ',')))">
+ <xsl:for-each select="ancestor::rng:grammar//rng:ref[@name=$name]">
+ <xsl:for-each select="ancestor::rng:define">
+ <xsl:call-template name="findpath">
+ <xsl:with-param name="path" select="concat($path, @name, ',')"/>
+ </xsl:call-template>
+ <xsl:value-of select="@name"/>
+ <xsl:text> -> </xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="/">
+ <out>
+ <xsl:apply-templates select="//rng:define[@name='OLEObject']"
+ mode='resourcesPropertySetValue'/>
+ </out>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources.xsl b/writerfilter/source/ooxml/fastresources.xsl
new file mode 100644
index 000000000000..bf68234a37bb
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources.xsl
@@ -0,0 +1,116 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_RESOURCES_HXX
+#define INCLUDED_OOXML_RESOURCES_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include &lt;resourcemodel/TagLogger.hxx&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include &lt;ooxml/OOXMLnamespaceids.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"</xsl:text>
+ <xsl:for-each select="//namespace">
+ <xsl:text>
+#include "OOXMLfastresources_</xsl:text>
+<xsl:value-of select="@name"/>
+<xsl:text>.hxx"</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+
+namespace writerfilter {
+namespace ooxml {
+
+extern TagLogger::Pointer_t debug_logger;
+
+using namespace ::std;
+using namespace ::com::sun::star;
+
+uno::Reference &lt; xml::sax::XFastContextHandler &gt;
+createFromStart(::sal_Int32 Element);
+void dumpAttribs
+(const uno::Reference &lt; xml::sax::XFastAttributeList &gt; &amp; Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="valueconstantdecls"/>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_RESOURCES_HXX&#xa;</xsl:text></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_.xsl b/writerfilter/source/ooxml/fastresources_.xsl
new file mode 100644
index 000000000000..6141bb7f02bc
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_.xsl
@@ -0,0 +1,99 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_WML_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_WML_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+using namespace doctok;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">wml</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_WML_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_dml-baseStylesheet.xsl b/writerfilter/source/ooxml/fastresources_dml-baseStylesheet.xsl
new file mode 100644
index 000000000000..b16443e1021a
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_dml-baseStylesheet.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_DML_BASESTYLESHEET_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_DML_BASESTYLESHEET_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">dml-baseStylesheet</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_DML_BASESTYLESHEET_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_dml-baseTypes.xsl b/writerfilter/source/ooxml/fastresources_dml-baseTypes.xsl
new file mode 100644
index 000000000000..1311c8593b8f
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_dml-baseTypes.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_DML_BASETYPES_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_DML_BASETYPES_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">dml-baseTypes</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_DML_BASETYPES_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_dml-chartDrawing.xsl b/writerfilter/source/ooxml/fastresources_dml-chartDrawing.xsl
new file mode 100644
index 000000000000..3a0869ebe826
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_dml-chartDrawing.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_DML_CHARTDRAWING_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_DML_CHARTDRAWING_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">dml-chartDrawing</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_DML_CHARTDRAWING_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_dml-documentProperties.xsl b/writerfilter/source/ooxml/fastresources_dml-documentProperties.xsl
new file mode 100644
index 000000000000..4a5aab2e3012
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_dml-documentProperties.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_DML_DOCUMENTPROPERTIES_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_DML_DOCUMENTPROPERTIES_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">dml-documentProperties</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_DML_DOCUMENTPROPERTIES_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_dml-graphicalObject.xsl b/writerfilter/source/ooxml/fastresources_dml-graphicalObject.xsl
new file mode 100644
index 000000000000..731fe6dd7712
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_dml-graphicalObject.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_DML_GRAPHICALOBJECT_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_DML_GRAPHICALOBJECT_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">dml-graphicalObject</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_DML_GRAPHICALOBJECT_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_dml-shape3DCamera.xsl b/writerfilter/source/ooxml/fastresources_dml-shape3DCamera.xsl
new file mode 100644
index 000000000000..8ff2260a76c4
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_dml-shape3DCamera.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_DML_SHAPE3DCAMERA_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_DML_SHAPE3DCAMERA_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">dml-shape3DCamera</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_DML_SHAPE3DCAMERA_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_dml-shape3DLighting.xsl b/writerfilter/source/ooxml/fastresources_dml-shape3DLighting.xsl
new file mode 100644
index 000000000000..374668a8b7e3
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_dml-shape3DLighting.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_DML_SHAPE3DLIGHTING_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_DML_SHAPE3DLIGHTING_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">dml-shape3DLighting</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_DML_SHAPE3DLIGHTING_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_dml-shape3DScene.xsl b/writerfilter/source/ooxml/fastresources_dml-shape3DScene.xsl
new file mode 100644
index 000000000000..aec93f875597
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_dml-shape3DScene.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_DML_SHAPE3DSCENE_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_DML_SHAPE3DSCENE_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">dml-shape3DScene</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_DML_SHAPE3DSCENE_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_dml-shape3DStyles.xsl b/writerfilter/source/ooxml/fastresources_dml-shape3DStyles.xsl
new file mode 100644
index 000000000000..8769fdc93f88
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_dml-shape3DStyles.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_DML_SHAPE3DSTYLES_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_DML_SHAPE3DSTYLES_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">dml-shape3DStyles</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_DML_SHAPE3DSTYLES_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_dml-shapeEffects.xsl b/writerfilter/source/ooxml/fastresources_dml-shapeEffects.xsl
new file mode 100644
index 000000000000..3925aa2c2f34
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_dml-shapeEffects.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_DML_SHAPEEFFECTS_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_DML_SHAPEEFFECTS_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">dml-shapeEffects</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_DML_SHAPEEFFECTS_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_dml-shapeGeometry.xsl b/writerfilter/source/ooxml/fastresources_dml-shapeGeometry.xsl
new file mode 100644
index 000000000000..d500a94d7137
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_dml-shapeGeometry.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_DML_SHAPEGEOMETRY_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_DML_SHAPEGEOMETRY_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">dml-shapeGeometry</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_DML_SHAPEGEOMETRY_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_dml-shapeLineProperties.xsl b/writerfilter/source/ooxml/fastresources_dml-shapeLineProperties.xsl
new file mode 100644
index 000000000000..cc7e47ba3e27
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_dml-shapeLineProperties.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_DML_SHAPELINEPROPERTIES_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_DML_SHAPELINEPROPERTIES_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">dml-shapeLineProperties</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_DML_SHAPELINEPROPERTIES_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_dml-shapeProperties.xsl b/writerfilter/source/ooxml/fastresources_dml-shapeProperties.xsl
new file mode 100644
index 000000000000..7fbfef66b033
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_dml-shapeProperties.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_DML_SHAPEPROPERTIES_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_DML_SHAPEPROPERTIES_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">dml-shapeProperties</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_DML_SHAPEPROPERTIES_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_dml-styleDefaults.xsl b/writerfilter/source/ooxml/fastresources_dml-styleDefaults.xsl
new file mode 100644
index 000000000000..35d20409e2f0
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_dml-styleDefaults.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_DML_STYLEDEFAULTS_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_DML_STYLEDEFAULTS_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">dml-styleDefaults</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_DML_STYLEDEFAULTS_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_dml-stylesheet.xsl b/writerfilter/source/ooxml/fastresources_dml-stylesheet.xsl
new file mode 100644
index 000000000000..182052eb117b
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_dml-stylesheet.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_DML_STYLESHEET_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_DML_STYLESHEET_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">dml-stylesheet</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_DML_STYLESHEET_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_dml-textCharacter.xsl b/writerfilter/source/ooxml/fastresources_dml-textCharacter.xsl
new file mode 100644
index 000000000000..8b276f25d4ad
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_dml-textCharacter.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_DML_TEXTCHARACTER_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_DML_TEXTCHARACTER_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">dml-textCharacter</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_DML_TEXTCHARACTER_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_dml-wordprocessingDrawing.xsl b/writerfilter/source/ooxml/fastresources_dml-wordprocessingDrawing.xsl
new file mode 100644
index 000000000000..d158513e3240
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_dml-wordprocessingDrawing.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_DML_WORDPROCESSINGDRAWING_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_DML_WORDPROCESSINGDRAWING_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">dml-wordprocessingDrawing</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_DML_WORDPROCESSINGDRAWING_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_shared-math.xsl b/writerfilter/source/ooxml/fastresources_shared-math.xsl
new file mode 100644
index 000000000000..c80d616f8f50
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_shared-math.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_SHARED_MATH_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_SHARED_MATH_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">shared-math</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_SHARED_MATH_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_shared-relationshipReference.xsl b/writerfilter/source/ooxml/fastresources_shared-relationshipReference.xsl
new file mode 100644
index 000000000000..d4abaf92680c
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_shared-relationshipReference.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_SHARED_RELATIONSHIPREFERENCE_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_SHARED_RELATIONSHIPREFERENCE_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">shared-relationshipReference</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_SHARED_RELATIONSHIPREFERENCE_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_sml-customXmlMappings.xsl b/writerfilter/source/ooxml/fastresources_sml-customXmlMappings.xsl
new file mode 100644
index 000000000000..33238578d449
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_sml-customXmlMappings.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_SML_CUSTOMXMLMAPPINGS_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_SML_CUSTOMXMLMAPPINGS_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">sml-customXmlMappings</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_SML_CUSTOMXMLMAPPINGS_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_vml-main.xsl b/writerfilter/source/ooxml/fastresources_vml-main.xsl
new file mode 100644
index 000000000000..cd9512ecd7d8
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_vml-main.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_VML_MAIN_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_VML_MAIN_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">vml-main</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_VML_MAIN_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_vml-officeDrawing.xsl b/writerfilter/source/ooxml/fastresources_vml-officeDrawing.xsl
new file mode 100644
index 000000000000..039a2a2f608c
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_vml-officeDrawing.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_VML_OFFICE_DRAWING_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_VML_OFFICE_DRAWING_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">vml-officeDrawing</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_VML_OFFICE_DRAWING_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_vml-wordprocessingDrawing.xsl b/writerfilter/source/ooxml/fastresources_vml-wordprocessingDrawing.xsl
new file mode 100644
index 000000000000..fa5adb933284
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_vml-wordprocessingDrawing.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_VML_WORDPROCESSION_DRAWING_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_VML_WORDPROCESSION_DRAWING_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">vml-wordprocessingDrawing</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_VML_WORDPROCESSION_DRAWING_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresources_wml.xsl b/writerfilter/source/ooxml/fastresources_wml.xsl
new file mode 100644
index 000000000000..c21ab6ef2cdd
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresources_wml.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FASTRESOURCES_WML_HXX
+#define INCLUDED_OOXML_FASTRESOURCES_WML_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLStreamImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="fastcontextdecls">
+ <xsl:with-param name="namespace">wml</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_FASTRESOURCES_WML_HXX&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl.xsl b/writerfilter/source/ooxml/fastresourcesimpl.xsl
new file mode 100644
index 000000000000..ac0558236cd4
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl.xsl
@@ -0,0 +1,95 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;string&gt;
+#include &lt;doctok/sprmids.hxx&gt;
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLfastresources.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextcreatefromstart"/>
+ <xsl:call-template name="getfastparser"/>
+ <xsl:call-template name="fasttokentoid"/>
+ <xsl:call-template name="sprmkind"/>
+ <xsl:call-template name="dumpattribs"/>
+ <xsl:call-template name="ooxmlidstoxml"/>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_dml-baseStylesheet.xsl b/writerfilter/source/ooxml/fastresourcesimpl_dml-baseStylesheet.xsl
new file mode 100644
index 000000000000..79c4f46a51ee
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_dml-baseStylesheet.xsl
@@ -0,0 +1,93 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">dml-baseStylesheet</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_dml-baseTypes.xsl b/writerfilter/source/ooxml/fastresourcesimpl_dml-baseTypes.xsl
new file mode 100644
index 000000000000..cf7de4f5427a
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_dml-baseTypes.xsl
@@ -0,0 +1,93 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">dml-baseTypes</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_dml-chartDrawing.xsl b/writerfilter/source/ooxml/fastresourcesimpl_dml-chartDrawing.xsl
new file mode 100644
index 000000000000..6f14f1399d9c
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_dml-chartDrawing.xsl
@@ -0,0 +1,93 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">dml-chartDrawing</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_dml-documentProperties.xsl b/writerfilter/source/ooxml/fastresourcesimpl_dml-documentProperties.xsl
new file mode 100644
index 000000000000..19c6cc30c9d8
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_dml-documentProperties.xsl
@@ -0,0 +1,93 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">dml-documentProperties</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_dml-graphicalObject.xsl b/writerfilter/source/ooxml/fastresourcesimpl_dml-graphicalObject.xsl
new file mode 100644
index 000000000000..c3854540c818
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_dml-graphicalObject.xsl
@@ -0,0 +1,93 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">dml-graphicalObject</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_dml-shape3DCamera.xsl b/writerfilter/source/ooxml/fastresourcesimpl_dml-shape3DCamera.xsl
new file mode 100644
index 000000000000..b0b3c5ed0c35
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_dml-shape3DCamera.xsl
@@ -0,0 +1,93 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">dml-shape3DCamera</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_dml-shape3DLighting.xsl b/writerfilter/source/ooxml/fastresourcesimpl_dml-shape3DLighting.xsl
new file mode 100644
index 000000000000..42c99380ea3b
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_dml-shape3DLighting.xsl
@@ -0,0 +1,93 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">dml-shape3DLighting</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_dml-shape3DScene.xsl b/writerfilter/source/ooxml/fastresourcesimpl_dml-shape3DScene.xsl
new file mode 100644
index 000000000000..caa362a3e0a7
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_dml-shape3DScene.xsl
@@ -0,0 +1,93 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">dml-shape3DScene</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_dml-shape3DStyles.xsl b/writerfilter/source/ooxml/fastresourcesimpl_dml-shape3DStyles.xsl
new file mode 100644
index 000000000000..5c07fc034714
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_dml-shape3DStyles.xsl
@@ -0,0 +1,93 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">dml-shape3DStyles</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_dml-shapeEffects.xsl b/writerfilter/source/ooxml/fastresourcesimpl_dml-shapeEffects.xsl
new file mode 100644
index 000000000000..285518d3908d
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_dml-shapeEffects.xsl
@@ -0,0 +1,93 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">dml-shapeEffects</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_dml-shapeGeometry.xsl b/writerfilter/source/ooxml/fastresourcesimpl_dml-shapeGeometry.xsl
new file mode 100644
index 000000000000..063ab2c4aae9
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_dml-shapeGeometry.xsl
@@ -0,0 +1,93 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">dml-shapeGeometry</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_dml-shapeLineProperties.xsl b/writerfilter/source/ooxml/fastresourcesimpl_dml-shapeLineProperties.xsl
new file mode 100644
index 000000000000..41127751ff2d
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_dml-shapeLineProperties.xsl
@@ -0,0 +1,93 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">dml-shapeLineProperties</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_dml-shapeProperties.xsl b/writerfilter/source/ooxml/fastresourcesimpl_dml-shapeProperties.xsl
new file mode 100644
index 000000000000..9904907317cc
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_dml-shapeProperties.xsl
@@ -0,0 +1,93 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">dml-shapeProperties</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_dml-styleDefaults.xsl b/writerfilter/source/ooxml/fastresourcesimpl_dml-styleDefaults.xsl
new file mode 100644
index 000000000000..604652d664c2
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_dml-styleDefaults.xsl
@@ -0,0 +1,93 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">dml-styleDefaults</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_dml-stylesheet.xsl b/writerfilter/source/ooxml/fastresourcesimpl_dml-stylesheet.xsl
new file mode 100644
index 000000000000..940363e355f2
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_dml-stylesheet.xsl
@@ -0,0 +1,93 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">dml-stylesheet</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_dml-textCharacter.xsl b/writerfilter/source/ooxml/fastresourcesimpl_dml-textCharacter.xsl
new file mode 100644
index 000000000000..d3d486196825
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_dml-textCharacter.xsl
@@ -0,0 +1,93 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">dml-textCharacter</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_dml-wordprocessingDrawing.xsl b/writerfilter/source/ooxml/fastresourcesimpl_dml-wordprocessingDrawing.xsl
new file mode 100644
index 000000000000..6433812e6c2f
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_dml-wordprocessingDrawing.xsl
@@ -0,0 +1,94 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">dml-wordprocessingDrawing</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_shared-math.xsl b/writerfilter/source/ooxml/fastresourcesimpl_shared-math.xsl
new file mode 100644
index 000000000000..65af7e93fa0a
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_shared-math.xsl
@@ -0,0 +1,93 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">shared-math</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_shared-relationshipReference.xsl b/writerfilter/source/ooxml/fastresourcesimpl_shared-relationshipReference.xsl
new file mode 100644
index 000000000000..ff0e8416d23a
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_shared-relationshipReference.xsl
@@ -0,0 +1,93 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">shared-relationshipReference</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_sml-customXmlMappings.xsl b/writerfilter/source/ooxml/fastresourcesimpl_sml-customXmlMappings.xsl
new file mode 100644
index 000000000000..21dc37d4dec4
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_sml-customXmlMappings.xsl
@@ -0,0 +1,93 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">sml-customXmlMappings</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_vml-main.xsl b/writerfilter/source/ooxml/fastresourcesimpl_vml-main.xsl
new file mode 100644
index 000000000000..080e31ed69cd
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_vml-main.xsl
@@ -0,0 +1,94 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include &lt;doctok/sprmids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">vml-main</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_vml-officeDrawing.xsl b/writerfilter/source/ooxml/fastresourcesimpl_vml-officeDrawing.xsl
new file mode 100644
index 000000000000..d4716325726d
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_vml-officeDrawing.xsl
@@ -0,0 +1,94 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include &lt;doctok/sprmids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">vml-officeDrawing</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_vml-wordprocessingDrawing.xsl b/writerfilter/source/ooxml/fastresourcesimpl_vml-wordprocessingDrawing.xsl
new file mode 100644
index 000000000000..09500c745444
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_vml-wordprocessingDrawing.xsl
@@ -0,0 +1,94 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include &lt;doctok/sprmids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">vml-wordprocessingDrawing</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fastresourcesimpl_wml.xsl b/writerfilter/source/ooxml/fastresourcesimpl_wml.xsl
new file mode 100644
index 000000000000..1b0b41debcff
--- /dev/null
+++ b/writerfilter/source/ooxml/fastresourcesimpl_wml.xsl
@@ -0,0 +1,94 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include &lt;doctok/sprmids.hxx&gt;
+#include "OOXMLfastresources.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLvalues.hxx"
+#include "Handler.hxx"
+
+/// @cond GENERATED
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+
+ </xsl:text>
+ <xsl:call-template name="fastcontextimpls"><xsl:with-param name="ns">wml</xsl:with-param></xsl:call-template>
+ <xsl:text>
+}}
+/// @endcond GENERATED
+&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fasttokens.xsl b/writerfilter/source/ooxml/fasttokens.xsl
new file mode 100644
index 000000000000..151e2f1cda0c
--- /dev/null
+++ b/writerfilter/source/ooxml/fasttokens.xsl
@@ -0,0 +1,95 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FAST_TOKENS_HXX
+#define INCLUDED_OOXML_FAST_TOKENS_HXX
+
+#include &lt;map&gt;
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+</xsl:text>
+<xsl:call-template name="fasttokens"/>
+<xsl:text>
+string fastTokenToId(sal_uInt32 nToken);
+
+static const sal_uInt32 F_Attribute = 1U &lt;&lt; 31;
+
+}}
+#endif //INCLUDED_OOXML_FAST_TOKENS_HXX&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/fasttokensimpl.xsl b/writerfilter/source/ooxml/fasttokensimpl.xsl
new file mode 100644
index 000000000000..1bafce1978e2
--- /dev/null
+++ b/writerfilter/source/ooxml/fasttokensimpl.xsl
@@ -0,0 +1,77 @@
+<!--
+
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+</xsl:text>
+<xsl:call-template name="fasttokentoid"/>
+<xsl:text>
+}}&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/gperffasttokenhandler.xsl b/writerfilter/source/ooxml/gperffasttokenhandler.xsl
new file mode 100644
index 000000000000..9ecd15f8c744
--- /dev/null
+++ b/writerfilter/source/ooxml/gperffasttokenhandler.xsl
@@ -0,0 +1,72 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:xalan="http://xml.apache.org/xalan"
+ xmlns:UML = 'org.omg.xmi.namespace.UML'
+ exclude-result-prefixes = "xalan"
+ xml:space="default">
+ <xsl:output method="text" />
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="gperfinputfasttokenhandler"/>
+ </xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/makefile.mk b/writerfilter/source/ooxml/makefile.mk
new file mode 100644
index 000000000000..ac8e7ea9b05c
--- /dev/null
+++ b/writerfilter/source/ooxml/makefile.mk
@@ -0,0 +1,271 @@
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+
+PRJ=..$/..
+PRJNAME=writerfilter
+TARGET=ooxml
+#LIBTARGET=NO
+#USE_DEFFILE=TRUE
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/inc$/writerfilter.mk
+
+#CFLAGS+=-DISOLATION_AWARE_ENABLED -DWIN32_LEAN_AND_MEAN -DXML_UNICODE -D_NTSDK -DUNICODE -D_UNICODE -D_WIN32_WINNT=0x0501
+#CFLAGS+=-wd4710 -wd4711 -wd4514 -wd4619 -wd4217 -wd4820
+
+NAMESPACES= \
+ wml \
+ dml-stylesheet \
+ dml-styleDefaults \
+ dml-shape3DLighting \
+ dml-shape3DScene \
+ dml-shape3DStyles \
+ dml-shape3DCamera \
+ dml-baseStylesheet \
+ dml-textCharacter \
+ dml-shapeEffects \
+ dml-shapeLineProperties \
+ dml-shapeProperties \
+ dml-baseTypes \
+ dml-documentProperties \
+ dml-graphicalObject \
+ dml-shapeGeometry \
+ dml-wordprocessingDrawing \
+ sml-customXmlMappings \
+ shared-math \
+ shared-relationshipReference \
+ dml-chartDrawing \
+ vml-main \
+ vml-officeDrawing \
+ vml-wordprocessingDrawing
+
+# --- Files --------------------------------------------------------
+
+SLOFASTNAMESPACES= \
+ $(SLO)$/OOXMLfastresources_{$(NAMESPACES)}.obj
+
+SLOFILES= \
+ $(SLOFASTNAMESPACES) \
+ $(SLO)$/OOXMLBinaryObjectReference.obj\
+ $(SLO)$/OOXMLfastresources.obj \
+ $(SLO)$/OOXMLvalues.obj \
+ $(SLO)$/OOXMLPropertySetImpl.obj \
+ $(SLO)$/OOXMLParserState.obj \
+ $(SLO)$/Handler.obj \
+ $(SLO)$/OOXMLDocumentImpl.obj \
+ $(SLO)$/OOXMLStreamImpl.obj \
+ $(SLO)$/OOXMLFastDocumentHandler.obj \
+ $(SLO)$/OOXMLFastContextHandler.obj \
+ $(SLO)$/OOXMLFastTokenHandler.obj
+
+
+SHL1TARGET=$(TARGET)
+
+.IF "$(GUI)"=="UNX" || "$(GUI)"=="MAC"
+RESOURCEMODELLIB=-lresourcemodel
+.ELIF "$(GUI)"=="OS2"
+RESOURCEMODELLIB=$(LB)$/iresourcemodel.lib
+.ELIF "$(GUI)"=="WNT"
+.IF "$(COM)"=="GCC"
+RESOURCEMODELLIB=-lresourcemodel
+.ELSE
+RESOURCEMODELLIB=$(LB)$/iresourcemodel.lib
+.ENDIF
+.ENDIF
+
+SHL1STDLIBS=$(SALLIB)\
+ $(CPPULIB)\
+ $(CPPUHELPERLIB) \
+ $(COMPHELPERLIB) \
+ $(RESOURCEMODELLIB)
+SHL1IMPLIB=i$(SHL1TARGET)
+SHL1USE_EXPORTS=name
+
+SHL1OBJS=$(SLOFILES)
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+DEF1NAME=$(SHL1TARGET)
+DEFLIB1NAME=$(TARGET)
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+.PHONY : test
+
+test:
+ echo $(SLOFILES)
+
+OOXMLCXXOUTDIR=$(MISC)
+OOXMLHXXOUTDIR=$(INCCOM)/ooxml
+OOXMLHXXOUTDIRCREATED=$(OOXMLHXXOUTDIR)/created
+
+OOXMLFASTRESOURCECXXS=$(OOXMLCXXOUTDIR)$/OOXMLfastresources_{$(NAMESPACES)}.cxx
+OOXMLFASTRESOURCEHXXS=$(OOXMLHXXOUTDIR)$/OOXMLfastresources_{$(NAMESPACES)}.hxx
+
+OOXMLMODEL=model.xml
+OOXMLPREPROCESSXSL=modelpreprocess.xsl
+OOXMLRESOURCESTOOLSXSL=resourcestools.xsl
+OOXMLRESORUCETOKENSXSL=resourcestokens.xsl
+OOXMLFASTTOKENSXSL=fasttokens.xsl
+OOXMLFASTTOKENSIMPLXSL=fasttokensimpl.xsl
+OOXMLFASTRESOURCESXSL=fastresources.xsl
+OOXMLRESOURCESIMPLXSL=resourcesimpl.xsl
+OOXMLFASTRESOURCESIMPLXSL=fastresourcesimpl.xsl
+OOXMLNAMESPACEIDSXSL=namespaceids.xsl
+OOXMLVALUESXSL=values.xsl
+OOXMLVALUESIMPLXSL=valuesimpl.xsl
+OOXMLRESOURCEIDSXSL=resourceids.xsl
+OOXMLGPERFFASTTOKENXSL=gperffasttokenhandler.xsl
+
+OOXMLRESOURCEIDSHXX=$(OOXMLHXXOUTDIR)$/resourceids.hxx
+
+NSPROCESS=namespace_preprocess.pl
+
+TOKENXML=$(OOXMLCXXOUTDIR)$/token.xml
+TOKENXMLTMP=$(OOXMLCXXOUTDIR)$/token.tmp
+
+OOXMLFASTTOKENSHXX=$(OOXMLHXXOUTDIR)$/OOXMLFastTokens.hxx
+OOXMLFASTRESOURCESHXX=$(OOXMLHXXOUTDIR)$/OOXMLfastresources.hxx
+OOXMLNAMESPACEIDSHXX=$(OOXMLHXXOUTDIR)$/OOXMLnamespaceids.hxx
+OOXMLFASTRESOURCESCXX=$(OOXMLCXXOUTDIR)$/OOXMLfastresources.cxx
+OOXMLVALUESHXX=$(OOXMLCXXOUTDIR)$/OOXMLvalues.hxx
+OOXMLVALUESCXX=$(OOXMLCXXOUTDIR)$/OOXMLvalues.cxx
+GPERFFASTTOKENHXX=$(OOXMLHXXOUTDIR)$/gperffasttoken.hxx
+MODELPROCESSED=$(MISC)$/model_preprocessed.xml
+NSXSL=$(MISC)$/namespacesmap.xsl
+
+OOXMLGENHEADERS= \
+ $(OOXMLFASTRESOURCESHXX) \
+ $(OOXMLFASTTOKENSHXX) \
+ $(OOXMLVALUESHXX) \
+ $(OOXMLFASTRESOURCEHXXS) \
+ $(GPERFFASTTOKENHXX) \
+ $(OOXMLRESOURCEIDSHXX) \
+ $(OOXMLNAMESPACEIDSHXX)
+
+GENERATEDFILES= \
+ $(OOXMLGENHEADERS) \
+ $(MODELPROCESSED) \
+ $(OOXMLFASTRESOURCECXXS) \
+ $(OOXMLVALUESCXX) \
+ $(TOKENXMLTMP) \
+ $(TOKENXML)
+
+$(TOKENXMLTMP): $(SOLARVER)$/$(INPATH)$/inc$(UPDMINOREXT)$/oox$/token.txt
+ @$(TYPE) $(SOLARVER)$/$(INPATH)$/inc$(UPDMINOREXT)$/oox$/token.txt | $(SED) "s#\(.*\)#<fasttoken>\1</fasttoken>#" > $@
+
+$(TOKENXML): tokenxmlheader $(TOKENXMLTMP) tokenxmlfooter
+ @$(TYPE) tokenxmlheader $(TOKENXMLTMP) tokenxmlfooter > $@
+
+$(MISC)$/$(OOXMLPREPROCESSXSL): $(OOXMLPREPROCESSXSL)
+ @$(COPY) $(PWD)$/$(OOXMLPREPROCESSXSL) $(MISC)
+
+$(NSXSL) : $(OOXMLMODEL) $(SOLARVER)$/$(INPATH)$/inc$(UPDMINOREXT)$/oox$/namespaces.txt $(NSPROCESS)
+ @$(PERL) $(NSPROCESS) $(SOLARVER)$/$(INPATH)$/inc$(UPDMINOREXT)$/oox$/namespaces.txt > $@
+
+$(MODELPROCESSED): $(NSXSL) $(MISC)$/$(OOXMLPREPROCESSXSL) $(OOXMLMODEL)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(NSXSL) $(OOXMLMODEL) > $@
+
+$(OOXMLHXXOUTDIRCREATED):
+ @$(MKDIRHIER) $(OOXMLHXXOUTDIR)
+ @$(TOUCH) $@
+
+$(OOXMLGENHEADERS): $(OOXMLHXXOUTDIRCREATED)
+
+$(OOXMLFASTTOKENSHXX): $(OOXMLFASTTOKENSXSL) $(TOKENXML)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(OOXMLFASTTOKENSXSL) $(TOKENXML) > $@
+
+$(OOXMLFASTRESOURCESHXX): $(OOXMLFASTRESOURCESXSL) $(MODELPROCESSED)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(OOXMLFASTRESOURCESXSL) $(MODELPROCESSED) > $@
+
+$(OOXMLFASTRESOURCESCXX): $(OOXMLFASTRESOURCEHXXS) \
+ $(OOXMLFASTRESOURCESIMPLXSL) $(MODELPROCESSED)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(OOXMLFASTRESOURCESIMPLXSL) $(MODELPROCESSED) > $@
+
+$(OOXMLFASTRESOURCECXXS): $(MODELPROCESSED)
+
+$(OOXMLFASTRESOURCEHXXS): $(MODELPROCESSED)
+
+$(OOXMLCXXOUTDIR)$/OOXMLfastresources%.cxx: fastresourcesimpl%.xsl
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $< $(MODELPROCESSED) > $@
+
+$(OOXMLHXXOUTDIR)$/OOXMLfastresources%.hxx: fastresources%.xsl
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $< $(MODELPROCESSED) > $@
+
+$(OOXMLVALUESHXX): $(OOXMLVALUESXSL) $(MODELPROCESSED)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(OOXMLVALUESXSL) $(MODELPROCESSED) > $@
+
+$(OOXMLVALUESCXX): $(OOXMLVALUESIMPLXSL) $(MODELPROCESSED) \
+ $(OOXMLFASTRESOURCESHXX)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(OOXMLVALUESIMPLXSL) $(MODELPROCESSED) > $@
+
+$(OOXMLRESOURCEIDSHXX): $(OOXMLHXXOUTDIRCREATED) $(OOXMLRESOURCEIDSXSL) \
+ $(MODELPROCESSED)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(OOXMLRESOURCEIDSXSL) $(MODELPROCESSED) > $@
+
+$(OOXMLNAMESPACEIDSHXX): $(OOXMLHXXOUTDIRCREATED) $(OOXMLNAMESPACEIDSXSL) \
+ $(MODELPROCESSED)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(OOXMLNAMESPACEIDSXSL) $(MODELPROCESSED) > $@
+
+$(GPERFFASTTOKENHXX): $(OOXMLGPERFFASTTOKENXSL) $(MODELPROCESSED)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(OOXMLGPERFFASTTOKENXSL) $(MODELPROCESSED) | tr -d '\r' | gperf -I -t -E -S1 -c -G -LC++ > $@
+
+$(SLOFASTNAMESPACES): $(OOXMLFASTRESOURCESCXX) $(OOXMLGENHEADERS)
+
+$(GENERATEDFILES): $(OOXMLRESOURCESTOOLSXSL)
+
+$(SLOFILES): $(OOXMLGENHEADERS)
+
+$(SLO)/OOXMLfastresources.obj: $(OOXMLFASTRESOURCESCXX) $(OOXMLGENHEADERS)
+
+$(SLO)/OOXMLvalues.obj: $(OOXMLVALUESCXX) $(OOXMLVALUESHXX)
+
+$(SLOFASTNAMESPACES): OOXMLFastHelper.hxx
+
+.PHONY: genclean genmake genheaders
+
+genclean:
+ @rm -f $(GENERATEDFILES)
+
+genmake: $(GENERATEDFILES)
+
+genheaders: $(OOXMLFASTRESOURCEHXXS)
diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
new file mode 100644
index 000000000000..add4a80b551e
--- /dev/null
+++ b/writerfilter/source/ooxml/model.xml
@@ -0,0 +1,23181 @@
+<?xml version="1.0"?>
+<model xmlns:rng="http://relaxng.org/ns/structure/1.0">
+ <namespace-alias name="http://www.w3.org/XML/1998/namespace" alias="xml" id="XML"/>
+ <namespace-alias name="http://schemas.openxmlformats.org/officeDocument/2006/relationships" alias="relationships" id="RELATIONSHIPS"/>
+ <namespace-alias name="urn:schemas-microsoft-com:office:office" alias="office" id="OFFICE"/>
+ <namespace-alias name="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" alias="theme" id="THEME"/>
+ <namespace-alias name="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" alias="wordprocessingDrawing" id="DOC_DRAWINGML"/>
+ <namespace-alias name="http://schemas.openxmlformats.org/drawingml/2006/main" alias="drawingml" id="DRAWINGML"/>
+ <namespace-alias name="urn:schemas-microsoft-com:vml" alias="vml" id="VML"/>
+ <namespace-alias name="http://schemas.openxmlformats.org/drawingml/2006/picture" alias="picture" id="PICTURE"/>
+ <namespace-alias name="urn:schemas-microsoft-com:office:word" alias="vml_wordprocessingDrawing" id="VML_DOC"/>
+ <namespace-alias name="http://schemas.openxmlformats.org/wordprocessingml/2006/main" alias="wordprocessingml" id="DOC"/>
+ <namespace-alias name="http://schemas.openxmlformats.org/officeDocument/2006/math" alias="math" id="MATH"/>
+ <namespace-alias name="http://schemas.openxmlformats.org/schemaLibrary/2006/main" alias="schemaLibrary" id="SML"/>
+ <namespace-alias name="http://sprm" alias="sprm" id="SPRM"/>
+ <token tokenid="ooxml:shape"/>
+ <token tokenid="ooxml:token"/>
+ <token tokenid="ooxml:inputstream"/>
+ <token tokenid="ooxml:trackchange"/>
+ <token tokenid="ooxml:object"/>
+ <token tokenid="ooxml:tblStart"/>
+ <namespace name="dml-stylesheet" url="http://schemas.openxmlformats.org/drawingml/2006/main" file="dml-stylesheet.rng">
+ <start name="theme"/>
+ <start name="themeOverride"/>
+ <start name="themeManager"/>
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+<!-- ISO RELAX NG Schema -->
+ <include href="dml-baseStylesheet.rng"/>
+ <include href="dml-styleDefaults.rng"/>
+<!-- start = theme | themeOverride | themeManager -->
+ <define name="CT_EmptyElement">
+ <empty/>
+ </define>
+ <define name="CT_ColorMapping">
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ <attribute name="bg1">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Background 1</xs:documentation>
+ </attribute>
+ <attribute name="tx1">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Text 1</xs:documentation>
+ </attribute>
+ <attribute name="bg2">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Background 2</xs:documentation>
+ </attribute>
+ <attribute name="tx2">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Text 2</xs:documentation>
+ </attribute>
+ <attribute name="accent1">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Accent 1</xs:documentation>
+ </attribute>
+ <attribute name="accent2">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Accent 2</xs:documentation>
+ </attribute>
+ <attribute name="accent3">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Accent 3</xs:documentation>
+ </attribute>
+ <attribute name="accent4">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Accent 4</xs:documentation>
+ </attribute>
+ <attribute name="accent5">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Accent 5</xs:documentation>
+ </attribute>
+ <attribute name="accent6">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Accent 6</xs:documentation>
+ </attribute>
+ <attribute name="hlink">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Hyperlink</xs:documentation>
+ </attribute>
+ <attribute name="folHlink">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Followed Hyperlink</xs:documentation>
+ </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>
+ <optional>
+ <element name="clrMap">
+ <ref name="CT_ColorMapping"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_ColorSchemeList">
+ <zeroOrMore>
+ <element name="extraClrScheme">
+ <ref name="CT_ColorSchemeAndMapping"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_OfficeStyleSheet">
+ <group>
+ <element name="themeElements">
+ <ref name="CT_BaseStyles"/>
+ </element>
+ <optional>
+ <element name="objectDefaults">
+ <ref name="CT_ObjectStyleDefaults"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extraClrSchemeLst">
+ <ref name="CT_ColorSchemeList"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="custClrLst">
+ <ref name="CT_CustomColorList"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="name">
+ <data type="string">
+ <xs:documentation>Name</xs:documentation>
+ </data>
+ <xs:documentation>Name</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_BaseStylesOverride">
+ <optional>
+ <element name="clrScheme">
+ <ref name="CT_ColorScheme"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="fontScheme">
+ <ref name="CT_FontScheme"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="fmtScheme">
+ <ref name="CT_StyleMatrix"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_ClipboardStyleSheet">
+ <element name="themeElements">
+ <ref name="CT_BaseStyles"/>
+ </element>
+ <element name="clrMap">
+ <ref name="CT_ColorMapping"/>
+ </element>
+ </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>
+ </grammar>
+ <resource name="CT_OfficeStyleSheet" resource="Table" tokenid="ooxml:THEMETABLE"/>
+ <resource name="themeOverride" resource="Stream"/>
+ <resource name="themeManager" resource="Stream"/>
+ </namespace>
+ <namespace name="dml-styleDefaults" file="dml-styleDefaults">
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
+<!-- ISO RELAX NG Schema -->
+ <include href="dml-shapeProperties.rng"/>
+ <include href="dml-shapeStyle.rng"/>
+ <include href="dml-text.rng"/>
+ <define name="CT_DefaultShapeDefinition">
+ <element name="spPr">
+ <ref name="CT_ShapeProperties"/>
+ </element>
+ <element name="bodyPr">
+ <ref name="CT_TextBodyProperties"/>
+ </element>
+ <element name="lstStyle">
+ <ref name="CT_TextListStyle"/>
+ </element>
+ <optional>
+ <element name="style">
+ <ref name="CT_ShapeStyle"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_ObjectStyleDefaults">
+ <optional>
+ <element name="spDef">
+ <ref name="CT_DefaultShapeDefinition"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lnDef">
+ <ref name="CT_DefaultShapeDefinition"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="txDef">
+ <ref name="CT_DefaultShapeDefinition"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </define>
+ </grammar>
+ </namespace>
+ <namespace name="dml-shape3DLighting" file="dml-shape3DLighting.rng">
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
+<!-- ISO RELAX NG Schema -->
+ <include href="dml-baseTypes.rng"/>
+ <define name="ST_LightRigDirection">
+ <list>
+ <xs:documentation>Light Rig Direction</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_LightRigType">
+ <list>
+ <xs:documentation>Light Rig Type</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_LightRig">
+ <optional>
+ <element name="rot">
+ <ref name="CT_SphereCoords"/>
+ </element>
+ </optional>
+ <attribute name="rig">
+ <ref name="ST_LightRigType"/>
+ <xs:documentation>Rig Preset</xs:documentation>
+ </attribute>
+ <attribute name="dir">
+ <ref name="ST_LightRigDirection"/>
+ <xs:documentation>Direction</xs:documentation>
+ </attribute>
+ </define>
+ </grammar>
+ <resource name="ST_LightRigDirection" resource="List" generated="yes">
+ <value name="tl" tokenid="ooxml:Value_drawingml_ST_LightRigDirection_tl">tl</value>
+ <value name="t" tokenid="ooxml:Value_drawingml_ST_LightRigDirection_t">t</value>
+ <value name="tr" tokenid="ooxml:Value_drawingml_ST_LightRigDirection_tr">tr</value>
+ <value name="l" tokenid="ooxml:Value_drawingml_ST_LightRigDirection_l">l</value>
+ <value name="r" tokenid="ooxml:Value_drawingml_ST_LightRigDirection_r">r</value>
+ <value name="bl" tokenid="ooxml:Value_drawingml_ST_LightRigDirection_bl">bl</value>
+ <value name="b" tokenid="ooxml:Value_drawingml_ST_LightRigDirection_b">b</value>
+ <value name="br" tokenid="ooxml:Value_drawingml_ST_LightRigDirection_br">br</value>
+ </resource>
+ <resource name="ST_LightRigType" resource="List" generated="yes">
+ <value name="legacyFlat1" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyFlat1">legacyFlat1</value>
+ <value name="legacyFlat2" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyFlat2">legacyFlat2</value>
+ <value name="legacyFlat3" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyFlat3">legacyFlat3</value>
+ <value name="legacyFlat4" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyFlat4">legacyFlat4</value>
+ <value name="legacyNormal1" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyNormal1">legacyNormal1</value>
+ <value name="legacyNormal2" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyNormal2">legacyNormal2</value>
+ <value name="legacyNormal3" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyNormal3">legacyNormal3</value>
+ <value name="legacyNormal4" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyNormal4">legacyNormal4</value>
+ <value name="legacyHarsh1" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyHarsh1">legacyHarsh1</value>
+ <value name="legacyHarsh2" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyHarsh2">legacyHarsh2</value>
+ <value name="legacyHarsh3" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyHarsh3">legacyHarsh3</value>
+ <value name="legacyHarsh4" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyHarsh4">legacyHarsh4</value>
+ <value name="threePt" tokenid="ooxml:Value_drawingml_ST_LightRigType_threePt">threePt</value>
+ <value name="balanced" tokenid="ooxml:Value_drawingml_ST_LightRigType_balanced">balanced</value>
+ <value name="soft" tokenid="ooxml:Value_drawingml_ST_LightRigType_soft">soft</value>
+ <value name="harsh" tokenid="ooxml:Value_drawingml_ST_LightRigType_harsh">harsh</value>
+ <value name="flood" tokenid="ooxml:Value_drawingml_ST_LightRigType_flood">flood</value>
+ <value name="contrasting" tokenid="ooxml:Value_drawingml_ST_LightRigType_contrasting">contrasting</value>
+ <value name="morning" tokenid="ooxml:Value_drawingml_ST_LightRigType_morning">morning</value>
+ <value name="sunrise" tokenid="ooxml:Value_drawingml_ST_LightRigType_sunrise">sunrise</value>
+ <value name="sunset" tokenid="ooxml:Value_drawingml_ST_LightRigType_sunset">sunset</value>
+ <value name="chilly" tokenid="ooxml:Value_drawingml_ST_LightRigType_chilly">chilly</value>
+ <value name="freezing" tokenid="ooxml:Value_drawingml_ST_LightRigType_freezing">freezing</value>
+ <value name="flat" tokenid="ooxml:Value_drawingml_ST_LightRigType_flat">flat</value>
+ <value name="twoPt" tokenid="ooxml:Value_drawingml_ST_LightRigType_twoPt">twoPt</value>
+ <value name="glow" tokenid="ooxml:Value_drawingml_ST_LightRigType_glow">glow</value>
+ <value name="brightRoom" tokenid="ooxml:Value_drawingml_ST_LightRigType_brightRoom">brightRoom</value>
+ </resource>
+ </namespace>
+ <namespace name="dml-shape3DScene" file="dml-shape3DScene.rng">
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
+<!-- ISO RELAX NG Schema -->
+ <include href="dml-shape3DCamera.rng"/>
+ <include href="dml-shape3DLighting.rng"/>
+ <include href="dml-shape3DScenePlane.rng"/>
+ <define name="CT_Scene3D">
+ <element name="camera">
+ <ref name="CT_Camera"/>
+ </element>
+ <element name="lightRig">
+ <ref name="CT_LightRig"/>
+ </element>
+ <optional>
+ <element name="backdrop">
+ <ref name="CT_Backdrop"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </define>
+ </grammar>
+ </namespace>
+ <namespace name="dml-shape3DStyles" file="dml-shape3DStyles.rng">
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
+<!-- ISO RELAX NG Schema -->
+ <include href="dml-shapeGeometry.rng"/>
+ <define name="ST_BevelPresetType">
+ <list>
+ <xs:documentation>Bevel Presets</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_Bevel">
+ <optional>
+ <attribute name="w">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="h">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Height</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="prst">
+ <ref name="ST_BevelPresetType"/>
+ <xs:documentation>Preset Bevel</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_PresetMaterialType">
+ <list>
+ <xs:documentation>Preset Material Type</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_Shape3D">
+ <group>
+ <optional>
+ <element name="bevelT">
+ <ref name="CT_Bevel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bevelB">
+ <ref name="CT_Bevel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extrusionClr">
+ <ref name="CT_Color"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="contourClr">
+ <ref name="CT_Color"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="z">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Shape Depth</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="extrusionH">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Extrusion Height</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="contourW">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Contour Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="prstMaterial">
+ <ref name="ST_PresetMaterialType"/>
+ <xs:documentation>Preset Material Type</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_FlatText">
+ <optional>
+ <attribute name="z">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Z Coordinate</xs:documentation>
+ </attribute>
+ </optional>
+ </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" generated="yes">
+ <value name="relaxedInset" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_relaxedInset">relaxedInset</value>
+ <value name="circle" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_circle">circle</value>
+ <value name="slope" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_slope">slope</value>
+ <value name="cross" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_cross">cross</value>
+ <value name="angle" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_angle">angle</value>
+ <value name="softRound" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_softRound">softRound</value>
+ <value name="convex" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_convex">convex</value>
+ <value name="coolSlant" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_coolSlant">coolSlant</value>
+ <value name="divot" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_divot">divot</value>
+ <value name="riblet" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_riblet">riblet</value>
+ <value name="hardEdge" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_hardEdge">hardEdge</value>
+ <value name="artDeco" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_artDeco">artDeco</value>
+ </resource>
+ <resource name="ST_PresetMaterialType" resource="List" generated="yes">
+ <value name="legacyMatte" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_legacyMatte">legacyMatte</value>
+ <value name="legacyPlastic" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_legacyPlastic">legacyPlastic</value>
+ <value name="legacyMetal" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_legacyMetal">legacyMetal</value>
+ <value name="legacyWireframe" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_legacyWireframe">legacyWireframe</value>
+ <value name="matte" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_matte">matte</value>
+ <value name="plastic" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_plastic">plastic</value>
+ <value name="metal" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_metal">metal</value>
+ <value name="warmMatte" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_warmMatte">warmMatte</value>
+ <value name="translucentPowder" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_translucentPowder">translucentPowder</value>
+ <value name="powder" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_powder">powder</value>
+ <value name="dkEdge" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_dkEdge">dkEdge</value>
+ <value name="softEdge" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_softEdge">softEdge</value>
+ <value name="clear" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_clear">clear</value>
+ <value name="flat" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_flat">flat</value>
+ <value name="softmetal" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_softmetal">softmetal</value>
+ </resource>
+ </namespace>
+ <namespace name="dml-shape3DCamera" file="dml-shape3DCamera.rng">
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
+<!-- ISO RELAX NG Schema -->
+ <include href="dml-baseTypes.rng"/>
+ <define name="ST_PresetCameraType">
+ <list>
+ <xs:documentation>Preset Camera Type</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_FOVAngle">
+ <empty/>
+ </define>
+ <define name="CT_Camera">
+ <optional>
+ <element name="rot">
+ <ref name="CT_SphereCoords"/>
+ </element>
+ </optional>
+ <attribute name="prst">
+ <ref name="ST_PresetCameraType"/>
+ <xs:documentation>Preset Camera Type</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="fov">
+ <ref name="ST_FOVAngle"/>
+ <xs:documentation>Field of View</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="zoom">
+ <ref name="ST_PositivePercentage"/>
+ <xs:documentation>Zoom</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ </grammar>
+ <resource name="ST_PresetCameraType" resource="List" generated="yes">
+ <value name="legacyObliqueTopLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueTopLeft">legacyObliqueTopLeft</value>
+ <value name="legacyObliqueTop" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueTop">legacyObliqueTop</value>
+ <value name="legacyObliqueTopRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueTopRight">legacyObliqueTopRight</value>
+ <value name="legacyObliqueLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueLeft">legacyObliqueLeft</value>
+ <value name="legacyObliqueFront" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueFront">legacyObliqueFront</value>
+ <value name="legacyObliqueRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueRight">legacyObliqueRight</value>
+ <value name="legacyObliqueBottomLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueBottomLeft">legacyObliqueBottomLeft</value>
+ <value name="legacyObliqueBottom" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueBottom">legacyObliqueBottom</value>
+ <value name="legacyObliqueBottomRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueBottomRight">legacyObliqueBottomRight</value>
+ <value name="legacyPerspectiveTopLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveTopLeft">legacyPerspectiveTopLeft</value>
+ <value name="legacyPerspectiveTop" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveTop">legacyPerspectiveTop</value>
+ <value name="legacyPerspectiveTopRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveTopRight">legacyPerspectiveTopRight</value>
+ <value name="legacyPerspectiveLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveLeft">legacyPerspectiveLeft</value>
+ <value name="legacyPerspectiveFront" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveFront">legacyPerspectiveFront</value>
+ <value name="legacyPerspectiveRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveRight">legacyPerspectiveRight</value>
+ <value name="legacyPerspectiveBottomLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveBottomLeft">legacyPerspectiveBottomLeft</value>
+ <value name="legacyPerspectiveBottom" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveBottom">legacyPerspectiveBottom</value>
+ <value name="legacyPerspectiveBottomRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveBottomRight">legacyPerspectiveBottomRight</value>
+ <value name="orthographicFront" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_orthographicFront">orthographicFront</value>
+ <value name="isometricTopUp" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricTopUp">isometricTopUp</value>
+ <value name="isometricTopDown" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricTopDown">isometricTopDown</value>
+ <value name="isometricBottomUp" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricBottomUp">isometricBottomUp</value>
+ <value name="isometricBottomDown" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricBottomDown">isometricBottomDown</value>
+ <value name="isometricLeftUp" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricLeftUp">isometricLeftUp</value>
+ <value name="isometricLeftDown" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricLeftDown">isometricLeftDown</value>
+ <value name="isometricRightUp" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricRightUp">isometricRightUp</value>
+ <value name="isometricRightDown" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricRightDown">isometricRightDown</value>
+ <value name="isometricOffAxis1Left" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis1Left">isometricOffAxis1Left</value>
+ <value name="isometricOffAxis1Right" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis1Right">isometricOffAxis1Right</value>
+ <value name="isometricOffAxis1Top" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis1Top">isometricOffAxis1Top</value>
+ <value name="isometricOffAxis2Left" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis2Left">isometricOffAxis2Left</value>
+ <value name="isometricOffAxis2Right" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis2Right">isometricOffAxis2Right</value>
+ <value name="isometricOffAxis2Top" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis2Top">isometricOffAxis2Top</value>
+ <value name="isometricOffAxis3Left" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis3Left">isometricOffAxis3Left</value>
+ <value name="isometricOffAxis3Right" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis3Right">isometricOffAxis3Right</value>
+ <value name="isometricOffAxis3Bottom" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis3Bottom">isometricOffAxis3Bottom</value>
+ <value name="isometricOffAxis4Left" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis4Left">isometricOffAxis4Left</value>
+ <value name="isometricOffAxis4Right" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis4Right">isometricOffAxis4Right</value>
+ <value name="isometricOffAxis4Bottom" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis4Bottom">isometricOffAxis4Bottom</value>
+ <value name="obliqueTopLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueTopLeft">obliqueTopLeft</value>
+ <value name="obliqueTop" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueTop">obliqueTop</value>
+ <value name="obliqueTopRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueTopRight">obliqueTopRight</value>
+ <value name="obliqueLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueLeft">obliqueLeft</value>
+ <value name="obliqueRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueRight">obliqueRight</value>
+ <value name="obliqueBottomLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueBottomLeft">obliqueBottomLeft</value>
+ <value name="obliqueBottom" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueBottom">obliqueBottom</value>
+ <value name="obliqueBottomRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueBottomRight">obliqueBottomRight</value>
+ <value name="perspectiveFront" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveFront">perspectiveFront</value>
+ <value name="perspectiveLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveLeft">perspectiveLeft</value>
+ <value name="perspectiveRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveRight">perspectiveRight</value>
+ <value name="perspectiveAbove" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveAbove">perspectiveAbove</value>
+ <value name="perspectiveBelow" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveBelow">perspectiveBelow</value>
+ <value name="perspectiveAboveLeftFacing" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveAboveLeftFacing">perspectiveAboveLeftFacing</value>
+ <value name="perspectiveAboveRightFacing" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveAboveRightFacing">perspectiveAboveRightFacing</value>
+ <value name="perspectiveContrastingLeftFacing" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveContrastingLeftFacing">perspectiveContrastingLeftFacing</value>
+ <value name="perspectiveContrastingRightFacing" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveContrastingRightFacing">perspectiveContrastingRightFacing</value>
+ <value name="perspectiveHeroicLeftFacing" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveHeroicLeftFacing">perspectiveHeroicLeftFacing</value>
+ <value name="perspectiveHeroicRightFacing" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveHeroicRightFacing">perspectiveHeroicRightFacing</value>
+ <value name="perspectiveHeroicExtremeLeftFacing" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveHeroicExtremeLeftFacing">perspectiveHeroicExtremeLeftFacing</value>
+ <value name="perspectiveHeroicExtremeRightFacing" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveHeroicExtremeRightFacing">perspectiveHeroicExtremeRightFacing</value>
+ <value name="perspectiveRelaxed" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveRelaxed">perspectiveRelaxed</value>
+ <value name="perspectiveRelaxedModerately" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveRelaxedModerately">perspectiveRelaxedModerately</value>
+ </resource>
+ </namespace>
+ <namespace name="dml-baseStylesheet" file="dml-baseStylesheet.rng">
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+<!-- ISO RELAX NG Schema -->
+ <define name="ST_StyleMatrixColumnIndex">
+ <data type="unsignedInt">
+ <xs:documentation>Style Matrix Column Index</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_FontCollectionIndex">
+ <list>
+ <xs:documentation>Font Collection Index</xs:documentation>
+ <choice>
+<!-- Major Font -->
+ <value>major</value>
+<!-- Minor Font -->
+ <value>minor</value>
+<!-- None -->
+ <value>none</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ColorSchemeIndex">
+ <list>
+ <xs:documentation>Theme Color Reference</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_ColorScheme">
+ <group>
+ <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>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <attribute name="name">
+ <data type="string">
+ <xs:documentation>Name</xs:documentation>
+ </data>
+ <xs:documentation>Name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_CustomColor">
+ <ref name="EG_ColorChoice"/>
+ <optional>
+ <attribute name="name">
+ <data type="string">
+ <xs:documentation>Name</xs:documentation>
+ </data>
+ <xs:documentation>Name</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_SupplementalFont">
+ <attribute name="script">
+ <data type="string">
+ <xs:documentation>Script</xs:documentation>
+ </data>
+ <xs:documentation>Script</xs:documentation>
+ </attribute>
+ <attribute name="typeface">
+ <ref name="ST_TextTypeface"/>
+ <xs:documentation>Typeface</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_CustomColorList">
+ <zeroOrMore>
+ <element name="custClr">
+ <ref name="CT_CustomColor"/>
+ </element>
+ </zeroOrMore>
+ </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>
+ <zeroOrMore>
+ <element name="font">
+ <ref name="CT_SupplementalFont"/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_EffectStyleItem">
+ <ref name="EG_EffectProperties"/>
+ <optional>
+ <element name="scene3d">
+ <ref name="CT_Scene3D"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sp3d">
+ <ref name="CT_Shape3D"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_FontScheme">
+ <group>
+ <element name="majorFont">
+ <ref name="CT_FontCollection"/>
+ </element>
+ <element name="minorFont">
+ <ref name="CT_FontCollection"/>
+ </element>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <attribute name="name">
+ <data type="string">
+ <xs:documentation>Name</xs:documentation>
+ </data>
+ <xs:documentation>Name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FillStyleList">
+ <oneOrMore>
+ <ref name="EG_FillProperties"/>
+ </oneOrMore>
+ </define>
+ <define name="CT_LineStyleList">
+ <oneOrMore>
+ <element name="ln">
+ <ref name="CT_LineProperties"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_EffectStyleList">
+ <oneOrMore>
+ <element name="effectStyle">
+ <ref name="CT_EffectStyleItem"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_BackgroundFillStyleList">
+ <oneOrMore>
+ <ref name="EG_FillProperties"/>
+ </oneOrMore>
+ </define>
+ <define name="CT_StyleMatrix">
+ <group>
+ <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>
+ </group>
+ <optional>
+ <attribute name="name">
+ <data type="string">
+ <xs:documentation>Name</xs:documentation>
+ </data>
+ <xs:documentation>Name</xs:documentation>
+ </attribute>
+ </optional>
+ </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>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </define>
+ </grammar>
+ <resource name="ST_StyleMatrixColumnIndex" resource="Integer" generated="yes"/>
+ <resource name="ST_FontCollectionIndex" resource="List" generated="yes">
+ <value name="major" tokenid="ooxml:Value_drawingml_ST_FontCollectionIndex_major">major</value>
+ <value name="minor" tokenid="ooxml:Value_drawingml_ST_FontCollectionIndex_minor">minor</value>
+ <value name="none" tokenid="ooxml:Value_drawingml_ST_FontCollectionIndex_none">none</value>
+ </resource>
+ <resource name="ST_ColorSchemeIndex" resource="List" generated="yes">
+ <value name="dk1" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_dk1">dk1</value>
+ <value name="lt1" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_lt1">lt1</value>
+ <value name="dk2" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_dk2">dk2</value>
+ <value name="lt2" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_lt2">lt2</value>
+ <value name="accent1" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent1">accent1</value>
+ <value name="accent2" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent2">accent2</value>
+ <value name="accent3" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent3">accent3</value>
+ <value name="accent4" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent4">accent4</value>
+ <value name="accent5" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent5">accent5</value>
+ <value name="accent6" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent6">accent6</value>
+ <value name="hlink" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_hlink">hlink</value>
+ <value name="folHlink" 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" file="dml-textCharacter.rng">
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+<!-- ISO RELAX NG Schema -->
+ <include href="dml-baseTypes.rng"/>
+ <include href="dml-shapeEffects.rng"/>
+ <include href="dml-shapeLineProperties.rng"/>
+ <define name="ST_TextPoint">
+ <data type="int">
+ <xs:documentation>Text Point</xs:documentation>
+ <param name="minInclusive">-400000</param>
+ <param name="maxInclusive">400000</param>
+ </data>
+ </define>
+ <define name="ST_TextNonNegativePoint">
+ <data type="int">
+ <xs:documentation>Text Non-Negative Point</xs:documentation>
+ <param name="minInclusive">0</param>
+ <param name="maxInclusive">400000</param>
+ </data>
+ </define>
+ <define name="ST_TextFontSize">
+ <data type="int">
+ <xs:documentation>Text Font Size</xs:documentation>
+ <param name="minInclusive">100</param>
+ <param name="maxInclusive">400000</param>
+ </data>
+ </define>
+ <define name="ST_Panose">
+ <data type="hexBinary">
+ <xs:documentation>Panose Type</xs:documentation>
+ <param name="length">10</param>
+ </data>
+ </define>
+ <define name="ST_TextTypeface">
+ <data type="string">
+ <xs:documentation>Text Typeface</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_TextFont">
+ <attribute name="typeface">
+ <ref name="ST_TextTypeface"/>
+ <xs:documentation>Text Typeface</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="panose">
+ <ref name="ST_Panose"/>
+ <xs:documentation>Panose Setting</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="pitchFamily">
+ <data type="byte">
+ <xs:documentation>Similar Font Family</xs:documentation>
+ </data>
+ <xs:documentation>Similar Font Family</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="charset">
+ <data type="byte">
+ <xs:documentation>Similar Character Set</xs:documentation>
+ </data>
+ <xs:documentation>Similar Character Set</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_TextLanguageID">
+ <data type="string">
+ <xs:documentation>Language ID</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_TextUnderlineType">
+ <list>
+ <xs:documentation>Text Underline Types</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_TextUnderlineLineFollowText">
+ <empty/>
+ </define>
+ <define name="CT_TextUnderlineFillFollowText">
+ <empty/>
+ </define>
+ <define name="CT_TextUnderlineFillGroupWrapper">
+ <ref name="EG_FillProperties"/>
+ </define>
+ <define name="EG_TextUnderlineLine">
+ <choice>
+ <element name="uLnTx">
+ <ref name="CT_TextUnderlineLineFollowText"/>
+ </element>
+ <optional>
+ <element name="uLn">
+ <ref name="CT_LineProperties"/>
+ </element>
+ </optional>
+ </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">
+ <list>
+ <xs:documentation>Text Strike Type</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_TextCapsType">
+ <list>
+ <xs:documentation>Text Cap Types</xs:documentation>
+ <choice>
+<!-- Text Caps Enum ( None ) -->
+ <value>none</value>
+<!-- Text Caps Enum ( Small ) -->
+ <value>small</value>
+<!-- Text Caps Enum ( All ) -->
+ <value>all</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_TextCharacterProperties">
+ <group>
+ <optional>
+ <element name="ln">
+ <ref name="CT_LineProperties"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_FillProperties"/>
+ </optional>
+ <optional>
+ <ref name="EG_EffectProperties"/>
+ </optional>
+ <optional>
+ <element name="highlight">
+ <ref name="CT_Color"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_TextUnderlineLine"/>
+ </optional>
+ <optional>
+ <ref name="EG_TextUnderlineFill"/>
+ </optional>
+ <optional>
+ <element name="latin">
+ <ref name="CT_TextFont"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ea">
+ <ref name="CT_TextFont"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cs">
+ <ref name="CT_TextFont"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sym">
+ <ref name="CT_TextFont"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hlinkClick">
+ <ref name="CT_Hyperlink"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hlinkMouseOver">
+ <ref name="CT_Hyperlink"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="kumimoji">
+ <data type="boolean">
+ <xs:documentation>Kumimoji</xs:documentation>
+ </data>
+ <xs:documentation>Kumimoji</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lang">
+ <ref name="ST_TextLanguageID"/>
+ <xs:documentation>Language ID</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="altLang">
+ <ref name="ST_TextLanguageID"/>
+ <xs:documentation>Alternative Language</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sz">
+ <ref name="ST_TextFontSize"/>
+ <xs:documentation>Font Size</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="b">
+ <data type="boolean">
+ <xs:documentation>Bold</xs:documentation>
+ </data>
+ <xs:documentation>Bold</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="i">
+ <data type="boolean">
+ <xs:documentation>Italics</xs:documentation>
+ </data>
+ <xs:documentation>Italics</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="u">
+ <ref name="ST_TextUnderlineType"/>
+ <xs:documentation>Underline</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="strike">
+ <ref name="ST_TextStrikeType"/>
+ <xs:documentation>Strikethrough</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="kern">
+ <ref name="ST_TextNonNegativePoint"/>
+ <xs:documentation>Kerning</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="cap">
+ <ref name="ST_TextCapsType"/>
+ <xs:documentation>Capitalization</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="spc">
+ <ref name="ST_TextPoint"/>
+ <xs:documentation>Spacing</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="normalizeH">
+ <data type="boolean">
+ <xs:documentation>Normalize Heights</xs:documentation>
+ </data>
+ <xs:documentation>Normalize Heights</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="baseline">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Baseline</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noProof">
+ <data type="boolean">
+ <xs:documentation>No Proofing</xs:documentation>
+ </data>
+ <xs:documentation>No Proofing</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dirty">
+ <data type="boolean">
+ <xs:documentation>Dirty</xs:documentation>
+ </data>
+ <xs:documentation>Dirty</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="err">
+ <data type="boolean">
+ <xs:documentation>Spelling Error</xs:documentation>
+ </data>
+ <xs:documentation>Spelling Error</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="smtClean">
+ <data type="boolean">
+ <xs:documentation>SmartTag Clean</xs:documentation>
+ </data>
+ <xs:documentation>SmartTag Clean</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="smtId">
+ <data type="unsignedInt">
+ <xs:documentation>SmartTag ID</xs:documentation>
+ </data>
+ <xs:documentation>SmartTag ID</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="bmk">
+ <data type="string">
+ <xs:documentation>Bookmark Link Target</xs:documentation>
+ </data>
+ <xs:documentation>Bookmark Link Target</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ </grammar>
+ <resource name="ST_TextPoint" resource="Integer" generated="yes"/>
+ <resource name="ST_TextNonNegativePoint" resource="Integer" generated="yes"/>
+ <resource name="ST_TextFontSize" resource="Integer" generated="yes"/>
+ <resource name="ST_Panose" resource="Hex" generated="yes"/>
+ <resource name="ST_TextTypeface" resource="String" generated="yes"/>
+ <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" generated="yes"/>
+ <resource name="ST_TextUnderlineType" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_none">none</value>
+ <value name="words" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_words">words</value>
+ <value name="sng" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_sng">sng</value>
+ <value name="dbl" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dbl">dbl</value>
+ <value name="heavy" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_heavy">heavy</value>
+ <value name="dotted" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotted">dotted</value>
+ <value name="dottedHeavy" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dottedHeavy">dottedHeavy</value>
+ <value name="dash" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dash">dash</value>
+ <value name="dashHeavy" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dashHeavy">dashHeavy</value>
+ <value name="dashLong" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dashLong">dashLong</value>
+ <value name="dashLongHeavy" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dashLongHeavy">dashLongHeavy</value>
+ <value name="dotDash" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotDash">dotDash</value>
+ <value name="dotDashHeavy" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotDashHeavy">dotDashHeavy</value>
+ <value name="dotDotDash" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotDotDash">dotDotDash</value>
+ <value name="dotDotDashHeavy" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotDotDashHeavy">dotDotDashHeavy</value>
+ <value name="wavy" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_wavy">wavy</value>
+ <value name="wavyHeavy" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_wavyHeavy">wavyHeavy</value>
+ <value name="wavyDbl" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_wavyDbl">wavyDbl</value>
+ </resource>
+ <resource name="ST_TextStrikeType" resource="List" generated="yes">
+ <value name="noStrike" tokenid="ooxml:Value_drawingml_ST_TextStrikeType_noStrike">noStrike</value>
+ <value name="sngStrike" tokenid="ooxml:Value_drawingml_ST_TextStrikeType_sngStrike">sngStrike</value>
+ <value name="dblStrike" tokenid="ooxml:Value_drawingml_ST_TextStrikeType_dblStrike">dblStrike</value>
+ </resource>
+ <resource name="ST_TextCapsType" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_drawingml_ST_TextCapsType_none">none</value>
+ <value name="small" tokenid="ooxml:Value_drawingml_ST_TextCapsType_small">small</value>
+ <value name="all" tokenid="ooxml:Value_drawingml_ST_TextCapsType_all">all</value>
+ </resource>
+ </namespace>
+ <namespace name="dml-shapeEffects" file="dml-shapeEffects.rng">
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+<!-- ISO RELAX NG Schema -->
+ <include href="dml-baseTypes.rng"/>
+<!-- start = blip -->
+ <define name="CT_AlphaBiLevelEffect">
+ <attribute name="thresh">
+ <ref name="ST_PositiveFixedPercentage"/>
+ <xs:documentation>Threshold</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_AlphaCeilingEffect">
+ <empty/>
+ </define>
+ <define name="CT_AlphaFloorEffect">
+ <empty/>
+ </define>
+ <define name="CT_AlphaInverseEffect">
+ <optional>
+ <ref name="EG_ColorChoice"/>
+ </optional>
+ </define>
+ <define name="CT_AlphaModulateFixedEffect">
+ <optional>
+ <attribute name="amt">
+ <ref name="ST_PositivePercentage"/>
+ <xs:documentation>Amount</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_AlphaOutsetEffect">
+ <optional>
+ <attribute name="rad">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Radius</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_AlphaReplaceEffect">
+ <attribute name="a">
+ <ref name="ST_PositiveFixedPercentage"/>
+ <xs:documentation>Alpha</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_BiLevelEffect">
+ <attribute name="thresh">
+ <ref name="ST_PositiveFixedPercentage"/>
+ <xs:documentation>Threshold</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_BlurEffect">
+ <optional>
+ <attribute name="rad">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Radius</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="grow">
+ <data type="boolean">
+ <xs:documentation>Grow Bounds</xs:documentation>
+ </data>
+ <xs:documentation>Grow Bounds</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_ColorChangeEffect">
+ <group>
+ <element name="clrFrom">
+ <ref name="CT_Color"/>
+ </element>
+ <element name="clrTo">
+ <ref name="CT_Color"/>
+ </element>
+ </group>
+ <optional>
+ <attribute name="useA">
+ <data type="boolean">
+ <xs:documentation>Consider Alpha Values</xs:documentation>
+ </data>
+ <xs:documentation>Consider Alpha Values</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_ColorReplaceEffect">
+ <ref name="EG_ColorChoice"/>
+ </define>
+ <define name="CT_DuotoneEffect">
+ <oneOrMore>
+ <ref name="EG_ColorChoice"/>
+ </oneOrMore>
+ </define>
+ <define name="CT_GlowEffect">
+ <ref name="EG_ColorChoice"/>
+ <optional>
+ <attribute name="rad">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Radius</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_GrayscaleEffect">
+ <empty/>
+ </define>
+ <define name="CT_HSLEffect">
+ <optional>
+ <attribute name="hue">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Hue</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sat">
+ <ref name="ST_FixedPercentage"/>
+ <xs:documentation>Saturation</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lum">
+ <ref name="ST_FixedPercentage"/>
+ <xs:documentation>Luminance</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_InnerShadowEffect">
+ <ref name="EG_ColorChoice"/>
+ <optional>
+ <attribute name="blurRad">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Blur Radius</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dist">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Distance</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dir">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Direction</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_LuminanceEffect">
+ <optional>
+ <attribute name="bright">
+ <ref name="ST_FixedPercentage"/>
+ <xs:documentation>Brightness</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="contrast">
+ <ref name="ST_FixedPercentage"/>
+ <xs:documentation>Contrast</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_OuterShadowEffect">
+ <ref name="EG_ColorChoice"/>
+ <optional>
+ <attribute name="blurRad">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Blur Radius</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dist">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Shadow Offset Distance</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dir">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Shadow Direction</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sx">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Horizontal Scaling Factor</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sy">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Vertical Scaling Factor</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="kx">
+ <ref name="ST_FixedAngle"/>
+ <xs:documentation>Horizontal Skew</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ky">
+ <ref name="ST_FixedAngle"/>
+ <xs:documentation>Vertical Skew</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="algn">
+ <ref name="ST_RectAlignment"/>
+ <xs:documentation>Shadow Alignment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rotWithShape">
+ <data type="boolean">
+ <xs:documentation>Rotate With Shape</xs:documentation>
+ </data>
+ <xs:documentation>Rotate With Shape</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_PresetShadowVal">
+ <list>
+ <xs:documentation>Preset Shadow Type</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_PresetShadowEffect">
+ <ref name="EG_ColorChoice"/>
+ <attribute name="prst">
+ <ref name="ST_PresetShadowVal"/>
+ <xs:documentation>Preset Shadow</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="dist">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Distance</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dir">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Direction</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_ReflectionEffect">
+ <optional>
+ <attribute name="blurRad">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Blur Radius</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="stA">
+ <ref name="ST_PositiveFixedPercentage"/>
+ <xs:documentation>Start Opacity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="stPos">
+ <ref name="ST_PositiveFixedPercentage"/>
+ <xs:documentation>Start Position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endA">
+ <ref name="ST_PositiveFixedPercentage"/>
+ <xs:documentation>End Alpha</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endPos">
+ <ref name="ST_PositiveFixedPercentage"/>
+ <xs:documentation>End Position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dist">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Distance</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dir">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Direction</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fadeDir">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Fade Direction</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sx">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Horizontal Ratio</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sy">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Vertical Ratio</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="kx">
+ <ref name="ST_FixedAngle"/>
+ <xs:documentation>Horizontal Skew</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ky">
+ <ref name="ST_FixedAngle"/>
+ <xs:documentation>Vertical Skew</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="algn">
+ <ref name="ST_RectAlignment"/>
+ <xs:documentation>Shadow Alignment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rotWithShape">
+ <data type="boolean">
+ <xs:documentation>Rotate With Shape</xs:documentation>
+ </data>
+ <xs:documentation>Rotate With Shape</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_RelativeOffsetEffect">
+ <optional>
+ <attribute name="tx">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Offset X</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ty">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Offset Y</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_SoftEdgesEffect">
+ <attribute name="rad">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Radius</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TintEffect">
+ <optional>
+ <attribute name="hue">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Hue</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="amt">
+ <ref name="ST_FixedPercentage"/>
+ <xs:documentation>Amount</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_TransformEffect">
+ <optional>
+ <attribute name="sx">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Horizontal Ratio</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sy">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Vertical Ratio</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="kx">
+ <ref name="ST_FixedAngle"/>
+ <xs:documentation>Horizontal Skew</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ky">
+ <ref name="ST_FixedAngle"/>
+ <xs:documentation>Vertical Skew</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="tx">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Horizontal Shift</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ty">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Vertical Shift</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_NoFillProperties">
+ <empty/>
+ </define>
+ <define name="CT_SolidColorFillProperties">
+ <optional>
+ <ref name="EG_ColorChoice"/>
+ </optional>
+ </define>
+ <define name="CT_LinearShadeProperties">
+ <optional>
+ <attribute name="ang">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Angle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="scaled">
+ <data type="boolean">
+ <xs:documentation>Scaled</xs:documentation>
+ </data>
+ <xs:documentation>Scaled</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_PathShadeType">
+ <list>
+ <xs:documentation>Path Shade Type</xs:documentation>
+ <choice>
+<!-- Shape -->
+ <value>shape</value>
+<!-- Circle -->
+ <value>circle</value>
+<!-- Rectangle -->
+ <value>rect</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_PathShadeProperties">
+ <optional>
+ <element name="fillToRect">
+ <ref name="CT_RelativeRect"/>
+ </element>
+ </optional>
+ <optional>
+ <attribute name="path">
+ <ref name="ST_PathShadeType"/>
+ <xs:documentation>Gradient Fill Path</xs:documentation>
+ </attribute>
+ </optional>
+ </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">
+ <list>
+ <xs:documentation>Tile Flip Mode</xs:documentation>
+ <choice>
+<!-- None -->
+ <value>none</value>
+<!-- Horizontal -->
+ <value>x</value>
+<!-- Vertical -->
+ <value>y</value>
+<!-- Horizontal and Vertical -->
+ <value>xy</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_GradientStop">
+ <ref name="EG_ColorChoice"/>
+ <attribute name="pos">
+ <ref name="ST_PositiveFixedPercentage"/>
+ <xs:documentation>Position</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_GradientStopList">
+ <oneOrMore>
+ <element name="gs">
+ <ref name="CT_GradientStop"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_GradientFillProperties">
+ <group>
+ <optional>
+ <element name="gsLst">
+ <ref name="CT_GradientStopList"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_ShadeProperties"/>
+ </optional>
+ <optional>
+ <element name="tileRect">
+ <ref name="CT_RelativeRect"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="flip">
+ <ref name="ST_TileFlipMode"/>
+ <xs:documentation>Tile Flip</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rotWithShape">
+ <data type="boolean">
+ <xs:documentation>Rotate With Shape</xs:documentation>
+ </data>
+ <xs:documentation>Rotate With Shape</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_TileInfoProperties">
+ <optional>
+ <attribute name="tx">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Horizontal Offset</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ty">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Vertical Offset</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sx">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Horizontal Ratio</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sy">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Vertical Ratio</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="flip">
+ <ref name="ST_TileFlipMode"/>
+ <xs:documentation>Tile Flipping</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="algn">
+ <ref name="ST_RectAlignment"/>
+ <xs:documentation>Alignment</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_StretchInfoProperties">
+ <optional>
+ <element name="fillRect">
+ <ref name="CT_RelativeRect"/>
+ </element>
+ </optional>
+ </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">
+ <list>
+ <xs:documentation>Blip Compression Type</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_Blip">
+ <group>
+ <zeroOrMore>
+ <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>
+ </zeroOrMore>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <ref name="AG_Blob"/>
+ <optional>
+ <attribute name="cstate">
+ <ref name="ST_BlipCompression"/>
+ <xs:documentation>Compression State</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_BlipFillProperties">
+ <group>
+ <optional>
+ <element name="blip">
+ <ref name="CT_Blip"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="srcRect">
+ <ref name="CT_RelativeRect"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_FillModeProperties"/>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="dpi">
+ <data type="unsignedInt">
+ <xs:documentation>DPI Setting</xs:documentation>
+ </data>
+ <xs:documentation>DPI Setting</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rotWithShape">
+ <data type="boolean">
+ <xs:documentation>Rotate With Shape</xs:documentation>
+ </data>
+ <xs:documentation>Rotate With Shape</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_PresetPatternVal">
+ <list>
+ <xs:documentation>Preset Pattern Value</xs:documentation>
+ <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>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_PatternFillProperties">
+ <group>
+ <optional>
+ <element name="fgClr">
+ <ref name="CT_Color"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bgClr">
+ <ref name="CT_Color"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="prst">
+ <ref name="ST_PresetPatternVal"/>
+ <xs:documentation>Preset Pattern</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_GroupFillProperties">
+ <empty/>
+ </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">
+ <list>
+ <xs:documentation>Blend Mode</xs:documentation>
+ <choice>
+<!-- Overlay -->
+ <value>over</value>
+<!-- Multiply -->
+ <value>mult</value>
+<!-- Screen -->
+ <value>screen</value>
+<!-- Darken -->
+ <value>darken</value>
+<!-- Lighten -->
+ <value>lighten</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_FillOverlayEffect">
+ <ref name="EG_FillProperties"/>
+ <attribute name="blend">
+ <ref name="ST_BlendMode"/>
+ <xs:documentation>Blend</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_EffectReference">
+ <attribute name="ref">
+ <data type="token">
+ <xs:documentation>Reference</xs:documentation>
+ </data>
+ <xs:documentation>Reference</xs:documentation>
+ </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">
+ <list>
+ <xs:documentation>Effect Container Type</xs:documentation>
+ <choice>
+<!-- Sibling -->
+ <value>sib</value>
+<!-- Tree -->
+ <value>tree</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_EffectContainer">
+ <zeroOrMore>
+ <ref name="EG_Effect"/>
+ </zeroOrMore>
+ <optional>
+ <attribute name="type">
+ <ref name="ST_EffectContainerType"/>
+ <xs:documentation>Effect Container Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="name">
+ <data type="token">
+ <xs:documentation>Name</xs:documentation>
+ </data>
+ <xs:documentation>Name</xs:documentation>
+ </attribute>
+ </optional>
+ </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"/>
+ <xs:documentation>Blend Mode</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_EffectList">
+ <optional>
+ <element name="blur">
+ <ref name="CT_BlurEffect"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="fillOverlay">
+ <ref name="CT_FillOverlayEffect"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="glow">
+ <ref name="CT_GlowEffect"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="innerShdw">
+ <ref name="CT_InnerShadowEffect"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="outerShdw">
+ <ref name="CT_OuterShadowEffect"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="prstShdw">
+ <ref name="CT_PresetShadowEffect"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="reflection">
+ <ref name="CT_ReflectionEffect"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="softEdge">
+ <ref name="CT_SoftEdgesEffect"/>
+ </element>
+ </optional>
+ </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" generated="yes">
+ <value name="shdw1" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw1">shdw1</value>
+ <value name="shdw2" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw2">shdw2</value>
+ <value name="shdw3" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw3">shdw3</value>
+ <value name="shdw4" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw4">shdw4</value>
+ <value name="shdw5" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw5">shdw5</value>
+ <value name="shdw6" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw6">shdw6</value>
+ <value name="shdw7" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw7">shdw7</value>
+ <value name="shdw8" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw8">shdw8</value>
+ <value name="shdw9" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw9">shdw9</value>
+ <value name="shdw10" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw10">shdw10</value>
+ <value name="shdw11" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw11">shdw11</value>
+ <value name="shdw12" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw12">shdw12</value>
+ <value name="shdw13" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw13">shdw13</value>
+ <value name="shdw14" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw14">shdw14</value>
+ <value name="shdw15" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw15">shdw15</value>
+ <value name="shdw16" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw16">shdw16</value>
+ <value name="shdw17" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw17">shdw17</value>
+ <value name="shdw18" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw18">shdw18</value>
+ <value name="shdw19" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw19">shdw19</value>
+ <value name="shdw20" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw20">shdw20</value>
+ </resource>
+ <resource name="CT_SolidColorFillProperties" resource="Properties"/>
+ <resource name="ST_PathShadeType" resource="List" generated="yes">
+ <value name="shape" tokenid="ooxml:Value_drawingml_ST_PathShadeType_shape">shape</value>
+ <value name="circle" tokenid="ooxml:Value_drawingml_ST_PathShadeType_circle">circle</value>
+ <value name="rect" tokenid="ooxml:Value_drawingml_ST_PathShadeType_rect">rect</value>
+ </resource>
+ <resource name="ST_TileFlipMode" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_drawingml_ST_TileFlipMode_none">none</value>
+ <value name="x" tokenid="ooxml:Value_drawingml_ST_TileFlipMode_x">x</value>
+ <value name="y" tokenid="ooxml:Value_drawingml_ST_TileFlipMode_y">y</value>
+ <value name="xy" 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" generated="yes">
+ <value name="email" tokenid="ooxml:Value_drawingml_ST_BlipCompression_email">email</value>
+ <value name="screen" tokenid="ooxml:Value_drawingml_ST_BlipCompression_screen">screen</value>
+ <value name="print" tokenid="ooxml:Value_drawingml_ST_BlipCompression_print">print</value>
+ <value name="hqprint" tokenid="ooxml:Value_drawingml_ST_BlipCompression_hqprint">hqprint</value>
+ <value name="none" 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" generated="yes">
+ <value name="pct5" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct5">pct5</value>
+ <value name="pct10" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct10">pct10</value>
+ <value name="pct20" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct20">pct20</value>
+ <value name="pct25" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct25">pct25</value>
+ <value name="pct30" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct30">pct30</value>
+ <value name="pct40" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct40">pct40</value>
+ <value name="pct50" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct50">pct50</value>
+ <value name="pct60" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct60">pct60</value>
+ <value name="pct70" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct70">pct70</value>
+ <value name="pct75" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct75">pct75</value>
+ <value name="pct80" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct80">pct80</value>
+ <value name="pct90" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct90">pct90</value>
+ <value name="horz" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_horz">horz</value>
+ <value name="vert" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_vert">vert</value>
+ <value name="ltHorz" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_ltHorz">ltHorz</value>
+ <value name="ltVert" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_ltVert">ltVert</value>
+ <value name="dkHorz" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dkHorz">dkHorz</value>
+ <value name="dkVert" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dkVert">dkVert</value>
+ <value name="narHorz" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_narHorz">narHorz</value>
+ <value name="narVert" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_narVert">narVert</value>
+ <value name="dashHorz" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dashHorz">dashHorz</value>
+ <value name="dashVert" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dashVert">dashVert</value>
+ <value name="cross" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_cross">cross</value>
+ <value name="dnDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dnDiag">dnDiag</value>
+ <value name="upDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_upDiag">upDiag</value>
+ <value name="ltDnDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_ltDnDiag">ltDnDiag</value>
+ <value name="ltUpDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_ltUpDiag">ltUpDiag</value>
+ <value name="dkDnDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dkDnDiag">dkDnDiag</value>
+ <value name="dkUpDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dkUpDiag">dkUpDiag</value>
+ <value name="wdDnDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_wdDnDiag">wdDnDiag</value>
+ <value name="wdUpDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_wdUpDiag">wdUpDiag</value>
+ <value name="dashDnDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dashDnDiag">dashDnDiag</value>
+ <value name="dashUpDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dashUpDiag">dashUpDiag</value>
+ <value name="diagCross" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_diagCross">diagCross</value>
+ <value name="smCheck" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_smCheck">smCheck</value>
+ <value name="lgCheck" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_lgCheck">lgCheck</value>
+ <value name="smGrid" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_smGrid">smGrid</value>
+ <value name="lgGrid" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_lgGrid">lgGrid</value>
+ <value name="dotGrid" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dotGrid">dotGrid</value>
+ <value name="smConfetti" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_smConfetti">smConfetti</value>
+ <value name="lgConfetti" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_lgConfetti">lgConfetti</value>
+ <value name="horzBrick" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_horzBrick">horzBrick</value>
+ <value name="diagBrick" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_diagBrick">diagBrick</value>
+ <value name="solidDmnd" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_solidDmnd">solidDmnd</value>
+ <value name="openDmnd" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_openDmnd">openDmnd</value>
+ <value name="dotDmnd" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dotDmnd">dotDmnd</value>
+ <value name="plaid" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_plaid">plaid</value>
+ <value name="sphere" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_sphere">sphere</value>
+ <value name="weave" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_weave">weave</value>
+ <value name="divot" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_divot">divot</value>
+ <value name="shingle" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_shingle">shingle</value>
+ <value name="wave" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_wave">wave</value>
+ <value name="trellis" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_trellis">trellis</value>
+ <value name="zigZag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_zigZag">zigZag</value>
+ </resource>
+ <resource name="ST_BlendMode" resource="List" generated="yes">
+ <value name="over" tokenid="ooxml:Value_drawingml_ST_BlendMode_over">over</value>
+ <value name="mult" tokenid="ooxml:Value_drawingml_ST_BlendMode_mult">mult</value>
+ <value name="screen" tokenid="ooxml:Value_drawingml_ST_BlendMode_screen">screen</value>
+ <value name="darken" tokenid="ooxml:Value_drawingml_ST_BlendMode_darken">darken</value>
+ <value name="lighten" 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" generated="yes">
+ <value name="sib" tokenid="ooxml:Value_drawingml_ST_EffectContainerType_sib">sib</value>
+ <value name="tree" 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" file="dml-shapeLineProperties.rng">
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
+<!-- ISO RELAX NG Schema -->
+ <include href="dml-shapeEffects.rng"/>
+ <define name="ST_LineEndType">
+ <list>
+ <xs:documentation>Line End Type</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_LineEndWidth">
+ <list>
+ <xs:documentation>Line End Width</xs:documentation>
+ <choice>
+<!-- Small -->
+ <value>sm</value>
+<!-- Medium -->
+ <value>med</value>
+<!-- Large -->
+ <value>lg</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_LineEndLength">
+ <list>
+ <xs:documentation>Line End Length</xs:documentation>
+ <choice>
+<!-- Small -->
+ <value>sm</value>
+<!-- Medium -->
+ <value>med</value>
+<!-- Large -->
+ <value>lg</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_LineEndProperties">
+ <optional>
+ <attribute name="type">
+ <ref name="ST_LineEndType"/>
+ <xs:documentation>Line Head/End Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="w">
+ <ref name="ST_LineEndWidth"/>
+ <xs:documentation>Width of Head/End</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="len">
+ <ref name="ST_LineEndLength"/>
+ <xs:documentation>Length of Head/End</xs:documentation>
+ </attribute>
+ </optional>
+ </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">
+ <empty/>
+ </define>
+ <define name="CT_LineJoinRound">
+ <empty/>
+ </define>
+ <define name="CT_LineJoinMiterProperties">
+ <optional>
+ <attribute name="lim">
+ <ref name="ST_PositivePercentage"/>
+ <xs:documentation>Miter Join Limit</xs:documentation>
+ </attribute>
+ </optional>
+ </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">
+ <list>
+ <xs:documentation>Preset Line Dash Value</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_PresetLineDashProperties">
+ <optional>
+ <attribute name="val">
+ <ref name="ST_PresetLineDashVal"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_DashStop">
+ <attribute name="d">
+ <ref name="ST_PositivePercentage"/>
+ <xs:documentation>Dash Length</xs:documentation>
+ </attribute>
+ <attribute name="sp">
+ <ref name="ST_PositivePercentage"/>
+ <xs:documentation>Space Length</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_DashStopList">
+ <zeroOrMore>
+ <element name="ds">
+ <ref name="CT_DashStop"/>
+ </element>
+ </zeroOrMore>
+ </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">
+ <list>
+ <xs:documentation>End Line Cap</xs:documentation>
+ <choice>
+<!-- Round Line Cap -->
+ <value>rnd</value>
+<!-- Square Line Cap -->
+ <value>sq</value>
+<!-- Flat Line Cap -->
+ <value>flat</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_LineWidth">
+ <empty/>
+ </define>
+ <define name="ST_PenAlignment">
+ <list>
+ <xs:documentation>Alignment Type</xs:documentation>
+ <choice>
+<!-- Center Alignment -->
+ <value>ctr</value>
+<!-- Inset Alignment -->
+ <value>in</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_CompoundLine">
+ <list>
+ <xs:documentation>Compound Line Type</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_LineProperties">
+ <group>
+ <optional>
+ <ref name="EG_LineFillProperties"/>
+ </optional>
+ <optional>
+ <ref name="EG_LineDashProperties"/>
+ </optional>
+ <optional>
+ <ref name="EG_LineJoinProperties"/>
+ </optional>
+ <optional>
+ <element name="headEnd">
+ <ref name="CT_LineEndProperties"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tailEnd">
+ <ref name="CT_LineEndProperties"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="w">
+ <ref name="ST_LineWidth"/>
+ <xs:documentation>Line Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="cap">
+ <ref name="ST_LineCap"/>
+ <xs:documentation>Line Ending Cap Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="cmpd">
+ <ref name="ST_CompoundLine"/>
+ <xs:documentation>Compound Line Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="algn">
+ <ref name="ST_PenAlignment"/>
+ <xs:documentation>Stroke Alignment</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ </grammar>
+ <resource name="ST_LineEndType" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_drawingml_ST_LineEndType_none">none</value>
+ <value name="triangle" tokenid="ooxml:Value_drawingml_ST_LineEndType_triangle">triangle</value>
+ <value name="stealth" tokenid="ooxml:Value_drawingml_ST_LineEndType_stealth">stealth</value>
+ <value name="diamond" tokenid="ooxml:Value_drawingml_ST_LineEndType_diamond">diamond</value>
+ <value name="oval" tokenid="ooxml:Value_drawingml_ST_LineEndType_oval">oval</value>
+ <value name="arrow" tokenid="ooxml:Value_drawingml_ST_LineEndType_arrow">arrow</value>
+ </resource>
+ <resource name="ST_LineEndWidth" resource="List" generated="yes">
+ <value name="sm" tokenid="ooxml:Value_drawingml_ST_LineEndWidth_sm">sm</value>
+ <value name="med" tokenid="ooxml:Value_drawingml_ST_LineEndWidth_med">med</value>
+ <value name="lg" tokenid="ooxml:Value_drawingml_ST_LineEndWidth_lg">lg</value>
+ </resource>
+ <resource name="ST_LineEndLength" resource="List" generated="yes">
+ <value name="sm" tokenid="ooxml:Value_drawingml_ST_LineEndLength_sm">sm</value>
+ <value name="med" tokenid="ooxml:Value_drawingml_ST_LineEndLength_med">med</value>
+ <value name="lg" 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" generated="yes">
+ <value name="solid" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_solid">solid</value>
+ <value name="dot" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_dot">dot</value>
+ <value name="dash" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_dash">dash</value>
+ <value name="lgDash" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_lgDash">lgDash</value>
+ <value name="dashDot" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_dashDot">dashDot</value>
+ <value name="lgDashDot" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_lgDashDot">lgDashDot</value>
+ <value name="lgDashDotDot" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_lgDashDotDot">lgDashDotDot</value>
+ <value name="sysDash" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_sysDash">sysDash</value>
+ <value name="sysDot" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_sysDot">sysDot</value>
+ <value name="sysDashDot" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_sysDashDot">sysDashDot</value>
+ <value name="sysDashDotDot" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_sysDashDotDot">sysDashDotDot</value>
+ </resource>
+ <resource name="ST_LineCap" resource="List" generated="yes">
+ <value name="rnd" tokenid="ooxml:Value_drawingml_ST_LineCap_rnd">rnd</value>
+ <value name="sq" tokenid="ooxml:Value_drawingml_ST_LineCap_sq">sq</value>
+ <value name="flat" tokenid="ooxml:Value_drawingml_ST_LineCap_flat">flat</value>
+ </resource>
+ <resource name="ST_PenAlignment" resource="List" generated="yes">
+ <value name="ctr" tokenid="ooxml:Value_drawingml_ST_PenAlignment_ctr">ctr</value>
+ <value name="in" tokenid="ooxml:Value_drawingml_ST_PenAlignment_in">in</value>
+ </resource>
+ <resource name="ST_CompoundLine" resource="List" generated="yes">
+ <value name="sng" tokenid="ooxml:Value_drawingml_ST_CompoundLine_sng">sng</value>
+ <value name="dbl" tokenid="ooxml:Value_drawingml_ST_CompoundLine_dbl">dbl</value>
+ <value name="thickThin" tokenid="ooxml:Value_drawingml_ST_CompoundLine_thickThin">thickThin</value>
+ <value name="thinThick" tokenid="ooxml:Value_drawingml_ST_CompoundLine_thinThick">thinThick</value>
+ <value name="tri" 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" file="dml-shapeProperties.rng">
+ <grammar xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
+<!-- ISO RELAX NG Schema -->
+ <include href="dml-shape3DStyles.rng"/>
+ <include href="dml-shape3DScene.rng"/>
+ <include href="dml-shapeGeometry.rng"/>
+ <include href="dml-shapeEffects.rng"/>
+ <include href="dml-shapeLineProperties.rng"/>
+ <define name="CT_ShapeProperties">
+ <group>
+ <optional>
+ <element name="xfrm">
+ <ref name="CT_Transform2D"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_Geometry"/>
+ </optional>
+ <optional>
+ <ref name="EG_FillProperties"/>
+ </optional>
+ <optional>
+ <element name="ln">
+ <ref name="CT_LineProperties"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_EffectProperties"/>
+ </optional>
+ <optional>
+ <element name="scene3d">
+ <ref name="CT_Scene3D"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sp3d">
+ <ref name="CT_Shape3D"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="bwMode">
+ <ref name="ST_BlackWhiteMode"/>
+ <xs:documentation>Black and White Mode</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_GroupShapeProperties">
+ <group>
+ <optional>
+ <element name="xfrm">
+ <ref name="CT_GroupTransform2D"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_FillProperties"/>
+ </optional>
+ <optional>
+ <ref name="EG_EffectProperties"/>
+ </optional>
+ <optional>
+ <element name="scene3d">
+ <ref name="CT_Scene3D"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="bwMode">
+ <ref name="ST_BlackWhiteMode"/>
+ <xs:documentation>Black and White Mode</xs:documentation>
+ </attribute>
+ </optional>
+ </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" file="dml-baseTypes">
+ <grammar xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+<!-- ISO RELAX NG Schema -->
+ <include href="shared-relationshipReference.rng"/>
+ <define name="CT_OfficeArtExtension">
+ <element>
+ <anyName/>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <attribute name="uri">
+ <data type="token">
+ <xs:documentation>Uniform Resource Identifier</xs:documentation>
+ </data>
+ <xs:documentation>Uniform Resource Identifier</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Coordinate">
+ <data type="long">
+ <xs:documentation>Coordinate</xs:documentation>
+ <param name="minInclusive">-27273042329600</param>
+ <param name="maxInclusive">27273042316900</param>
+ </data>
+ </define>
+ <define name="ST_Coordinate32">
+ <data type="int">
+ <xs:documentation>Coordinate Point</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_PositiveCoordinate">
+ <data type="long">
+ <xs:documentation>Positive Coordinate</xs:documentation>
+ <param name="minInclusive">0</param>
+ <param name="maxInclusive">27273042316900</param>
+ </data>
+ </define>
+ <define name="ST_PositiveCoordinate32">
+ <empty/>
+ </define>
+ <define name="ST_Angle">
+ <data type="int">
+ <xs:documentation>Angle</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_Angle">
+ <attribute name="val">
+ <ref name="ST_Angle"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_FixedAngle">
+ <empty/>
+ </define>
+ <define name="ST_PositiveFixedAngle">
+ <empty/>
+ </define>
+ <define name="CT_PositiveFixedAngle">
+ <attribute name="val">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Percentage">
+ <data type="int">
+ <xs:documentation>Percentage</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_Percentage">
+ <attribute name="val">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_PositivePercentage">
+ <empty/>
+ </define>
+ <define name="CT_PositivePercentage">
+ <attribute name="val">
+ <ref name="ST_PositivePercentage"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_FixedPercentage">
+ <empty/>
+ </define>
+ <define name="CT_FixedPercentage">
+ <attribute name="val">
+ <ref name="ST_FixedPercentage"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_PositiveFixedPercentage">
+ <empty/>
+ </define>
+ <define name="CT_PositiveFixedPercentage">
+ <attribute name="val">
+ <ref name="ST_PositiveFixedPercentage"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Ratio">
+ <attribute name="n">
+ <data type="long">
+ <xs:documentation>Numerator</xs:documentation>
+ </data>
+ <xs:documentation>Numerator</xs:documentation>
+ </attribute>
+ <attribute name="d">
+ <data type="long">
+ <xs:documentation>Denominator</xs:documentation>
+ </data>
+ <xs:documentation>Denominator</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Point2D">
+ <attribute name="x">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>X-Axis Coordinate</xs:documentation>
+ </attribute>
+ <attribute name="y">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Y-Axis Coordinate</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_PositiveSize2D">
+ <attribute name="cx">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Extent Length</xs:documentation>
+ </attribute>
+ <attribute name="cy">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Extent Width</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_ComplementTransform">
+ <empty/>
+ </define>
+ <define name="CT_InverseTransform">
+ <empty/>
+ </define>
+ <define name="CT_GrayscaleTransform">
+ <empty/>
+ </define>
+ <define name="CT_GammaTransform">
+ <empty/>
+ </define>
+ <define name="CT_InverseGammaTransform">
+ <empty/>
+ </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">
+ <zeroOrMore>
+ <ref name="EG_ColorTransform"/>
+ </zeroOrMore>
+ <attribute name="r">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Red</xs:documentation>
+ </attribute>
+ <attribute name="g">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Green</xs:documentation>
+ </attribute>
+ <attribute name="b">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Blue</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_HexBinary3">
+ <data type="hexBinary">
+ <xs:documentation>Hex Binary of Length 3</xs:documentation>
+ <param name="length">3</param>
+ </data>
+ </define>
+ <define name="CT_SRgbColor">
+ <zeroOrMore>
+ <ref name="EG_ColorTransform"/>
+ </zeroOrMore>
+ <attribute name="val">
+ <ref name="ST_HexBinary3"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_HslColor">
+ <zeroOrMore>
+ <ref name="EG_ColorTransform"/>
+ </zeroOrMore>
+ <attribute name="hue">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Hue</xs:documentation>
+ </attribute>
+ <attribute name="sat">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Saturation</xs:documentation>
+ </attribute>
+ <attribute name="lum">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Luminance</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_SystemColorVal">
+ <list>
+ <xs:documentation>System Color Value</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_SystemColor">
+ <zeroOrMore>
+ <ref name="EG_ColorTransform"/>
+ </zeroOrMore>
+ <attribute name="val">
+ <ref name="ST_SystemColorVal"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="lastClr">
+ <ref name="ST_HexBinary3"/>
+ <xs:documentation>Last Color</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_SchemeColorVal">
+ <list>
+ <xs:documentation>Scheme Color</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_SchemeColor">
+ <zeroOrMore>
+ <ref name="EG_ColorTransform"/>
+ </zeroOrMore>
+ <attribute name="val">
+ <ref name="ST_SchemeColorVal"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_PresetColorVal">
+ <list>
+ <xs:documentation>Preset Color Value</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_PresetColor">
+ <zeroOrMore>
+ <ref name="EG_ColorTransform"/>
+ </zeroOrMore>
+ <attribute name="val">
+ <ref name="ST_PresetColorVal"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="EG_OfficeArtExtensionList">
+ <zeroOrMore>
+ <element name="ext">
+ <ref name="CT_OfficeArtExtension"/>
+ </element>
+ </zeroOrMore>
+ </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">
+ <group>
+ <optional>
+ <element name="off">
+ <ref name="CT_Point2D"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ext">
+ <ref name="CT_PositiveSize2D"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="rot">
+ <ref name="ST_Angle"/>
+ <xs:documentation>Rotation</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="flipH">
+ <data type="boolean">
+ <xs:documentation>Horizontal Flip</xs:documentation>
+ </data>
+ <xs:documentation>Horizontal Flip</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="flipV">
+ <data type="boolean">
+ <xs:documentation>Vertical Flip</xs:documentation>
+ </data>
+ <xs:documentation>Vertical Flip</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_GroupTransform2D">
+ <group>
+ <optional>
+ <element name="off">
+ <ref name="CT_Point2D"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ext">
+ <ref name="CT_PositiveSize2D"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="chOff">
+ <ref name="CT_Point2D"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="chExt">
+ <ref name="CT_PositiveSize2D"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="rot">
+ <ref name="ST_Angle"/>
+ <xs:documentation>Rotation</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="flipH">
+ <data type="boolean">
+ <xs:documentation>Horizontal Flip</xs:documentation>
+ </data>
+ <xs:documentation>Horizontal Flip</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="flipV">
+ <data type="boolean">
+ <xs:documentation>Vertical Flip</xs:documentation>
+ </data>
+ <xs:documentation>Vertical Flip</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Point3D">
+ <attribute name="x">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>X-Coordinate in 3D</xs:documentation>
+ </attribute>
+ <attribute name="y">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Y-Coordinate in 3D</xs:documentation>
+ </attribute>
+ <attribute name="z">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Z-Coordinate in 3D</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Vector3D">
+ <attribute name="dx">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Distance along X-axis in 3D</xs:documentation>
+ </attribute>
+ <attribute name="dy">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Distance along Y-axis in 3D</xs:documentation>
+ </attribute>
+ <attribute name="dz">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Distance along Z-axis in 3D</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SphereCoords">
+ <attribute name="lat">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Latitude</xs:documentation>
+ </attribute>
+ <attribute name="lon">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Longitude</xs:documentation>
+ </attribute>
+ <attribute name="rev">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Revolution</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_RelativeRect">
+ <optional>
+ <attribute name="l">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Left Offset</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="t">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Top Offset</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="r">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Right Offset</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="b">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Bottom Offset</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_RectAlignment">
+ <list>
+ <xs:documentation>Rectangle Alignments</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_Guid">
+ <data type="token">
+ <xs:documentation>GUID Method</xs:documentation>
+ <param name="pattern">\{[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}\}</param>
+ </data>
+ </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">
+ <zeroOrMore>
+ <ref name="EG_ColorChoice"/>
+ </zeroOrMore>
+ </define>
+ <define name="ST_BlackWhiteMode">
+ <list>
+ <xs:documentation>Black and White Mode</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="AG_Blob">
+ <optional>
+ <attribute name="r:embed">
+ <text/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="r:link">
+ <text/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_EmbeddedWAVAudioFile">
+ <attribute name="r:embed"/>
+ <optional>
+ <attribute name="name">
+ <data type="string">
+ <xs:documentation>Sound Name</xs:documentation>
+ </data>
+ <xs:documentation>Sound Name</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="builtIn">
+ <data type="boolean">
+ <xs:documentation>Recognized Built-In Sound</xs:documentation>
+ </data>
+ <xs:documentation>Recognized Built-In Sound</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Hyperlink">
+ <group>
+ <optional>
+ <element name="snd">
+ <ref name="CT_EmbeddedWAVAudioFile"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="r:id"/>
+ </optional>
+ <optional>
+ <attribute name="invalidUrl">
+ <data type="string">
+ <xs:documentation>Invalid URL</xs:documentation>
+ </data>
+ <xs:documentation>Invalid URL</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="action">
+ <data type="string">
+ <xs:documentation>Action Setting</xs:documentation>
+ </data>
+ <xs:documentation>Action Setting</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="tgtFrame">
+ <data type="string">
+ <xs:documentation>Target Frame</xs:documentation>
+ </data>
+ <xs:documentation>Target Frame</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="tooltip">
+ <data type="string">
+ <xs:documentation>Hyperlink Tooltip</xs:documentation>
+ </data>
+ <xs:documentation>Hyperlink Tooltip</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="history">
+ <data type="boolean">
+ <xs:documentation>Add Hyperlink to Page History</xs:documentation>
+ </data>
+ <xs:documentation>Add Hyperlink to Page History</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="highlightClick">
+ <data type="boolean">
+ <xs:documentation>Highlight Click</xs:documentation>
+ </data>
+ <xs:documentation>Highlight Click</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endSnd">
+ <data type="boolean">
+ <xs:documentation>End Sounds</xs:documentation>
+ </data>
+ <xs:documentation>End Sounds</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_DrawingElementId">
+ <data type="unsignedInt">
+ <xs:documentation>Drawing Element ID</xs:documentation>
+ </data>
+ </define>
+ </grammar>
+ <resource name="ST_Coordinate" resource="Integer" generated="yes"/>
+ <resource name="ST_Coordinate32" resource="Integer" generated="yes"/>
+ <resource name="ST_PositiveCoordinate" resource="Integer" generated="yes"/>
+ <resource name="ST_Angle" resource="Integer" generated="yes"/>
+ <resource name="ST_Percentage" resource="Integer" generated="yes"/>
+ <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" generated="yes"/>
+ <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" generated="yes">
+ <value name="scrollBar" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_scrollBar">scrollBar</value>
+ <value name="background" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_background">background</value>
+ <value name="activeCaption" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_activeCaption">activeCaption</value>
+ <value name="inactiveCaption" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_inactiveCaption">inactiveCaption</value>
+ <value name="menu" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_menu">menu</value>
+ <value name="window" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_window">window</value>
+ <value name="windowFrame" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_windowFrame">windowFrame</value>
+ <value name="menuText" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_menuText">menuText</value>
+ <value name="windowText" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_windowText">windowText</value>
+ <value name="captionText" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_captionText">captionText</value>
+ <value name="activeBorder" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_activeBorder">activeBorder</value>
+ <value name="inactiveBorder" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_inactiveBorder">inactiveBorder</value>
+ <value name="appWorkspace" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_appWorkspace">appWorkspace</value>
+ <value name="highlight" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_highlight">highlight</value>
+ <value name="highlightText" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_highlightText">highlightText</value>
+ <value name="btnFace" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_btnFace">btnFace</value>
+ <value name="btnShadow" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_btnShadow">btnShadow</value>
+ <value name="grayText" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_grayText">grayText</value>
+ <value name="btnText" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_btnText">btnText</value>
+ <value name="inactiveCaptionText" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_inactiveCaptionText">inactiveCaptionText</value>
+ <value name="btnHighlight" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_btnHighlight">btnHighlight</value>
+ <value name="3dDkShadow" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_3dDkShadow">3dDkShadow</value>
+ <value name="3dLight" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_3dLight">3dLight</value>
+ <value name="infoText" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_infoText">infoText</value>
+ <value name="infoBk" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_infoBk">infoBk</value>
+ <value name="hotLight" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_hotLight">hotLight</value>
+ <value name="gradientActiveCaption" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_gradientActiveCaption">gradientActiveCaption</value>
+ <value name="gradientInactiveCaption" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_gradientInactiveCaption">gradientInactiveCaption</value>
+ <value name="menuHighlight" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_menuHighlight">menuHighlight</value>
+ <value name="menuBar" 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" generated="yes">
+ <value name="bg1" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_bg1">bg1</value>
+ <value name="tx1" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_tx1">tx1</value>
+ <value name="bg2" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_bg2">bg2</value>
+ <value name="tx2" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_tx2">tx2</value>
+ <value name="accent1" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent1">accent1</value>
+ <value name="accent2" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent2">accent2</value>
+ <value name="accent3" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent3">accent3</value>
+ <value name="accent4" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent4">accent4</value>
+ <value name="accent5" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent5">accent5</value>
+ <value name="accent6" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent6">accent6</value>
+ <value name="hlink" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_hlink">hlink</value>
+ <value name="folHlink" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_folHlink">folHlink</value>
+ <value name="phClr" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_phClr">phClr</value>
+ <value name="dk1" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_dk1">dk1</value>
+ <value name="lt1" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_lt1">lt1</value>
+ <value name="dk2" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_dk2">dk2</value>
+ <value name="lt2" 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="0xf0f8ff">aliceBlue</value>
+ <value tokenid="0xfaebd7">antiqueWhite</value>
+ <value tokenid="0x00ffff">aqua</value>
+ <value tokenid="0x7fffd4">aquamarine</value>
+ <value tokenid="0xf0ffff">azure</value>
+ <value tokenid="0xf5f5dc">beige</value>
+ <value tokenid="0xffe4c4">bisque</value>
+ <value tokenid="0x000000">black</value>
+ <value tokenid="0xffebcd">blanchedAlmond</value>
+ <value tokenid="0x0000ff">blue</value>
+ <value tokenid="0x8a2be2">blueViolet</value>
+ <value tokenid="0xa52a2a">brown</value>
+ <value tokenid="0xdeb887">burlyWood</value>
+ <value tokenid="0x5f9ea0">cadetBlue</value>
+ <value tokenid="0x7fff00">chartreuse</value>
+ <value tokenid="0xd2691e">chocolate</value>
+ <value tokenid="0xff7f50">coral</value>
+ <value tokenid="0x6495ed">cornflowerBlue</value>
+ <value tokenid="0xfff8dc">cornsilk</value>
+ <value tokenid="0xdc143c">crimson</value>
+ <value tokenid="0x00ffff">cyan</value>
+ <value tokenid="0xff1493">deepPink</value>
+ <value tokenid="0x00bfff">deepSkyBlue</value>
+ <value tokenid="0x696969">dimGray</value>
+ <value tokenid="0x00008b">dkBlue</value>
+ <value tokenid="0x008b8b">dkCyan</value>
+ <value tokenid="0xb8860b">dkGoldenrod</value>
+ <value tokenid="0xa9a9a9">dkGray</value>
+ <value tokenid="0x006400">dkGreen</value>
+ <value tokenid="0xbdb76b">dkKhaki</value>
+ <value tokenid="0x8b008b">dkMagenta</value>
+ <value tokenid="0x556b2f">dkOliveGreen</value>
+ <value tokenid="0xff8c00">dkOrange</value>
+ <value tokenid="0x9932cc">dkOrchid</value>
+ <value tokenid="0x8b0000">dkRed</value>
+ <value tokenid="0xe9967a">dkSalmon</value>
+ <value tokenid="0x8fbc8b">dkSeaGreen</value>
+ <value tokenid="0x483d8b">dkSlateBlue</value>
+ <value tokenid="0x2f4f4f">dkSlateGray</value>
+ <value tokenid="0x00ced1">dkTurquoise</value>
+ <value tokenid="0x9400d3">dkViolet</value>
+ <value tokenid="0x1e90ff">dodgerBlue</value>
+ <value tokenid="0xb22222">firebrick</value>
+ <value tokenid="0xfffaf0">floralWhite</value>
+ <value tokenid="0x228b22">forestGreen</value>
+ <value tokenid="0xff00ff">fuchsia</value>
+ <value tokenid="0xdcdcdc">gainsboro</value>
+ <value tokenid="0xf8f8ff">ghostWhite</value>
+ <value tokenid="0xffd700">gold</value>
+ <value tokenid="0xdaa520">goldenrod</value>
+ <value tokenid="0x808080">gray</value>
+ <value tokenid="0x008000">green</value>
+ <value tokenid="0xadff2f">greenYellow</value>
+ <value tokenid="0xf0fff0">honeydew</value>
+ <value tokenid="0xff69b4">hotPink</value>
+ <value tokenid="0xcd5c5c">indianRed</value>
+ <value tokenid="0x4b0082">indigo</value>
+ <value tokenid="0xfffff0">ivory</value>
+ <value tokenid="0xf0e68c">khaki</value>
+ <value tokenid="0xe6e6fa">lavender</value>
+ <value tokenid="0xfff0f5">lavenderBlush</value>
+ <value tokenid="0x7cfc00">lawnGreen</value>
+ <value tokenid="0xfffacd">lemonChiffon</value>
+ <value tokenid="0x00ff00">lime</value>
+ <value tokenid="0x32cd32">limeGreen</value>
+ <value tokenid="0xfaf0e6">linen</value>
+ <value tokenid="0xadd8e6">ltBlue</value>
+ <value tokenid="0xf08080">ltCoral</value>
+ <value tokenid="0xe0ffff">ltCyan</value>
+ <value tokenid="0xfafa78">ltGoldenrodYellow</value>
+ <value tokenid="0xd3d3d3">ltGray</value>
+ <value tokenid="0x90ee90">ltGreen</value>
+ <value tokenid="0xffb6c1">ltPink</value>
+ <value tokenid="0xffa07a">ltSalmon</value>
+ <value tokenid="0x20b2aa">ltSeaGreen</value>
+ <value tokenid="0x87cefa">ltSkyBlue</value>
+ <value tokenid="0x778899">ltSlateGray</value>
+ <value tokenid="0xb0c4de">ltSteelBlue</value>
+ <value tokenid="0xffffe0">ltYellow</value>
+ <value tokenid="0xff00ff">magenta</value>
+ <value tokenid="0x800000">maroon</value>
+ <value tokenid="0x66cdaa">medAquamarine</value>
+ <value tokenid="0x0000cd">medBlue</value>
+ <value tokenid="0xba55d3">medOrchid</value>
+ <value tokenid="0x9370db">medPurple</value>
+ <value tokenid="0x3cb371">medSeaGreen</value>
+ <value tokenid="0x7b68ee">medSlateBlue</value>
+ <value tokenid="0x00fa9a">medSpringGreen</value>
+ <value tokenid="0x48d1cc">medTurquoise</value>
+ <value tokenid="0xc71585">medVioletRed</value>
+ <value tokenid="0x191970">midnightBlue</value>
+ <value tokenid="0xf5fffa">mintCream</value>
+ <value tokenid="0xffe4e1">mistyRose</value>
+ <value tokenid="0xffe4b5">moccasin</value>
+ <value tokenid="0xffdead">navajoWhite</value>
+ <value tokenid="0x000080">navy</value>
+ <value tokenid="0xfdf5e6">oldLace</value>
+ <value tokenid="0x808000">olive</value>
+ <value tokenid="0x6b8e23">oliveDrab</value>
+ <value tokenid="0xffa500">orange</value>
+ <value tokenid="0xff4500">orangeRed</value>
+ <value tokenid="0xda70d6">orchid</value>
+ <value tokenid="0xeee8aa">paleGoldenrod</value>
+ <value tokenid="0x98fb98">paleGreen</value>
+ <value tokenid="0xafeeee">paleTurquoise</value>
+ <value tokenid="0xdb7093">paleVioletRed</value>
+ <value tokenid="0xffefd5">papayaWhip</value>
+ <value tokenid="0xffdab9">peachPuff</value>
+ <value tokenid="0xcd853f">peru</value>
+ <value tokenid="0xffc0cb">pink</value>
+ <value tokenid="0xdda0dd">plum</value>
+ <value tokenid="0xb0e0e6">powderBlue</value>
+ <value tokenid="0x800080">purple</value>
+ <value tokenid="0xff0000">red</value>
+ <value tokenid="0xbc8f8f">rosyBrown</value>
+ <value tokenid="0x4169e1">royalBlue</value>
+ <value tokenid="0x8b4513">saddleBrown</value>
+ <value tokenid="0xfa8072">salmon</value>
+ <value tokenid="0xf4a460">sandyBrown</value>
+ <value tokenid="0x2e8b57">seaGreen</value>
+ <value tokenid="0xfff5ee">seaShell</value>
+ <value tokenid="0xa0522d">sienna</value>
+ <value tokenid="0xc0c0c0">silver</value>
+ <value tokenid="0x87ceeb">skyBlue</value>
+ <value tokenid="0x6a5acd">slateBlue</value>
+ <value tokenid="0x708090">slateGray</value>
+ <value tokenid="0xfffafa">snow</value>
+ <value tokenid="0x00ff7f">springGreen</value>
+ <value tokenid="0x4682b4">steelBlue</value>
+ <value tokenid="0xd2b48c">tan</value>
+ <value tokenid="0x008080">teal</value>
+ <value tokenid="0xd8bfd8">thistle</value>
+ <value tokenid="0xff6347">tomato</value>
+ <value tokenid="0x40e0d0">turquoise</value>
+ <value tokenid="0xee82ee">violet</value>
+ <value tokenid="0xf5deb3">wheat</value>
+ <value tokenid="0xffffff">white</value>
+ <value tokenid="0xf5f5f5">whiteSmoke</value>
+ <value tokenid="0xffff00">yellow</value>
+ <value tokenid="0x9acd32">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" generated="yes">
+ <value name="tl" tokenid="ooxml:Value_drawingml_ST_RectAlignment_tl">tl</value>
+ <value name="t" tokenid="ooxml:Value_drawingml_ST_RectAlignment_t">t</value>
+ <value name="tr" tokenid="ooxml:Value_drawingml_ST_RectAlignment_tr">tr</value>
+ <value name="l" tokenid="ooxml:Value_drawingml_ST_RectAlignment_l">l</value>
+ <value name="ctr" tokenid="ooxml:Value_drawingml_ST_RectAlignment_ctr">ctr</value>
+ <value name="r" tokenid="ooxml:Value_drawingml_ST_RectAlignment_r">r</value>
+ <value name="bl" tokenid="ooxml:Value_drawingml_ST_RectAlignment_bl">bl</value>
+ <value name="b" tokenid="ooxml:Value_drawingml_ST_RectAlignment_b">b</value>
+ <value name="br" tokenid="ooxml:Value_drawingml_ST_RectAlignment_br">br</value>
+ </resource>
+ <resource name="ST_Guid" resource="String" generated="yes"/>
+ <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" generated="yes">
+ <value name="clr" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_clr">clr</value>
+ <value name="auto" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_auto">auto</value>
+ <value name="gray" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_gray">gray</value>
+ <value name="ltGray" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_ltGray">ltGray</value>
+ <value name="invGray" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_invGray">invGray</value>
+ <value name="grayWhite" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_grayWhite">grayWhite</value>
+ <value name="blackGray" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_blackGray">blackGray</value>
+ <value name="blackWhite" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_blackWhite">blackWhite</value>
+ <value name="black" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_black">black</value>
+ <value name="white" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_white">white</value>
+ <value name="hidden" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_hidden">hidden</value>
+ </resource>
+ <resource xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" 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" generated="yes"/>
+ </namespace>
+ <namespace name="dml-documentProperties" file="dml-documentProperties.rng">
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+<!-- ISO RELAX NG Schema -->
+ <include href="dml-baseTypes.rng"/>
+ <include href="dml-shapeGeometry.rng"/>
+ <define name="AG_Locking">
+ <optional>
+ <attribute name="noGrp">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Grouping</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Grouping</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noSelect">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Selection</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Selection</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noRot">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Rotation</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Rotation</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noChangeAspect">
+ <data type="boolean">
+ <xs:documentation>Disallow Aspect Ratio Change</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Aspect Ratio Change</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noMove">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Movement</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Movement</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noResize">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Resize</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Resize</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noEditPoints">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Point Editing</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Point Editing</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noAdjustHandles">
+ <data type="boolean">
+ <xs:documentation>Disallow Showing Adjust Handles</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Showing Adjust Handles</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noChangeArrowheads">
+ <data type="boolean">
+ <xs:documentation>Disallow Arrowhead Changes</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Arrowhead Changes</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noChangeShapeType">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Type Change</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Type Change</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_ConnectorLocking">
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ <ref name="AG_Locking"/>
+ </define>
+ <define name="CT_ShapeLocking">
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ <ref name="AG_Locking"/>
+ <optional>
+ <attribute name="noTextEdit">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Text Editing</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Text Editing</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_PictureLocking">
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ <ref name="AG_Locking"/>
+ <optional>
+ <attribute name="noCrop">
+ <data type="boolean">
+ <xs:documentation>Disallow Crop Changes</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Crop Changes</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_GroupLocking">
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ <optional>
+ <attribute name="noGrp">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Grouping</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Grouping</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noUngrp">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Ungrouping</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Ungrouping</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noSelect">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Selection</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Selection</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noRot">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Rotation</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Rotation</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noChangeAspect">
+ <data type="boolean">
+ <xs:documentation>Disallow Aspect Ratio Change</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Aspect Ratio Change</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noMove">
+ <data type="boolean">
+ <xs:documentation>Disallow Moving Shape</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Moving Shape</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noResize">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Resizing</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Resizing</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_GraphicalObjectFrameLocking">
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ <optional>
+ <attribute name="noGrp">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Grouping</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Grouping</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noDrilldown">
+ <data type="boolean">
+ <xs:documentation>Disallow Selection of Child Shapes</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Selection of Child Shapes</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noSelect">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Selection</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Selection</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noChangeAspect">
+ <data type="boolean">
+ <xs:documentation>Disallow Aspect Ratio Change</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Aspect Ratio Change</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noMove">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Movement</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Movement</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noResize">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Resize</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Resize</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_NonVisualDrawingProps">
+ <group>
+ <optional>
+ <element name="hlinkClick">
+ <ref name="CT_Hyperlink"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hlinkHover">
+ <ref name="CT_Hyperlink"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <attribute name="id">
+ <ref name="ST_DrawingElementId"/>
+ <xs:documentation>Unique Identifier</xs:documentation>
+ </attribute>
+ <attribute name="name">
+ <data type="string">
+ <xs:documentation>Name</xs:documentation>
+ </data>
+ <xs:documentation>Name</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="descr">
+ <data type="string">
+ <xs:documentation>Alternative Text for Object</xs:documentation>
+ </data>
+ <xs:documentation>Alternative Text for Object</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="hidden">
+ <data type="boolean">
+ <xs:documentation>Hidden</xs:documentation>
+ </data>
+ <xs:documentation>Hidden</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_NonVisualDrawingShapeProps">
+ <group>
+ <optional>
+ <element name="spLocks">
+ <ref name="CT_ShapeLocking"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="txBox">
+ <data type="boolean">
+ <xs:documentation>Text Box</xs:documentation>
+ </data>
+ <xs:documentation>Text Box</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_NonVisualConnectorProperties">
+ <optional>
+ <element name="cxnSpLocks">
+ <ref name="CT_ConnectorLocking"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="stCxn">
+ <ref name="CT_Connection"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="endCxn">
+ <ref name="CT_Connection"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_NonVisualPictureProperties">
+ <group>
+ <optional>
+ <element name="picLocks">
+ <ref name="CT_PictureLocking"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="preferRelativeResize">
+ <data type="boolean">
+ <xs:documentation>Relative Resize Preferred</xs:documentation>
+ </data>
+ <xs:documentation>Relative Resize Preferred</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_NonVisualGroupDrawingShapeProps">
+ <optional>
+ <element name="grpSpLocks">
+ <ref name="CT_GroupLocking"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_NonVisualGraphicFrameProperties">
+ <optional>
+ <element name="graphicFrameLocks">
+ <ref name="CT_GraphicalObjectFrameLocking"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </define>
+ </grammar>
+ <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="hlinkClick" tokenid="ooxml:CT_NonVisualDrawingProps_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"/>
+ </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" file="dml-graphicalObject.rng">
+ <start name="graphic"/>
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+<!-- ISO RELAX NG Schema -->
+<!-- start = graphic -->
+ <define name="CT_GraphicalObjectData">
+ <zeroOrMore>
+ <ref name="pic"/>
+ <element>
+ <anyName/>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </zeroOrMore>
+ <attribute name="uri">
+ <data type="token">
+ <xs:documentation>Uniform Resource Identifier</xs:documentation>
+ </data>
+ <xs:documentation>Uniform Resource Identifier</xs:documentation>
+ </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"/>
+ <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="dml-shapeGeometry" file="dml-shapeGeometry.rng">
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+<!-- ISO RELAX NG Schema -->
+ <include href="dml-baseTypes.rng"/>
+ <define name="ST_ShapeType">
+ <list>
+ <xs:documentation>Preset Shape Types</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_TextShapeType">
+ <list>
+ <xs:documentation>Preset Text Shape Types</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_GeomGuideName">
+ <data type="token">
+ <xs:documentation>Geometry Guide Name Properties</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_GeomGuideFormula">
+ <data type="string">
+ <xs:documentation>Geometry Guide Formula Properties</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_GeomGuide">
+ <attribute name="name">
+ <ref name="ST_GeomGuideName"/>
+ <xs:documentation>Shape Guide Name</xs:documentation>
+ </attribute>
+ <attribute name="fmla">
+ <ref name="ST_GeomGuideFormula"/>
+ <xs:documentation>Shape Guide Formula</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_GeomGuideList">
+ <zeroOrMore>
+ <element name="gd">
+ <ref name="CT_GeomGuide"/>
+ </element>
+ </zeroOrMore>
+ </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"/>
+ <xs:documentation>X-Coordinate</xs:documentation>
+ </attribute>
+ <attribute name="y">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Y-Coordinate</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_GeomRect">
+ <attribute name="l">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Left</xs:documentation>
+ </attribute>
+ <attribute name="t">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Top</xs:documentation>
+ </attribute>
+ <attribute name="r">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Right</xs:documentation>
+ </attribute>
+ <attribute name="b">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Bottom Position</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_XYAdjustHandle">
+ <element name="pos">
+ <ref name="CT_AdjPoint2D"/>
+ </element>
+ <optional>
+ <attribute name="gdRefX">
+ <ref name="ST_GeomGuideName"/>
+ <xs:documentation>Horizontal Adjustment Guide</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="minX">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Minimum Horizontal Adjustment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="maxX">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Maximum Horizontal Adjustment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="gdRefY">
+ <ref name="ST_GeomGuideName"/>
+ <xs:documentation>Vertical Adjustment Guide</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="minY">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Minimum Vertical Adjustment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="maxY">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Maximum Vertical Adjustment</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_PolarAdjustHandle">
+ <element name="pos">
+ <ref name="CT_AdjPoint2D"/>
+ </element>
+ <optional>
+ <attribute name="gdRefR">
+ <ref name="ST_GeomGuideName"/>
+ <xs:documentation>Radial Adjustment Guide</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="minR">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Minimum Radial Adjustment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="maxR">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Maximum Radial Adjustment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="gdRefAng">
+ <ref name="ST_GeomGuideName"/>
+ <xs:documentation>Angle Adjustment Guide</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="minAng">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Minimum Angle Adjustment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="maxAng">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Maximum Angle Adjustment</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_ConnectionSite">
+ <element name="pos">
+ <ref name="CT_AdjPoint2D"/>
+ </element>
+ <attribute name="ang">
+ <ref name="ST_AdjAngle"/>
+ <xs:documentation>Connection Site Angle</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_AdjustHandleList">
+ <zeroOrMore>
+ <choice>
+ <element name="ahXY">
+ <ref name="CT_XYAdjustHandle"/>
+ </element>
+ <element name="ahPolar">
+ <ref name="CT_PolarAdjustHandle"/>
+ </element>
+ </choice>
+ </zeroOrMore>
+ </define>
+ <define name="CT_ConnectionSiteList">
+ <zeroOrMore>
+ <element name="cxn">
+ <ref name="CT_ConnectionSite"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_Connection">
+ <attribute name="id">
+ <ref name="ST_DrawingElementId"/>
+ <xs:documentation>Identifier</xs:documentation>
+ </attribute>
+ <attribute name="idx">
+ <data type="unsignedInt">
+ <xs:documentation>Index</xs:documentation>
+ </data>
+ <xs:documentation>Index</xs:documentation>
+ </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"/>
+ <xs:documentation>Shape Arc Width Radius</xs:documentation>
+ </attribute>
+ <attribute name="hR">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Shape Arc Height Radius</xs:documentation>
+ </attribute>
+ <attribute name="stAng">
+ <ref name="ST_AdjAngle"/>
+ <xs:documentation>Shape Arc Start Angle</xs:documentation>
+ </attribute>
+ <attribute name="swAng">
+ <ref name="ST_AdjAngle"/>
+ <xs:documentation>Shape Arc Swing Angle</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Path2DQuadBezierTo">
+ <oneOrMore>
+ <element name="pt">
+ <ref name="CT_AdjPoint2D"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_Path2DCubicBezierTo">
+ <oneOrMore>
+ <element name="pt">
+ <ref name="CT_AdjPoint2D"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_Path2DClose">
+ <empty/>
+ </define>
+ <define name="ST_PathFillMode">
+ <list>
+ <xs:documentation>Path Fill Mode</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_Path2D">
+ <zeroOrMore>
+ <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>
+ </zeroOrMore>
+ <optional>
+ <attribute name="w">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Path Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="h">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Path Height</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fill">
+ <ref name="ST_PathFillMode"/>
+ <xs:documentation>Path Fill</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="stroke">
+ <data type="boolean">
+ <xs:documentation>Path Stroke</xs:documentation>
+ </data>
+ <xs:documentation>Path Stroke</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="extrusionOk">
+ <data type="boolean">
+ <xs:documentation>3D Extrusion Allowed</xs:documentation>
+ </data>
+ <xs:documentation>3D Extrusion Allowed</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Path2DList">
+ <zeroOrMore>
+ <element name="path">
+ <ref name="CT_Path2D"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_PresetGeometry2D">
+ <optional>
+ <element name="avLst">
+ <ref name="CT_GeomGuideList"/>
+ </element>
+ </optional>
+ <attribute name="prst">
+ <ref name="ST_ShapeType"/>
+ <xs:documentation>Preset Shape</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_PresetTextShape">
+ <optional>
+ <element name="avLst">
+ <ref name="CT_GeomGuideList"/>
+ </element>
+ </optional>
+ <attribute name="prst">
+ <ref name="ST_TextShapeType"/>
+ <xs:documentation>Preset Warp Shape</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_CustomGeometry2D">
+ <optional>
+ <element name="avLst">
+ <ref name="CT_GeomGuideList"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="gdLst">
+ <ref name="CT_GeomGuideList"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ahLst">
+ <ref name="CT_AdjustHandleList"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cxnLst">
+ <ref name="CT_ConnectionSiteList"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rect">
+ <ref name="CT_GeomRect"/>
+ </element>
+ </optional>
+ <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" generated="yes">
+ <value name="textNoShape" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textNoShape">textNoShape</value>
+ <value name="textPlain" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textPlain">textPlain</value>
+ <value name="textStop" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textStop">textStop</value>
+ <value name="textTriangle" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textTriangle">textTriangle</value>
+ <value name="textTriangleInverted" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textTriangleInverted">textTriangleInverted</value>
+ <value name="textChevron" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textChevron">textChevron</value>
+ <value name="textChevronInverted" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textChevronInverted">textChevronInverted</value>
+ <value name="textRingInside" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textRingInside">textRingInside</value>
+ <value name="textRingOutside" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textRingOutside">textRingOutside</value>
+ <value name="textArchUp" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textArchUp">textArchUp</value>
+ <value name="textArchDown" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textArchDown">textArchDown</value>
+ <value name="textCircle" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCircle">textCircle</value>
+ <value name="textButton" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textButton">textButton</value>
+ <value name="textArchUpPour" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textArchUpPour">textArchUpPour</value>
+ <value name="textArchDownPour" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textArchDownPour">textArchDownPour</value>
+ <value name="textCirclePour" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCirclePour">textCirclePour</value>
+ <value name="textButtonPour" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textButtonPour">textButtonPour</value>
+ <value name="textCurveUp" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCurveUp">textCurveUp</value>
+ <value name="textCurveDown" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCurveDown">textCurveDown</value>
+ <value name="textCanUp" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCanUp">textCanUp</value>
+ <value name="textCanDown" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCanDown">textCanDown</value>
+ <value name="textWave1" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textWave1">textWave1</value>
+ <value name="textWave2" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textWave2">textWave2</value>
+ <value name="textDoubleWave1" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDoubleWave1">textDoubleWave1</value>
+ <value name="textWave4" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textWave4">textWave4</value>
+ <value name="textInflate" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textInflate">textInflate</value>
+ <value name="textDeflate" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflate">textDeflate</value>
+ <value name="textInflateBottom" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textInflateBottom">textInflateBottom</value>
+ <value name="textDeflateBottom" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflateBottom">textDeflateBottom</value>
+ <value name="textInflateTop" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textInflateTop">textInflateTop</value>
+ <value name="textDeflateTop" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflateTop">textDeflateTop</value>
+ <value name="textDeflateInflate" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflateInflate">textDeflateInflate</value>
+ <value name="textDeflateInflateDeflate" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflateInflateDeflate">textDeflateInflateDeflate</value>
+ <value name="textFadeRight" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textFadeRight">textFadeRight</value>
+ <value name="textFadeLeft" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textFadeLeft">textFadeLeft</value>
+ <value name="textFadeUp" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textFadeUp">textFadeUp</value>
+ <value name="textFadeDown" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textFadeDown">textFadeDown</value>
+ <value name="textSlantUp" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textSlantUp">textSlantUp</value>
+ <value name="textSlantDown" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textSlantDown">textSlantDown</value>
+ <value name="textCascadeUp" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCascadeUp">textCascadeUp</value>
+ <value name="textCascadeDown" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCascadeDown">textCascadeDown</value>
+ </resource>
+ <resource name="ST_GeomGuideName" resource="String" generated="yes"/>
+ <resource name="ST_GeomGuideFormula" resource="String" generated="yes"/>
+ <resource name="CT_GeomGuideList" resource="Properties">
+ <element name="gd" tokenid="ooxml:CT_GeomGuideList_gd"/>
+ </resource>
+ <resource name="ST_PathFillMode" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_drawingml_ST_PathFillMode_none">none</value>
+ <value name="norm" tokenid="ooxml:Value_drawingml_ST_PathFillMode_norm">norm</value>
+ <value name="lighten" tokenid="ooxml:Value_drawingml_ST_PathFillMode_lighten">lighten</value>
+ <value name="lightenLess" tokenid="ooxml:Value_drawingml_ST_PathFillMode_lightenLess">lightenLess</value>
+ <value name="darken" tokenid="ooxml:Value_drawingml_ST_PathFillMode_darken">darken</value>
+ <value name="darkenLess" 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" file="dml-wordprocessingDrawing.rng">
+ <start name="inline"/>
+ <start name="anchor"/>
+ <grammar xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+<!-- ISO RELAX NG Schema -->
+ <include href="dml-graphicalObject.rng"/>
+ <include href="dml-documentProperties.rng"/>
+<!-- start = inline | anchor -->
+ <define name="CT_EffectExtent">
+ <attribute name="l">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Additional Extent on Left Edge</xs:documentation>
+ </attribute>
+ <attribute name="t">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Additional Extent on Top Edge</xs:documentation>
+ </attribute>
+ <attribute name="r">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Additional Extent on Right Edge</xs:documentation>
+ </attribute>
+ <attribute name="b">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Additional Extent on Bottom Edge</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_WrapDistance">
+ <data type="unsignedInt">
+ <xs:documentation>Distance from Text</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_Inline">
+ <group>
+ <element name="extent">
+ <ref name="CT_PositiveSize2D"/>
+ </element>
+ <optional>
+ <element name="effectExtent">
+ <ref name="CT_EffectExtent"/>
+ </element>
+ </optional>
+ <element name="docPr">
+ <ref name="CT_NonVisualDrawingProps"/>
+ </element>
+ <optional>
+ <element name="cNvGraphicFramePr">
+ <ref name="CT_NonVisualGraphicFrameProperties"/>
+ </element>
+ </optional>
+ <element name="a:graphic">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </group>
+ <optional>
+ <attribute name="distT">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Top Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distB">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Bottom Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distL">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Left Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distR">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Right Edge</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_WrapText">
+ <list>
+ <xs:documentation>Text Wrapping Location</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_WrapPath">
+ <group>
+ <element name="start">
+ <ref name="CT_Point2D"/>
+ </element>
+ <oneOrMore>
+ <element name="lineTo">
+ <ref name="CT_Point2D"/>
+ </element>
+ </oneOrMore>
+ </group>
+ <optional>
+ <attribute name="edited">
+ <data type="boolean">
+ <xs:documentation>Wrapping Points Modified</xs:documentation>
+ </data>
+ <xs:documentation>Wrapping Points Modified</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_WrapNone">
+ <empty/>
+ </define>
+ <define name="CT_WrapSquare">
+ <optional>
+ <element name="effectExtent">
+ <ref name="CT_EffectExtent"/>
+ </element>
+ </optional>
+ <attribute name="wrapText">
+ <ref name="ST_WrapText"/>
+ <xs:documentation>Text Wrapping Location</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="distT">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text (Top)</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distB">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Bottom Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distL">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Left Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distR">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Right Edge</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_WrapTight">
+ <element name="wrapPolygon">
+ <ref name="CT_WrapPath"/>
+ </element>
+ <attribute name="wrapText">
+ <ref name="ST_WrapText"/>
+ <xs:documentation>Text Wrapping Location</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="distL">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Test on Left Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distR">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Right Edge</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_WrapThrough">
+ <element name="wrapPolygon">
+ <ref name="CT_WrapPath"/>
+ </element>
+ <attribute name="wrapText">
+ <ref name="ST_WrapText"/>
+ <xs:documentation>Text Wrapping Location</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="distL">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Left Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distR">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Right Edge</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_WrapTopBottom">
+ <optional>
+ <element name="effectExtent">
+ <ref name="CT_EffectExtent"/>
+ </element>
+ </optional>
+ <optional>
+ <attribute name="distT">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Top Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distB">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Bottom Edge</xs:documentation>
+ </attribute>
+ </optional>
+ </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="CT_PositionOffset">
+ <ref name="ST_PositionOffset"/>
+ </define>
+ <define name="ST_PositionOffset">
+ <data type="int">
+ <xs:documentation>Absolute Position Offset Value</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_AlignH">
+ <ref name="ST_AlignH"/>
+ </define>
+ <define name="ST_AlignH">
+ <list>
+ <xs:documentation>Relative Horizontal Alignment Positions</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_RelFromH">
+ <list>
+ <xs:documentation>Horizontal Relative Positioning</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_PosH">
+ <choice>
+ <element name="align">
+ <ref name="CT_AlignH"/>
+ </element>
+ <element name="posOffset">
+ <ref name="CT_PositionOffset"/>
+ </element>
+ </choice>
+ <attribute name="relativeFrom">
+ <ref name="ST_RelFromH"/>
+ <xs:documentation>Horizontal Position Relative Base</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_AlignV">
+ <ref name="ST_AlignV"/>
+ </define>
+ <define name="ST_AlignV">
+ <list>
+ <xs:documentation>Vertical Alignment Definition</xs:documentation>
+ <choice>
+<!-- Top -->
+ <value>top</value>
+<!-- Bottom -->
+ <value>bottom</value>
+<!-- Center Alignment -->
+ <value>center</value>
+<!-- Inside -->
+ <value>inside</value>
+<!-- Outside -->
+ <value>outside</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_RelFromV">
+ <list>
+ <xs:documentation>Vertical Relative Positioning</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_PosV">
+ <choice>
+ <element name="align">
+ <ref name="CT_AlignV"/>
+ </element>
+ <element name="posOffset">
+ <ref name="CT_PositionOffset"/>
+ </element>
+ </choice>
+ <attribute name="relativeFrom">
+ <ref name="ST_RelFromV"/>
+ <xs:documentation>Vertical Position Relative Base</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Anchor">
+ <group>
+ <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>
+ <optional>
+ <element name="effectExtent">
+ <ref name="CT_EffectExtent"/>
+ </element>
+ </optional>
+ <ref name="EG_WrapType"/>
+ <element name="docPr">
+ <ref name="CT_NonVisualDrawingProps"/>
+ </element>
+ <optional>
+ <element name="cNvGraphicFramePr">
+ <ref name="CT_NonVisualGraphicFrameProperties"/>
+ </element>
+ </optional>
+ <element name="a:graphic">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </group>
+ <optional>
+ <attribute name="distT">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Top Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distB">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Bottom Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distL">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Left Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distR">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Right Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="simplePos">
+ <data type="boolean">
+ <xs:documentation>Page Positioning</xs:documentation>
+ </data>
+ <xs:documentation>Page Positioning</xs:documentation>
+ </attribute>
+ <attribute name="relativeHeight">
+ <data type="unsignedInt">
+ <xs:documentation>Relative Z-Ordering Position</xs:documentation>
+ </data>
+ <xs:documentation>Relative Z-Ordering Position</xs:documentation>
+ </attribute>
+ <attribute name="behindDoc">
+ <data type="boolean">
+ <xs:documentation>Display Behind Document Text</xs:documentation>
+ </data>
+ <xs:documentation>Display Behind Document Text</xs:documentation>
+ </attribute>
+ <attribute name="locked">
+ <data type="boolean">
+ <xs:documentation>Lock Anchor</xs:documentation>
+ </data>
+ <xs:documentation>Lock Anchor</xs:documentation>
+ </attribute>
+ <attribute name="layoutInCell">
+ <data type="boolean">
+ <xs:documentation>Layout In Table Cell</xs:documentation>
+ </data>
+ <xs:documentation>Layout In Table Cell</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="hidden">
+ <data type="boolean">
+ <xs:documentation>Hidden</xs:documentation>
+ </data>
+ <xs:documentation>Hidden</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="allowOverlap">
+ <data type="boolean">
+ <xs:documentation>Allow Objects to Overlap</xs:documentation>
+ </data>
+ <xs:documentation>Allow Objects to Overlap</xs:documentation>
+ </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="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" generated="yes"/>
+ <resource xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" 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"/>
+ <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"/>
+ </resource>
+ <resource name="ST_WrapText" resource="List" generated="yes">
+ <value name="bothSides" tokenid="ooxml:Value_wordprocessingDrawing_ST_WrapText_bothSides">bothSides</value>
+ <value name="left" tokenid="ooxml:Value_wordprocessingDrawing_ST_WrapText_left">left</value>
+ <value name="right" tokenid="ooxml:Value_wordprocessingDrawing_ST_WrapText_right">right</value>
+ <value name="largest" 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="Integer" generated="yes"/>
+ <resource name="CT_PositionOffset" resource="IntegerValue"/>
+ <resource name="ST_AlignH" resource="List" generated="yes">
+ <value name="left" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignH_left">left</value>
+ <value name="right" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignH_right">right</value>
+ <value name="center" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignH_center">center</value>
+ <value name="inside" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignH_inside">inside</value>
+ <value name="outside" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignH_outside">outside</value>
+ </resource>
+ <resource name="CT_AlignH" resource="ListValue"/>
+ <resource name="ST_RelFromH" resource="List" generated="yes">
+ <value name="margin" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_margin">margin</value>
+ <value name="page" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_page">page</value>
+ <value name="column" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_column">column</value>
+ <value name="character" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_character">character</value>
+ <value name="leftMargin" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_leftMargin">leftMargin</value>
+ <value name="rightMargin" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_rightMargin">rightMargin</value>
+ <value name="insideMargin" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_insideMargin">insideMargin</value>
+ <value name="outsideMargin" 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="CT_AlignV" resource="ListValue"/>
+ <resource name="ST_AlignV" resource="List" generated="yes">
+ <value name="top" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignV_top">top</value>
+ <value name="bottom" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignV_bottom">bottom</value>
+ <value name="center" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignV_center">center</value>
+ <value name="inside" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignV_inside">inside</value>
+ <value name="outside" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignV_outside">outside</value>
+ </resource>
+ <resource name="ST_RelFromV" resource="List" generated="yes">
+ <value name="margin" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_margin">margin</value>
+ <value name="page" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_page">page</value>
+ <value name="paragraph" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_paragraph">paragraph</value>
+ <value name="line" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_line">line</value>
+ <value name="topMargin" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_topMargin">topMargin</value>
+ <value name="bottomMargin" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_bottomMargin">bottomMargin</value>
+ <value name="insideMargin" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_insideMargin">insideMargin</value>
+ <value name="outsideMargin" 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 xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" 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"/>
+ <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"/>
+ </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" file="sml-customXmlMappings-rng">
+ <start name="schemaLibrary"/>
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/schemaLibrary/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+<!-- ISO RELAX NG Schema -->
+<!-- start = schemaLibrary -->
+ <define name="CT_Schema">
+ <attribute name="uri">
+ <data type="string">
+ <xs:documentation>Custom XML Schema Namespace</xs:documentation>
+ </data>
+ <xs:documentation>Custom XML Schema Namespace</xs:documentation>
+ </attribute>
+ <attribute name="manifestLocation">
+ <data type="string">
+ <xs:documentation>Resource File Location</xs:documentation>
+ </data>
+ <xs:documentation>Resource File Location</xs:documentation>
+ </attribute>
+ <attribute name="schemaLocation">
+ <data type="string">
+ <xs:documentation>Custom XML Schema Location</xs:documentation>
+ </data>
+ <xs:documentation>Custom XML Schema Location</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SchemaLibrary">
+ <zeroOrMore>
+ <element name="schema">
+ <ref name="CT_Schema"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="schemaLibrary">
+ <element name="schemaLibrary">
+ <ref name="CT_SchemaLibrary"/>
+ </element>
+ </define>
+ </grammar>
+ </namespace>
+ <namespace name="shared-math" file="shared-math.rng">
+ <start name="mathPar"/>
+ <start name="oMathPara"/>
+ <start name="oMath"/>
+ <grammar xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/officeDocument/2006/math" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" attributeFormDefault="qualified">
+<!-- ISO RELAX NG Schema -->
+ <include href="wml.rng"/>
+<!-- start = mathPr | oMathPara | oMath -->
+ <define name="ST_Integer255">
+ <data type="integer">
+ <xs:documentation>Integer value (1 to 255)</xs:documentation>
+ <param name="minInclusive">1</param>
+ <param name="maxInclusive">255</param>
+ </data>
+ </define>
+ <define name="CT_Integer255">
+ <attribute name="val">
+ <ref name="ST_Integer255"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Integer2">
+ <data type="integer">
+ <xs:documentation>Integer value (-2 to 2)</xs:documentation>
+ <param name="minInclusive">-2</param>
+ <param name="maxInclusive">2</param>
+ </data>
+ </define>
+ <define name="CT_Integer2">
+ <attribute name="val">
+ <ref name="ST_Integer2"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_SpacingRule">
+ <data type="integer">
+ <xs:documentation>Spacing Rule</xs:documentation>
+ <param name="minInclusive">0</param>
+ <param name="maxInclusive">4</param>
+ </data>
+ </define>
+ <define name="CT_SpacingRule">
+ <attribute name="val">
+ <ref name="ST_SpacingRule"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_UnSignedInteger">
+ <data type="unsignedInt">
+ <xs:documentation>Unsigned integer.</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_UnSignedInteger">
+ <attribute name="val">
+ <ref name="ST_UnSignedInteger"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Char">
+ <data type="string">
+ <xs:documentation>Character</xs:documentation>
+ <param name="maxLength">1</param>
+ </data>
+ </define>
+ <define name="CT_Char">
+ <attribute name="val">
+ <ref name="ST_Char"/>
+ <xs:documentation>value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_OnOff">
+ <list>
+ <xs:documentation>On Off</xs:documentation>
+ <choice>
+<!-- On -->
+ <value>on</value>
+<!-- Off -->
+ <value>off</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_OnOff">
+ <attribute name="val">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_String">
+ <data type="string">
+ <xs:documentation>String</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_String">
+ <attribute name="val">
+ <ref name="ST_String"/>
+ <xs:documentation>value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_XAlign">
+ <list>
+ <xs:documentation>Horizontal Alignment</xs:documentation>
+ <choice>
+<!-- Left Justification -->
+ <value>left</value>
+<!-- Center -->
+ <value>center</value>
+<!-- Right -->
+ <value>right</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_XAlign">
+ <attribute name="val">
+ <ref name="ST_XAlign"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_YAlign">
+ <list>
+ <xs:documentation>Vertical Alignment</xs:documentation>
+ <choice>
+<!-- Top -->
+ <value>top</value>
+<!-- Center (Function) -->
+ <value>center</value>
+<!-- Bottom Alignment -->
+ <value>bot</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_YAlign">
+ <attribute name="val">
+ <ref name="ST_YAlign"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Shp">
+ <list>
+ <xs:documentation>Shape (Delimiters)</xs:documentation>
+ <choice>
+<!-- Centered (Delimiters) -->
+ <value>centered</value>
+<!-- Match -->
+ <value>match</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Shp">
+ <attribute name="val">
+ <ref name="ST_Shp"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_FType">
+ <list>
+ <xs:documentation>Fraction Type</xs:documentation>
+ <choice>
+<!-- Bar Fraction -->
+ <value>bar</value>
+<!-- Skewed -->
+ <value>skw</value>
+<!-- Linear Fraction -->
+ <value>lin</value>
+<!-- No-Bar Fraction (Stack) -->
+ <value>noBar</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_FType">
+ <attribute name="val">
+ <ref name="ST_FType"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_LimLoc">
+ <list>
+ <xs:documentation>Limit Location</xs:documentation>
+ <choice>
+<!-- Under-Over location -->
+ <value>undOvr</value>
+<!-- Subscript-Superscript location -->
+ <value>subSup</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_LimLoc">
+ <attribute name="val">
+ <ref name="ST_LimLoc"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_TopBot">
+ <list>
+ <xs:documentation>Top-Bottom</xs:documentation>
+ <choice>
+<!-- Top -->
+ <value>top</value>
+<!-- Bottom Alignment -->
+ <value>bot</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_TopBot">
+ <attribute name="val">
+ <ref name="ST_TopBot"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Script">
+ <list>
+ <xs:documentation>Script</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_Script">
+ <attribute name="val">
+ <ref name="ST_Script"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Style">
+ <list>
+ <xs:documentation>Style</xs:documentation>
+ <choice>
+<!-- Plain -->
+ <value>p</value>
+<!-- Bold -->
+ <value>b</value>
+<!-- Italic -->
+ <value>i</value>
+<!-- Bold-Italic -->
+ <value>bi</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Style">
+ <attribute name="val">
+ <ref name="ST_Style"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_ManualBreak">
+ <attribute name="alnAt">
+ <ref name="ST_Integer255"/>
+ <xs:documentation>Index of Operator to Align To</xs:documentation>
+ </attribute>
+ </define>
+ <define name="EG_ScriptStyle">
+ <optional>
+ <element name="scr">
+ <ref name="CT_Script"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sty">
+ <ref name="CT_Style"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_RPR">
+ <optional>
+ <element name="lit">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <choice>
+ <optional>
+ <element name="nor">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <ref name="EG_ScriptStyle"/>
+ </choice>
+ <optional>
+ <element name="brk">
+ <ref name="CT_ManualBreak"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="aln">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Text">
+ <ref name="ST_String"/>
+ <optional>
+ <attribute name="xml:space">
+ <text/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_R">
+ <optional>
+ <element name="rPr">
+ <ref name="CT_RPR"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_RPr"/>
+ </optional>
+ <zeroOrMore>
+ <choice>
+ <ref name="EG_RunInnerContent"/>
+ <optional>
+ <element name="t">
+ <ref name="CT_Text"/>
+ </element>
+ </optional>
+ </choice>
+ </zeroOrMore>
+ </define>
+ <define name="CT_CtrlPr">
+ <optional>
+ <ref name="EG_RPrMath"/>
+ </optional>
+ </define>
+ <define name="CT_AccPr">
+ <optional>
+ <element name="chr">
+ <ref name="CT_Char"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Acc">
+ <optional>
+ <element name="accPr">
+ <ref name="CT_AccPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_BarPr">
+ <optional>
+ <element name="pos">
+ <ref name="CT_TopBot"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Bar">
+ <optional>
+ <element name="barPr">
+ <ref name="CT_BarPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_BoxPr">
+ <optional>
+ <element name="opEmu">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noBreak">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="diff">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="brk">
+ <ref name="CT_ManualBreak"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="aln">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Box">
+ <optional>
+ <element name="boxPr">
+ <ref name="CT_BoxPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_BorderBoxPr">
+ <optional>
+ <element name="hideTop">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hideBot">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hideLeft">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hideRight">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="strikeH">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="strikeV">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="strikeBLTR">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="strikeTLBR">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_BorderBox">
+ <optional>
+ <element name="borderBoxPr">
+ <ref name="CT_BorderBoxPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_DPr">
+ <optional>
+ <element name="begChr">
+ <ref name="CT_Char"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sepChr">
+ <ref name="CT_Char"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="endChr">
+ <ref name="CT_Char"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="grow">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="shp">
+ <ref name="CT_Shp"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_D">
+ <optional>
+ <element name="dPr">
+ <ref name="CT_DPr"/>
+ </element>
+ </optional>
+ <oneOrMore>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_EqArrPr">
+ <optional>
+ <element name="baseJc">
+ <ref name="CT_YAlign"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="maxDist">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="objDist">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rSpRule">
+ <ref name="CT_SpacingRule"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rSp">
+ <ref name="CT_UnSignedInteger"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_EqArr">
+ <optional>
+ <element name="eqArrPr">
+ <ref name="CT_EqArrPr"/>
+ </element>
+ </optional>
+ <oneOrMore>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_FPr">
+ <optional>
+ <element name="type">
+ <ref name="CT_FType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_F">
+ <optional>
+ <element name="fPr">
+ <ref name="CT_FPr"/>
+ </element>
+ </optional>
+ <element name="num">
+ <ref name="CT_OMathArg"/>
+ </element>
+ <element name="den">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_FuncPr">
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Func">
+ <optional>
+ <element name="funcPr">
+ <ref name="CT_FuncPr"/>
+ </element>
+ </optional>
+ <element name="fName">
+ <ref name="CT_OMathArg"/>
+ </element>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_GroupChrPr">
+ <optional>
+ <element name="chr">
+ <ref name="CT_Char"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pos">
+ <ref name="CT_TopBot"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="vertJc">
+ <ref name="CT_TopBot"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_GroupChr">
+ <optional>
+ <element name="groupChrPr">
+ <ref name="CT_GroupChrPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_LimLowPr">
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_LimLow">
+ <optional>
+ <element name="limLowPr">
+ <ref name="CT_LimLowPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ <element name="lim">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_LimUppPr">
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_LimUpp">
+ <optional>
+ <element name="limUppPr">
+ <ref name="CT_LimUppPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ <element name="lim">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_MCPr">
+ <optional>
+ <element name="count">
+ <ref name="CT_Integer255"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="mcJc">
+ <ref name="CT_XAlign"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_MC">
+ <optional>
+ <element name="mcPr">
+ <ref name="CT_MCPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_MCS">
+ <oneOrMore>
+ <element name="mc">
+ <ref name="CT_MC"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_MPr">
+ <optional>
+ <element name="baseJc">
+ <ref name="CT_YAlign"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="plcHide">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rSpRule">
+ <ref name="CT_SpacingRule"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cGpRule">
+ <ref name="CT_SpacingRule"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rSp">
+ <ref name="CT_UnSignedInteger"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cSp">
+ <ref name="CT_UnSignedInteger"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cGp">
+ <ref name="CT_UnSignedInteger"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="mcs">
+ <ref name="CT_MCS"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_MR">
+ <oneOrMore>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_M">
+ <optional>
+ <element name="mPr">
+ <ref name="CT_MPr"/>
+ </element>
+ </optional>
+ <oneOrMore>
+ <element name="mr">
+ <ref name="CT_MR"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_NaryPr">
+ <optional>
+ <element name="chr">
+ <ref name="CT_Char"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="limLoc">
+ <ref name="CT_LimLoc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="grow">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="subHide">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="supHide">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Nary">
+ <optional>
+ <element name="naryPr">
+ <ref name="CT_NaryPr"/>
+ </element>
+ </optional>
+ <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">
+ <optional>
+ <element name="show">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="zeroWid">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="zeroAsc">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="zeroDesc">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="transp">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Phant">
+ <optional>
+ <element name="phantPr">
+ <ref name="CT_PhantPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_RadPr">
+ <optional>
+ <element name="degHide">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Rad">
+ <optional>
+ <element name="radPr">
+ <ref name="CT_RadPr"/>
+ </element>
+ </optional>
+ <element name="deg">
+ <ref name="CT_OMathArg"/>
+ </element>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_SPrePr">
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_SPre">
+ <optional>
+ <element name="sPrePr">
+ <ref name="CT_SPrePr"/>
+ </element>
+ </optional>
+ <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">
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_SSub">
+ <optional>
+ <element name="sSubPr">
+ <ref name="CT_SSubPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ <element name="sub">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_SSubSupPr">
+ <optional>
+ <element name="alnScr">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_SSubSup">
+ <optional>
+ <element name="sSubSupPr">
+ <ref name="CT_SSubSupPr"/>
+ </element>
+ </optional>
+ <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">
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_SSup">
+ <optional>
+ <element name="sSupPr">
+ <ref name="CT_SSupPr"/>
+ </element>
+ </optional>
+ <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">
+ <optional>
+ <element name="argSz">
+ <ref name="CT_Integer2"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_OMathArg">
+ <optional>
+ <element name="argPr">
+ <ref name="CT_OMathArgPr"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_OMathElements"/>
+ </zeroOrMore>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_Jc">
+ <list>
+ <xs:documentation>Justification</xs:documentation>
+ <choice>
+<!-- Left Justification -->
+ <value>left</value>
+<!-- Right -->
+ <value>right</value>
+<!-- Center (Equation) -->
+ <value>center</value>
+<!-- Centered as Group (Equations) -->
+ <value>centerGroup</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_OMathJc">
+ <attribute name="val">
+ <ref name="ST_Jc"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_OMathParaPr">
+ <optional>
+ <element name="jc">
+ <ref name="CT_OMathJc"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_TwipsMeasure">
+ <data type="unsignedInt">
+ <xs:documentation>Twips measurement</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_TwipsMeasure">
+ <attribute name="val">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_BreakBin">
+ <list>
+ <xs:documentation>Break Binary Operators</xs:documentation>
+ <choice>
+<!-- Before -->
+ <value>before</value>
+<!-- After -->
+ <value>after</value>
+<!-- Repeat -->
+ <value>repeat</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_BreakBin">
+ <attribute name="val">
+ <ref name="ST_BreakBin"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_BreakBinSub">
+ <list>
+ <xs:documentation>Break on Binary Subtraction</xs:documentation>
+ <choice>
+<!-- Minus Minus -->
+ <value>--</value>
+<!-- Minus Plus -->
+ <value>-+</value>
+<!-- Plus Minus -->
+ <value>+-</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_BreakBinSub">
+ <attribute name="val">
+ <ref name="ST_BreakBinSub"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_MathPr">
+ <optional>
+ <element name="mathFont">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="brkBin">
+ <ref name="CT_BreakBin"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="brkBinSub">
+ <ref name="CT_BreakBinSub"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="smallFrac">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="dispDef">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lMargin">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rMargin">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="defJc">
+ <ref name="CT_OMathJc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="preSp">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="postSp">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="interSp">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="intraSp">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <choice>
+ <element name="wrapIndent">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ <element name="wrapRight">
+ <ref name="CT_OnOff"/>
+ </element>
+ </choice>
+ </optional>
+ <optional>
+ <element name="intLim">
+ <ref name="CT_LimLoc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="naryLim">
+ <ref name="CT_LimLoc"/>
+ </element>
+ </optional>
+ </define>
+ <define name="mathPr">
+ <element name="mathPr">
+ <ref name="CT_MathPr"/>
+ </element>
+ </define>
+ <define name="CT_OMathPara">
+ <optional>
+ <element name="oMathParaPr">
+ <ref name="CT_OMathParaPr"/>
+ </element>
+ </optional>
+ <oneOrMore>
+ <element name="oMath">
+ <ref name="CT_OMath"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_OMath">
+ <zeroOrMore>
+ <ref name="EG_OMathElements"/>
+ </zeroOrMore>
+ </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>
+ </grammar>
+ <resource name="ST_Integer255" resource="Integer" generated="yes"/>
+ <resource name="ST_Integer2" resource="Integer" generated="yes"/>
+ <resource name="ST_SpacingRule" resource="Integer" generated="yes"/>
+ <resource name="ST_UnSignedInteger" resource="Integer" generated="yes"/>
+ <resource name="ST_Char" resource="String" generated="yes"/>
+ <resource name="ST_OnOff" resource="List" generated="yes">
+ <value name="on" tokenid="ooxml:Value_math_ST_OnOff_on">on</value>
+ <value name="off" tokenid="ooxml:Value_math_ST_OnOff_off">off</value>
+ </resource>
+ <resource name="CT_OnOff" resource="BooleanValue"/>
+ <resource name="ST_String" resource="String" generated="yes"/>
+ <resource name="ST_XAlign" resource="List" generated="yes">
+ <value name="left" tokenid="ooxml:Value_math_ST_XAlign_left">left</value>
+ <value name="center" tokenid="ooxml:Value_math_ST_XAlign_center">center</value>
+ <value name="right" tokenid="ooxml:Value_math_ST_XAlign_right">right</value>
+ </resource>
+ <resource name="ST_YAlign" resource="List" generated="yes">
+ <value name="top" tokenid="ooxml:Value_math_ST_YAlign_top">top</value>
+ <value name="center" tokenid="ooxml:Value_math_ST_YAlign_center">center</value>
+ <value name="bot" tokenid="ooxml:Value_math_ST_YAlign_bot">bot</value>
+ </resource>
+ <resource name="ST_Shp" resource="List" generated="yes">
+ <value name="centered" tokenid="ooxml:Value_math_ST_Shp_centered">centered</value>
+ <value name="match" tokenid="ooxml:Value_math_ST_Shp_match">match</value>
+ </resource>
+ <resource name="ST_FType" resource="List" generated="yes">
+ <value name="bar" tokenid="ooxml:Value_math_ST_FType_bar">bar</value>
+ <value name="skw" tokenid="ooxml:Value_math_ST_FType_skw">skw</value>
+ <value name="lin" tokenid="ooxml:Value_math_ST_FType_lin">lin</value>
+ <value name="noBar" tokenid="ooxml:Value_math_ST_FType_noBar">noBar</value>
+ </resource>
+ <resource name="ST_LimLoc" resource="List" generated="yes">
+ <value name="undOvr" tokenid="ooxml:Value_math_ST_LimLoc_undOvr">undOvr</value>
+ <value name="subSup" tokenid="ooxml:Value_math_ST_LimLoc_subSup">subSup</value>
+ </resource>
+ <resource name="ST_TopBot" resource="List" generated="yes">
+ <value name="top" tokenid="ooxml:Value_math_ST_TopBot_top">top</value>
+ <value name="bot" tokenid="ooxml:Value_math_ST_TopBot_bot">bot</value>
+ </resource>
+ <resource name="ST_Script" resource="List" generated="yes">
+ <value name="roman" tokenid="ooxml:Value_math_ST_Script_roman">roman</value>
+ <value name="script" tokenid="ooxml:Value_math_ST_Script_script">script</value>
+ <value name="fraktur" tokenid="ooxml:Value_math_ST_Script_fraktur">fraktur</value>
+ <value name="doublemstruck" tokenid="ooxml:Value_math_ST_Script_doublemstruck">double-struck</value>
+ <value name="sansmserif" tokenid="ooxml:Value_math_ST_Script_sansmserif">sans-serif</value>
+ <value name="monospace" tokenid="ooxml:Value_math_ST_Script_monospace">monospace</value>
+ </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="ListValue"/>
+ <resource name="ST_Jc" resource="List" generated="yes">
+ <value name="left" tokenid="ooxml:Value_math_ST_Jc_left">left</value>
+ <value name="right" tokenid="ooxml:Value_math_ST_Jc_right">right</value>
+ <value name="center" tokenid="ooxml:Value_math_ST_Jc_center">center</value>
+ <value name="centerGroup" tokenid="ooxml:Value_math_ST_Jc_centerGroup">centerGroup</value>
+ </resource>
+ <resource name="ST_TwipsMeasure" resource="Integer" generated="yes"/>
+ <resource name="ST_BreakBin" resource="List" generated="yes">
+ <value name="before" tokenid="ooxml:Value_math_ST_BreakBin_before">before</value>
+ <value name="after" tokenid="ooxml:Value_math_ST_BreakBin_after">after</value>
+ <value name="repeat" tokenid="ooxml:Value_math_ST_BreakBin_repeat">repeat</value>
+ </resource>
+ <resource name="ST_BreakBinSub" resource="List" generated="yes">
+ <value name="mm" tokenid="ooxml:Value_math_ST_BreakBinSub_mm">--</value>
+ <value name="mp" tokenid="ooxml:Value_math_ST_BreakBinSub_mp">-+</value>
+ <value name="pm" tokenid="ooxml:Value_math_ST_BreakBinSub_pm">+-</value>
+ </resource>
+ </namespace>
+ <namespace name="shared-relationshipReference" file="shared-relationshipReference.rng">
+ <grammar xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" ns="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
+<!-- ISO RELAX NG Schema -->
+ <define name="ST_RelationshipId">
+ <data type="string">
+ <xs:documentation>Explicit Relationship ID</xs:documentation>
+ </data>
+ </define>
+ <define name="id">
+ <attribute name="id">
+ <text/>
+ <xs:documentation>Relationship ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="embed">
+ <attribute name="embed">
+ <text/>
+ <xs:documentation>Embedded Image Relationship Target</xs:documentation>
+ </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">
+ <text/>
+ <xs:documentation>Hyperlink Target Relationship ID</xs:documentation>
+ </attribute>
+ </define>
+ </grammar>
+ <resource name="ST_RelationshipId" resource="String" generated="yes"/>
+ </namespace>
+ <namespace name="dml-chartDrawing" file="dml-chartDrawing.rng">
+ <start name="pic"/>
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/picture">
+<!-- ISO RELAX NG Schema -->
+ <include href="dml-shapeProperties.rng"/>
+ <include href="dml-documentProperties.rng"/>
+<!-- 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>
+ </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>
+ </namespace>
+ <namespace name="vml-main" file="vml-main.rng">
+ <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:o="urn:schemas-microsoft-com:office:office" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wvml="urn:schemas-microsoft-com:office:word" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" xmlns:rng="http://relaxng.org/ns/structure/1.0" ns="urn:schemas-microsoft-com:vml" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+<!-- ISO RELAX NG Schema -->
+ <include href="vml-officeDrawing.rng"/>
+<!-- External schema: http://schemas.openxmlformats.org/wordprocessingml/2006/main -->
+ <include href="vml-wordprocessingDrawing.rng"/>
+<!-- External schema: http://schemas.openxmlformats.org/officeDocument/2006/relationships -->
+ <include href="vml-spreadsheetDrawing.rng"/>
+ <include href="vml-presentationDrawing.rng"/>
+<!-- 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">
+ <optional>
+ <attribute name="id">
+ <data type="string">
+ <xs:documentation>Unique Identifier</xs:documentation>
+ </data>
+ <xs:documentation>Unique Identifier</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="AG_Style">
+ <optional>
+ <attribute name="style">
+ <data type="string">
+ <xs:documentation>Shape Styling Properties</xs:documentation>
+ </data>
+ <xs:documentation>Shape Styling Properties</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="AG_Type">
+ <optional>
+ <attribute name="type">
+ <data type="string">
+ <xs:documentation>Shape Type Reference</xs:documentation>
+ </data>
+ <xs:documentation>Shape Type Reference</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="AG_Adj">
+ <optional>
+ <attribute name="adj">
+ <data type="string">
+ <xs:documentation>Adjustment Parameters</xs:documentation>
+ </data>
+ <xs:documentation>Adjustment Parameters</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="AG_Path">
+ <optional>
+ <attribute name="path">
+ <data type="string">
+ <xs:documentation>Edge Path</xs:documentation>
+ </data>
+ <xs:documentation>Edge Path</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="AG_Fill">
+ <optional>
+ <attribute name="filled">
+ <text/>
+ <xs:documentation>Shape Fill Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fillcolor">
+ <text/>
+ <xs:documentation>Fill Color</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="AG_Chromakey">
+ <optional>
+ <attribute name="chromakey">
+ <text/>
+ <xs:documentation>Image Transparency Color</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="AG_Ext">
+ <attribute name="ext">
+ <text/>
+ <xs:documentation>VML Extension Handling Behavior</xs:documentation>
+ </attribute>
+ </define>
+ <define name="AG_CoreAttributes">
+ <ref name="AG_Id"/>
+ <ref name="AG_Style"/>
+ <optional>
+ <attribute name="href">
+ <data type="string">
+ <xs:documentation>Hyperlink Target</xs:documentation>
+ </data>
+ <xs:documentation>Hyperlink Target</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="target">
+ <data type="string">
+ <xs:documentation>Hyperlink Display Target</xs:documentation>
+ </data>
+ <xs:documentation>Hyperlink Display Target</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="class">
+ <data type="string">
+ <xs:documentation>CSS Reference</xs:documentation>
+ </data>
+ <xs:documentation>CSS Reference</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="title">
+ <data type="string">
+ <xs:documentation>Shape Title</xs:documentation>
+ </data>
+ <xs:documentation>Shape Title</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="alt">
+ <data type="string">
+ <xs:documentation>Alternate Text</xs:documentation>
+ </data>
+ <xs:documentation>Alternate Text</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="coordsize">
+ <data type="string">
+ <xs:documentation>Coordinate Space Size</xs:documentation>
+ </data>
+ <xs:documentation>Coordinate Space Size</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="coordorigin">
+ <data type="string">
+ <xs:documentation>Coordinate Space Origin</xs:documentation>
+ </data>
+ <xs:documentation>Coordinate Space Origin</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="wrapcoords">
+ <data type="string">
+ <xs:documentation>Shape Bounding Polygon</xs:documentation>
+ </data>
+ <xs:documentation>Shape Bounding Polygon</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="print">
+ <text/>
+ <xs:documentation>Print Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="AG_ShapeAttributes">
+ <ref name="AG_Chromakey"/>
+ <ref name="AG_Fill"/>
+ <optional>
+ <attribute name="opacity">
+ <data type="string">
+ <xs:documentation>Fill Color Opacity</xs:documentation>
+ </data>
+ <xs:documentation>Fill Color Opacity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="stroked">
+ <text/>
+ <xs:documentation>Shape Stroke Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="strokecolor">
+ <text/>
+ <xs:documentation>Shape Stroke Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="strokeweight">
+ <data type="string">
+ <xs:documentation>Shape Stroke Weight</xs:documentation>
+ </data>
+ <xs:documentation>Shape Stroke Weight</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="insetpen">
+ <text/>
+ <xs:documentation>Inset Border From Path</xs:documentation>
+ </attribute>
+ </optional>
+ </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">
+ <optional>
+ <attribute name="src">
+ <data type="string">
+ <xs:documentation>Image Source</xs:documentation>
+ </data>
+ <xs:documentation>Image Source</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="cropleft">
+ <data type="string">
+ <xs:documentation>Image Left Crop</xs:documentation>
+ </data>
+ <xs:documentation>Image Left Crop</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="croptop">
+ <data type="string">
+ <xs:documentation>Image Top Crop</xs:documentation>
+ </data>
+ <xs:documentation>Image Top Crop</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="cropright">
+ <data type="string">
+ <xs:documentation>Image Right Crop</xs:documentation>
+ </data>
+ <xs:documentation>Image Right Crop</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="cropbottom">
+ <data type="string">
+ <xs:documentation>Image Bottom Crop</xs:documentation>
+ </data>
+ <xs:documentation>Image Bottom Crop</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="gain">
+ <data type="string">
+ <xs:documentation>Image Intensity</xs:documentation>
+ </data>
+ <xs:documentation>Image Intensity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="blacklevel">
+ <data type="string">
+ <xs:documentation>Image Brightness</xs:documentation>
+ </data>
+ <xs:documentation>Image Brightness</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="gamma">
+ <data type="string">
+ <xs:documentation>Image Gamma Correction</xs:documentation>
+ </data>
+ <xs:documentation>Image Gamma Correction</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="grayscale">
+ <text/>
+ <xs:documentation>Image Grayscale Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="bilevel">
+ <text/>
+ <xs:documentation>Image Bilevel Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="AG_StrokeAttributes">
+ <optional>
+ <attribute name="on">
+ <text/>
+ <xs:documentation>Stroke Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="weight">
+ <data type="string">
+ <xs:documentation>Stroke Weight</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Weight</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="color">
+ <text/>
+ <xs:documentation>Stroke Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="opacity">
+ <data type="string">
+ <xs:documentation>Stroke Opacity</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Opacity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="linestyle">
+ <text/>
+ <xs:documentation>Stroke Line Style</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="miterlimit">
+ <data type="decimal">
+ <xs:documentation>Miter Joint Limit</xs:documentation>
+ </data>
+ <xs:documentation>Miter Joint Limit</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="joinstyle">
+ <text/>
+ <xs:documentation>Line End Join Style</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endcap">
+ <text/>
+ <xs:documentation>Line End Cap</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dashstyle">
+ <data type="string">
+ <xs:documentation>Stroke Dash Pattern</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Dash Pattern</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="filltype">
+ <text/>
+ <xs:documentation>Stroke Image Style</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="src">
+ <data type="string">
+ <xs:documentation>Stroke Image Location</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Image Location</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="imageaspect">
+ <text/>
+ <xs:documentation>Stroke Image Aspect Ratio</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="imagesize">
+ <data type="string">
+ <xs:documentation>Stroke Image Size</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Image Size</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="imagealignshape">
+ <text/>
+ <xs:documentation>Stoke Image Alignment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="color2">
+ <text/>
+ <xs:documentation>Stroke Alternate Pattern Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="startarrow">
+ <text/>
+ <xs:documentation>Line Start Arrowhead</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="startarrowwidth">
+ <text/>
+ <xs:documentation>Line Start Arrowhead Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="startarrowlength">
+ <text/>
+ <xs:documentation>Line Start Arrowhead Length</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endarrow">
+ <text/>
+ <xs:documentation>Line End Arrowhead</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endarrowwidth">
+ <text/>
+ <xs:documentation>Line End Arrowhead Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endarrowlength">
+ <text/>
+ <xs:documentation>Line End Arrowhead Length</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="o:href"/>
+ <attribute name="o:althref"/>
+ <attribute name="o:title"/>
+ <attribute name="o:forcedash"/>
+ <optional>
+ <attribute name="r:id"/>
+ </optional>
+ <optional>
+ <attribute name="insetpen">
+ <text/>
+ <xs:documentation>Inset Border From Path</xs:documentation>
+ </attribute>
+ </optional>
+ <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>
+ <optional>
+ <element name="x:ClientData">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="p:textdata">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ </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">
+ <oneOrMore>
+ <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>
+ </oneOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_AllShapeAttributes"/>
+ <ref name="AG_Type"/>
+ <ref name="AG_Adj"/>
+ <ref name="AG_Path"/>
+ <attribute name="o:gfxdata"/>
+ <optional>
+ <attribute name="equationxml">
+ <data type="string">
+ <xs:documentation>Storage for Alternate Math Content</xs:documentation>
+ </data>
+ <xs:documentation>Storage for Alternate Math Content</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Shapetype">
+ <group>
+ <zeroOrMore>
+ <ref name="EG_ShapeElements"/>
+ </zeroOrMore>
+ <optional>
+ <element name="o:complex">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ </group>
+ <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">
+ <oneOrMore>
+ <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>
+ </oneOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_Fill"/>
+ <optional>
+ <attribute name="editas">
+ <text/>
+ <xs:documentation>Group Diagram Type</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="o:tableproperties"/>
+ <attribute name="o:tablelimits"/>
+ </define>
+ <define name="CT_Background">
+ <optional>
+ <ref name="fill"/>
+ </optional>
+ <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">
+ <optional>
+ <element name="o:fill">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <ref name="AG_Id"/>
+ <optional>
+ <attribute name="type">
+ <text/>
+ <xs:documentation>Fill Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="on">
+ <text/>
+ <xs:documentation>Fill Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="color">
+ <text/>
+ <xs:documentation>Primary Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="opacity">
+ <data type="string">
+ <xs:documentation>Primary Color Opacity</xs:documentation>
+ </data>
+ <xs:documentation>Primary Color Opacity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="color2">
+ <text/>
+ <xs:documentation>Secondary Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="src">
+ <data type="string">
+ <xs:documentation>Fill Image Source</xs:documentation>
+ </data>
+ <xs:documentation>Fill Image Source</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="o:href"/>
+ <attribute name="o:althref"/>
+ <optional>
+ <attribute name="size">
+ <data type="string">
+ <xs:documentation>Fill Image Size</xs:documentation>
+ </data>
+ <xs:documentation>Fill Image Size</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="origin">
+ <data type="string">
+ <xs:documentation>Fill Image Origin</xs:documentation>
+ </data>
+ <xs:documentation>Fill Image Origin</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="position">
+ <data type="string">
+ <xs:documentation>Fill Image Position</xs:documentation>
+ </data>
+ <xs:documentation>Fill Image Position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="aspect">
+ <text/>
+ <xs:documentation>Image Aspect Ratio</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="colors">
+ <data type="string">
+ <xs:documentation>Intermediate Colors</xs:documentation>
+ </data>
+ <xs:documentation>Intermediate Colors</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="angle">
+ <data type="decimal">
+ <xs:documentation>Gradient Angle</xs:documentation>
+ </data>
+ <xs:documentation>Gradient Angle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="alignshape">
+ <text/>
+ <xs:documentation>Align Image With Shape</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="focus">
+ <data type="string">
+ <xs:documentation>Gradient Center</xs:documentation>
+ </data>
+ <xs:documentation>Gradient Center</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="focussize">
+ <data type="string">
+ <xs:documentation>Radial Gradient Size</xs:documentation>
+ </data>
+ <xs:documentation>Radial Gradient Size</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="focusposition">
+ <data type="string">
+ <xs:documentation>Radial Gradient Center</xs:documentation>
+ </data>
+ <xs:documentation>Radial Gradient Center</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="method">
+ <text/>
+ <xs:documentation>Gradient Fill Method</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="o:detectmouseclick"/>
+ <attribute name="o:title"/>
+ <attribute name="o:opacity2"/>
+ <optional>
+ <attribute name="recolor">
+ <text/>
+ <xs:documentation>Recolor Fill as Picture</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rotate">
+ <text/>
+ <xs:documentation>Rotate Fill with Shape</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="r:id"/>
+ </optional>
+ <optional>
+ <attribute name="o:relid"/>
+ </optional>
+ </define>
+ <define name="CT_Formulas">
+ <zeroOrMore>
+ <element name="f">
+ <ref name="CT_F"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_F">
+ <attribute name="eqn">
+ <data type="string">
+ <xs:documentation>Equation</xs:documentation>
+ </data>
+ <xs:documentation>Equation</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Handles">
+ <zeroOrMore>
+ <element name="h">
+ <ref name="CT_H"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_H">
+ <attribute name="position">
+ <data type="string">
+ <xs:documentation>Handle Position</xs:documentation>
+ </data>
+ <xs:documentation>Handle Position</xs:documentation>
+ </attribute>
+ <attribute name="polar">
+ <data type="string">
+ <xs:documentation>Handle Polar Center</xs:documentation>
+ </data>
+ <xs:documentation>Handle Polar Center</xs:documentation>
+ </attribute>
+ <attribute name="map">
+ <data type="string">
+ <xs:documentation>Handle Coordinate Mapping</xs:documentation>
+ </data>
+ <xs:documentation>Handle Coordinate Mapping</xs:documentation>
+ </attribute>
+ <attribute name="invx">
+ <text/>
+ <xs:documentation>Invert Handle's X Position</xs:documentation>
+ </attribute>
+ <attribute name="invy">
+ <text/>
+ <xs:documentation>Invert Handle's Y Position</xs:documentation>
+ </attribute>
+ <attribute name="switch">
+ <text/>
+ <xs:documentation>Handle Inversion Toggle</xs:documentation>
+ </attribute>
+ <attribute name="xrange">
+ <data type="string">
+ <xs:documentation>Handle X Position Range</xs:documentation>
+ </data>
+ <xs:documentation>Handle X Position Range</xs:documentation>
+ </attribute>
+ <attribute name="yrange">
+ <data type="string">
+ <xs:documentation>Handle Y Position Range</xs:documentation>
+ </data>
+ <xs:documentation>Handle Y Position Range</xs:documentation>
+ </attribute>
+ <attribute name="radiusrange">
+ <data type="string">
+ <xs:documentation>Handle Polar Radius Range</xs:documentation>
+ </data>
+ <xs:documentation>Handle Polar Radius Range</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_ImageData">
+ <ref name="AG_Id"/>
+ <ref name="AG_ImageAttributes"/>
+ <ref name="AG_Chromakey"/>
+ <optional>
+ <attribute name="embosscolor">
+ <text/>
+ <xs:documentation>Embossed Color</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="recolortarget">
+ <text/>
+ <xs:documentation>Black Recoloring Color</xs:documentation>
+ </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"/>
+ <optional>
+ <attribute name="v">
+ <data type="string">
+ <xs:documentation>Path Definition</xs:documentation>
+ </data>
+ <xs:documentation>Path Definition</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="limo">
+ <data type="string">
+ <xs:documentation>Limo Stretch Point</xs:documentation>
+ </data>
+ <xs:documentation>Limo Stretch Point</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="textboxrect">
+ <data type="string">
+ <xs:documentation>Text Box Bounding Box</xs:documentation>
+ </data>
+ <xs:documentation>Text Box Bounding Box</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fillok">
+ <text/>
+ <xs:documentation>Shape Fill Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="strokeok">
+ <text/>
+ <xs:documentation>Stroke Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="shadowok">
+ <text/>
+ <xs:documentation>Shadow Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="arrowok">
+ <text/>
+ <xs:documentation>Arrowhead Display Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="gradientshapeok">
+ <text/>
+ <xs:documentation>Gradient Shape Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="textpathok">
+ <text/>
+ <xs:documentation>Text Path Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="insetpenok">
+ <text/>
+ <xs:documentation>Inset Stroke From Path Flag</xs:documentation>
+ </attribute>
+ </optional>
+ <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"/>
+ <optional>
+ <attribute name="on">
+ <text/>
+ <xs:documentation>Shadow Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="type">
+ <text/>
+ <xs:documentation>Shadow Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="obscured">
+ <text/>
+ <xs:documentation>Shadow Transparency</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="color">
+ <text/>
+ <xs:documentation>Shadow Primary Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="opacity">
+ <data type="string">
+ <xs:documentation>Shadow Opacity</xs:documentation>
+ </data>
+ <xs:documentation>Shadow Opacity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="offset">
+ <data type="string">
+ <xs:documentation>Shadow Primary Offset</xs:documentation>
+ </data>
+ <xs:documentation>Shadow Primary Offset</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="color2">
+ <text/>
+ <xs:documentation>Shadow Secondary Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="offset2">
+ <data type="string">
+ <xs:documentation>Shadow Secondary Offset</xs:documentation>
+ </data>
+ <xs:documentation>Shadow Secondary Offset</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="origin">
+ <data type="string">
+ <xs:documentation>Shadow Origin</xs:documentation>
+ </data>
+ <xs:documentation>Shadow Origin</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="matrix">
+ <data type="string">
+ <xs:documentation>Shadow Perspective Matrix</xs:documentation>
+ </data>
+ <xs:documentation>Shadow Perspective Matrix</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Stroke">
+ <group>
+ <optional>
+ <element name="o:left">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="o:top">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="o:right">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="o:bottom">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="o:column">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ </group>
+ <ref name="AG_Id"/>
+ <ref name="AG_StrokeAttributes"/>
+ </define>
+ <define name="CT_Textbox">
+ <choice>
+ <optional>
+ <element name="w:txbxContent">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <element>
+ <anyName/>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </choice>
+ <ref name="AG_Id"/>
+ <ref name="AG_Style"/>
+ <optional>
+ <attribute name="inset">
+ <data type="string">
+ <xs:documentation>Text Box Inset</xs:documentation>
+ </data>
+ <xs:documentation>Text Box Inset</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="o:singleclick"/>
+ <attribute name="o:insetmode"/>
+ </define>
+ <define name="CT_TextPath">
+ <ref name="AG_Id"/>
+ <ref name="AG_Style"/>
+ <optional>
+ <attribute name="on">
+ <text/>
+ <xs:documentation>Text Path Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fitshape">
+ <text/>
+ <xs:documentation>Shape Fit Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fitpath">
+ <text/>
+ <xs:documentation>Path Fit Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="trim">
+ <text/>
+ <xs:documentation>Text Path Trim Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="xscale">
+ <text/>
+ <xs:documentation>Text X-Scaling</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="string">
+ <data type="string">
+ <xs:documentation>Text Path Text</xs:documentation>
+ </data>
+ <xs:documentation>Text Path Text</xs:documentation>
+ </attribute>
+ </optional>
+ </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">
+ <zeroOrMore>
+ <ref name="EG_ShapeElements"/>
+ </zeroOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_AllShapeAttributes"/>
+ <optional>
+ <attribute name="startAngle">
+ <data type="decimal">
+ <xs:documentation>Starting Angle</xs:documentation>
+ </data>
+ <xs:documentation>Starting Angle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endAngle">
+ <data type="decimal">
+ <xs:documentation>Ending Angle</xs:documentation>
+ </data>
+ <xs:documentation>Ending Angle</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Curve">
+ <zeroOrMore>
+ <ref name="EG_ShapeElements"/>
+ </zeroOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_AllShapeAttributes"/>
+ <optional>
+ <attribute name="from">
+ <data type="string">
+ <xs:documentation>Curve Starting Point</xs:documentation>
+ </data>
+ <xs:documentation>Curve Starting Point</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="control1">
+ <data type="string">
+ <xs:documentation>First Curve Control Point</xs:documentation>
+ </data>
+ <xs:documentation>First Curve Control Point</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="control2">
+ <data type="string">
+ <xs:documentation>Second Curve Control Point</xs:documentation>
+ </data>
+ <xs:documentation>Second Curve Control Point</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="to">
+ <data type="string">
+ <xs:documentation>Curve Ending Point</xs:documentation>
+ </data>
+ <xs:documentation>Curve Ending Point</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Image">
+ <zeroOrMore>
+ <ref name="EG_ShapeElements"/>
+ </zeroOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_AllShapeAttributes"/>
+ <ref name="AG_ImageAttributes"/>
+ </define>
+ <define name="CT_Line">
+ <zeroOrMore>
+ <ref name="EG_ShapeElements"/>
+ </zeroOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_AllShapeAttributes"/>
+ <optional>
+ <attribute name="from">
+ <data type="string">
+ <xs:documentation>Line Start</xs:documentation>
+ </data>
+ <xs:documentation>Line Start</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="to">
+ <data type="string">
+ <xs:documentation>Line End Point</xs:documentation>
+ </data>
+ <xs:documentation>Line End Point</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Oval">
+ <oneOrMore>
+ <zeroOrMore>
+ <ref name="EG_ShapeElements"/>
+ </zeroOrMore>
+ </oneOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_AllShapeAttributes"/>
+ </define>
+ <define name="CT_PolyLine">
+ <zeroOrMore>
+ <choice>
+ <ref name="EG_ShapeElements"/>
+ <element name="o:ink">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </choice>
+ </zeroOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_AllShapeAttributes"/>
+ <optional>
+ <attribute name="points">
+ <data type="string">
+ <xs:documentation>Points for Compound Line</xs:documentation>
+ </data>
+ <xs:documentation>Points for Compound Line</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Rect">
+ <oneOrMore>
+ <zeroOrMore>
+ <ref name="EG_ShapeElements"/>
+ </zeroOrMore>
+ </oneOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_AllShapeAttributes"/>
+ </define>
+ <define name="CT_RoundRect">
+ <oneOrMore>
+ <zeroOrMore>
+ <ref name="EG_ShapeElements"/>
+ </zeroOrMore>
+ </oneOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_AllShapeAttributes"/>
+ <optional>
+ <attribute name="arcsize">
+ <data type="string">
+ <xs:documentation>Rounded Corner Arc Size</xs:documentation>
+ </data>
+ <xs:documentation>Rounded Corner Arc Size</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_Ext">
+ <list>
+ <xs:documentation>VML Extension Handling Behaviors</xs:documentation>
+ <choice>
+<!-- Not renderable -->
+ <value>view</value>
+<!-- Editable -->
+ <value>edit</value>
+<!-- Renderable -->
+ <value>backwardCompatible</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_TrueFalse">
+ <list>
+ <xs:documentation>Boolean Value</xs:documentation>
+ <choice>
+<!-- True -->
+ <value>t</value>
+<!-- False -->
+ <value>f</value>
+<!-- True -->
+ <value>true</value>
+<!-- False -->
+ <value>false</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ColorType">
+ <data type="string">
+ <xs:documentation>Color Type</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_FillType">
+ <list>
+ <xs:documentation>Shape Fill Type</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_FillMethod">
+ <list>
+ <xs:documentation>Gradient Fill Computation Type</xs:documentation>
+ <choice>
+<!-- No Gradient Fill -->
+ <value>none</value>
+<!-- Linear Fill -->
+ <value>linear</value>
+<!-- Sigma Fill -->
+ <value>sigma</value>
+<!-- Application Default Fill -->
+ <value>any</value>
+<!-- Linear Sigma Fill -->
+ <value>linear sigma</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ShadowType">
+ <list>
+ <xs:documentation>Shadow Type</xs:documentation>
+ <choice>
+<!-- Single Shadow -->
+ <value>single</value>
+<!-- Double Shadow -->
+ <value>double</value>
+<!-- Embossed Shadow -->
+ <value>emboss</value>
+<!-- Perspective Shadow -->
+ <value>perspective</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_StrokeLineStyle">
+ <list>
+ <xs:documentation>Stroke Line Style</xs:documentation>
+ <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>
+<!-- Thck Line Between Thin Lines -->
+ <value>thickBetweenThin</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_StrokeJoinStyle">
+ <list>
+ <xs:documentation>Line Join Type</xs:documentation>
+ <choice>
+<!-- Round Joint -->
+ <value>round</value>
+<!-- Bevel Joint -->
+ <value>bevel</value>
+<!-- Miter Joint -->
+ <value>miter</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_StrokeEndCap">
+ <list>
+ <xs:documentation>Stroke End Cap Type</xs:documentation>
+ <choice>
+<!-- Flat End -->
+ <value>flat</value>
+<!-- Square End -->
+ <value>square</value>
+<!-- Round End -->
+ <value>round</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_StrokeArrowLength">
+ <list>
+ <xs:documentation>Stroke Arrowhead Length</xs:documentation>
+ <choice>
+<!-- Short Arrowhead -->
+ <value>short</value>
+<!-- Medium Arrowhead -->
+ <value>medium</value>
+<!-- Long Arrowhead -->
+ <value>long</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_StrokeArrowWidth">
+ <list>
+ <xs:documentation>Stroke Arrowhead Width</xs:documentation>
+ <choice>
+<!-- Narrow Arrowhead -->
+ <value>narrow</value>
+<!-- Medium Arrowhead -->
+ <value>medium</value>
+<!-- Wide Arrowhead -->
+ <value>wide</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_StrokeArrowType">
+ <list>
+ <xs:documentation>Stroke Arrowhead Type</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_ImageAspect">
+ <list>
+ <xs:documentation>Image Scaling Behavior</xs:documentation>
+ <choice>
+<!-- Ignore Aspect Ratio -->
+ <value>ignore</value>
+<!-- At Most -->
+ <value>atMost</value>
+<!-- At Least -->
+ <value>atLeast</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_TrueFalseBlank">
+ <list>
+ <xs:documentation>Boolean Value with Blank [False] State</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_EditAs">
+ <list>
+ <xs:documentation>Shape Grouping Types</xs:documentation>
+ <choice>
+<!-- Shape Canvas -->
+ <value>canvas</value>
+<!-- Organization Chart Diagram -->
+ <value>orgchart</value>
+<!-- Radial Diagram -->
+ <value>radial</value>
+<!-- Cycle Diagram -->
+ <value>cycle</value>
+<!-- Pyramid Diagram -->
+ <value>stacked</value>
+<!-- Venn Diagram -->
+ <value>venn</value>
+<!-- Bullseye Diagram -->
+ <value>bullseye</value>
+ </choice>
+ </list>
+ </define>
+ <define name="BUILT_IN_ANY_TYPE">
+ <zeroOrMore>
+ <choice>
+ <element>
+ <anyName/>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ </choice>
+ </zeroOrMore>
+ </define>
+ </grammar>
+ <resource name="ST_Ext" resource="List" generated="yes">
+ <value name="view" tokenid="ooxml:Value_vml_ST_Ext_view">view</value>
+ <value name="edit" tokenid="ooxml:Value_vml_ST_Ext_edit">edit</value>
+ <value name="backwardCompatible" tokenid="ooxml:Value_vml_ST_Ext_backwardCompatible">backwardCompatible</value>
+ </resource>
+ <resource name="ST_TrueFalse" resource="List" generated="yes">
+ <value name="t" tokenid="ooxml:Value_vml_ST_TrueFalse_t">t</value>
+ <value name="f" tokenid="ooxml:Value_vml_ST_TrueFalse_f">f</value>
+ <value name="true" tokenid="ooxml:Value_vml_ST_TrueFalse_true">true</value>
+ <value name="false" tokenid="ooxml:Value_vml_ST_TrueFalse_false">false</value>
+ </resource>
+ <resource name="ST_ColorType" resource="String" generated="yes"/>
+ <resource name="ST_FillType" resource="List" generated="yes">
+ <value name="solid" tokenid="ooxml:Value_vml_ST_FillType_solid">solid</value>
+ <value name="gradient" tokenid="ooxml:Value_vml_ST_FillType_gradient">gradient</value>
+ <value name="gradientRadial" tokenid="ooxml:Value_vml_ST_FillType_gradientRadial">gradientRadial</value>
+ <value name="tile" tokenid="ooxml:Value_vml_ST_FillType_tile">tile</value>
+ <value name="pattern" tokenid="ooxml:Value_vml_ST_FillType_pattern">pattern</value>
+ <value name="frame" tokenid="ooxml:Value_vml_ST_FillType_frame">frame</value>
+ </resource>
+ <resource name="ST_FillMethod" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_vml_ST_FillMethod_none">none</value>
+ <value name="linear" tokenid="ooxml:Value_vml_ST_FillMethod_linear">linear</value>
+ <value name="sigma" tokenid="ooxml:Value_vml_ST_FillMethod_sigma">sigma</value>
+ <value name="any" tokenid="ooxml:Value_vml_ST_FillMethod_any">any</value>
+ <value name="linear_sigma" tokenid="ooxml:Value_vml_ST_FillMethod_linear_sigma">linear sigma</value>
+ </resource>
+ <resource name="ST_ShadowType" resource="List" generated="yes">
+ <value name="single" tokenid="ooxml:Value_vml_ST_ShadowType_single">single</value>
+ <value name="double" tokenid="ooxml:Value_vml_ST_ShadowType_double">double</value>
+ <value name="emboss" tokenid="ooxml:Value_vml_ST_ShadowType_emboss">emboss</value>
+ <value name="perspective" tokenid="ooxml:Value_vml_ST_ShadowType_perspective">perspective</value>
+ </resource>
+ <resource name="ST_StrokeLineStyle" resource="List" generated="yes">
+ <value name="single" tokenid="ooxml:Value_vml_ST_StrokeLineStyle_single">single</value>
+ <value name="thinThin" tokenid="ooxml:Value_vml_ST_StrokeLineStyle_thinThin">thinThin</value>
+ <value name="thinThick" tokenid="ooxml:Value_vml_ST_StrokeLineStyle_thinThick">thinThick</value>
+ <value name="thickThin" tokenid="ooxml:Value_vml_ST_StrokeLineStyle_thickThin">thickThin</value>
+ <value name="thickBetweenThin" tokenid="ooxml:Value_vml_ST_StrokeLineStyle_thickBetweenThin">thickBetweenThin</value>
+ </resource>
+ <resource name="ST_StrokeJoinStyle" resource="List" generated="yes">
+ <value name="round" tokenid="ooxml:Value_vml_ST_StrokeJoinStyle_round">round</value>
+ <value name="bevel" tokenid="ooxml:Value_vml_ST_StrokeJoinStyle_bevel">bevel</value>
+ <value name="miter" tokenid="ooxml:Value_vml_ST_StrokeJoinStyle_miter">miter</value>
+ </resource>
+ <resource name="ST_StrokeEndCap" resource="List" generated="yes">
+ <value name="flat" tokenid="ooxml:Value_vml_ST_StrokeEndCap_flat">flat</value>
+ <value name="square" tokenid="ooxml:Value_vml_ST_StrokeEndCap_square">square</value>
+ <value name="round" tokenid="ooxml:Value_vml_ST_StrokeEndCap_round">round</value>
+ </resource>
+ <resource name="ST_StrokeArrowLength" resource="List" generated="yes">
+ <value name="short" tokenid="ooxml:Value_vml_ST_StrokeArrowLength_short">short</value>
+ <value name="medium" tokenid="ooxml:Value_vml_ST_StrokeArrowLength_medium">medium</value>
+ <value name="long" tokenid="ooxml:Value_vml_ST_StrokeArrowLength_long">long</value>
+ </resource>
+ <resource name="ST_StrokeArrowWidth" resource="List" generated="yes">
+ <value name="narrow" tokenid="ooxml:Value_vml_ST_StrokeArrowWidth_narrow">narrow</value>
+ <value name="medium" tokenid="ooxml:Value_vml_ST_StrokeArrowWidth_medium">medium</value>
+ <value name="wide" tokenid="ooxml:Value_vml_ST_StrokeArrowWidth_wide">wide</value>
+ </resource>
+ <resource name="ST_StrokeArrowType" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_vml_ST_StrokeArrowType_none">none</value>
+ <value name="block" tokenid="ooxml:Value_vml_ST_StrokeArrowType_block">block</value>
+ <value name="classic" tokenid="ooxml:Value_vml_ST_StrokeArrowType_classic">classic</value>
+ <value name="oval" tokenid="ooxml:Value_vml_ST_StrokeArrowType_oval">oval</value>
+ <value name="diamond" tokenid="ooxml:Value_vml_ST_StrokeArrowType_diamond">diamond</value>
+ <value name="open" tokenid="ooxml:Value_vml_ST_StrokeArrowType_open">open</value>
+ </resource>
+ <resource name="ST_ImageAspect" resource="List" generated="yes">
+ <value name="ignore" tokenid="ooxml:Value_vml_ST_ImageAspect_ignore">ignore</value>
+ <value name="atMost" tokenid="ooxml:Value_vml_ST_ImageAspect_atMost">atMost</value>
+ <value name="atLeast" tokenid="ooxml:Value_vml_ST_ImageAspect_atLeast">atLeast</value>
+ </resource>
+ <resource name="ST_TrueFalseBlank" resource="List" generated="yes">
+ <value name="t" tokenid="ooxml:Value_vml_ST_TrueFalseBlank_t">t</value>
+ <value name="f" tokenid="ooxml:Value_vml_ST_TrueFalseBlank_f">f</value>
+ <value name="true" tokenid="ooxml:Value_vml_ST_TrueFalseBlank_true">true</value>
+ <value name="false" tokenid="ooxml:Value_vml_ST_TrueFalseBlank_false">false</value>
+ <value name="" tokenid="ooxml:Value_vml_ST_TrueFalseBlank_"/>
+ </resource>
+ <resource name="ST_EditAs" resource="List" generated="yes">
+ <value name="canvas" tokenid="ooxml:Value_vml_ST_EditAs_canvas">canvas</value>
+ <value name="orgchart" tokenid="ooxml:Value_vml_ST_EditAs_orgchart">orgchart</value>
+ <value name="radial" tokenid="ooxml:Value_vml_ST_EditAs_radial">radial</value>
+ <value name="cycle" tokenid="ooxml:Value_vml_ST_EditAs_cycle">cycle</value>
+ <value name="stacked" tokenid="ooxml:Value_vml_ST_EditAs_stacked">stacked</value>
+ <value name="venn" tokenid="ooxml:Value_vml_ST_EditAs_venn">venn</value>
+ <value name="bullseye" tokenid="ooxml:Value_vml_ST_EditAs_bullseye">bullseye</value>
+ </resource>
+ </namespace>
+ <namespace name="vml-officeDrawing" file="vml-officeDrawing.rng">
+ <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:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns:v="urn:schemas-microsoft-com:vml" xmlns="http://relaxng.org/ns/structure/1.0" xmlns:rng="http://relaxng.org/ns/structure/1.0" ns="urn:schemas-microsoft-com:office:office" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+<!-- ISO RELAX NG Schema -->
+ <include href="vml-main.rng"/>
+<!-- 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">
+ <optional>
+ <interleave>
+ <optional>
+ <element name="v:fill">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="v:stroke">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="v:textbox">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="v:shadow">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="skew"/>
+ </optional>
+ <optional>
+ <ref name="extrusion"/>
+ </optional>
+ <optional>
+ <ref name="callout"/>
+ <xs:documentation>Callout</xs:documentation>
+ </optional>
+ <optional>
+ <ref name="lock"/>
+ <xs:documentation>Shape Protections</xs:documentation>
+ </optional>
+ <optional>
+ <element name="colormru">
+ <ref name="CT_ColorMru"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="colormenu">
+ <ref name="CT_ColorMenu"/>
+ </element>
+ </optional>
+ </interleave>
+ </optional>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <optional>
+ <attribute name="spidmax">
+ <data type="integer">
+ <xs:documentation>Shape ID Optional Storage</xs:documentation>
+ </data>
+ <xs:documentation>Shape ID Optional Storage</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="style">
+ <data type="string">
+ <xs:documentation>Shape Styling Properties</xs:documentation>
+ </data>
+ <xs:documentation>Shape Styling Properties</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fill">
+ <text/>
+ <xs:documentation>Shape Fill Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fillcolor">
+ <text/>
+ <xs:documentation>Default Fill Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="stroke">
+ <text/>
+ <xs:documentation>Shape Stroke Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="strokecolor">
+ <text/>
+ <xs:documentation>Shape Stroke Color</xs:documentation>
+ </attribute>
+ <attribute name="allowincell">
+ <text/>
+ <xs:documentation>Allow in Table Cell</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Ink">
+ <empty/>
+ <attribute name="i">
+ <data type="base64Binary">
+ <xs:documentation>Ink Data</xs:documentation>
+ </data>
+ <xs:documentation>Ink Data</xs:documentation>
+ </attribute>
+ <attribute name="annotation">
+ <text/>
+ <xs:documentation>Annotation Flag</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SignatureLine">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <attribute name="issignatureline">
+ <text/>
+ <xs:documentation>Signature Line Flag</xs:documentation>
+ </attribute>
+ <attribute name="id">
+ <text/>
+ <xs:documentation>Unique ID</xs:documentation>
+ </attribute>
+ <attribute name="provid">
+ <text/>
+ <xs:documentation>Signature Provider ID</xs:documentation>
+ </attribute>
+ <attribute name="signinginstructionsset">
+ <text/>
+ <xs:documentation>Use Signing Instructions Flag</xs:documentation>
+ </attribute>
+ <attribute name="allowcomments">
+ <text/>
+ <xs:documentation>User-specified Comments Flag</xs:documentation>
+ </attribute>
+ <attribute name="showsigndate">
+ <text/>
+ <xs:documentation>Show Signed Date Flag</xs:documentation>
+ </attribute>
+ <attribute name="suggestedsigner">
+ <data type="string">
+ <xs:documentation>Suggested Signer Line 1</xs:documentation>
+ </data>
+ <xs:documentation>Suggested Signer Line 1</xs:documentation>
+ </attribute>
+ <attribute name="suggestedsigner2">
+ <data type="string">
+ <xs:documentation>Suggested Signer Line 2</xs:documentation>
+ </data>
+ <xs:documentation>Suggested Signer Line 2</xs:documentation>
+ </attribute>
+ <attribute name="suggestedsigneremail">
+ <data type="string">
+ <xs:documentation>Suggested Signer E-mail Address</xs:documentation>
+ </data>
+ <xs:documentation>Suggested Signer E-mail Address</xs:documentation>
+ </attribute>
+ <attribute name="signinginstructions">
+ <data type="string">
+ <xs:documentation>Instructions for Signing</xs:documentation>
+ </data>
+ <xs:documentation>Instructions for Signing</xs:documentation>
+ </attribute>
+ <attribute name="addlxml">
+ <data type="string">
+ <xs:documentation>Additional Signature Information</xs:documentation>
+ </data>
+ <xs:documentation>Additional Signature Information</xs:documentation>
+ </attribute>
+ <attribute name="sigprovurl">
+ <data type="string">
+ <xs:documentation>Signature Provider Download URL</xs:documentation>
+ </data>
+ <xs:documentation>Signature Provider Download URL</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_ShapeLayout">
+ <interleave>
+ <optional>
+ <element name="idmap">
+ <ref name="CT_IdMap"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="regrouptable">
+ <ref name="CT_RegroupTable"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rules">
+ <ref name="CT_Rules"/>
+ </element>
+ </optional>
+ </interleave>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </define>
+ <define name="CT_IdMap">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <optional>
+ <attribute name="data">
+ <data type="string">
+ <xs:documentation>Shape IDs</xs:documentation>
+ </data>
+ <xs:documentation>Shape IDs</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_RegroupTable">
+ <zeroOrMore>
+ <element name="entry">
+ <ref name="CT_Entry"/>
+ </element>
+ </zeroOrMore>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </define>
+ <define name="CT_Entry">
+ <optional>
+ <attribute name="new">
+ <data type="int">
+ <xs:documentation>New Group ID</xs:documentation>
+ </data>
+ <xs:documentation>New Group ID</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="old">
+ <data type="int">
+ <xs:documentation>Old Group ID</xs:documentation>
+ </data>
+ <xs:documentation>Old Group ID</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Rules">
+ <zeroOrMore>
+ <element name="r">
+ <ref name="CT_R"/>
+ </element>
+ </zeroOrMore>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </define>
+ <define name="CT_R">
+ <zeroOrMore>
+ <element name="proxy">
+ <ref name="CT_Proxy"/>
+ </element>
+ </zeroOrMore>
+ <attribute name="id">
+ <data type="string">
+ <xs:documentation>Rule ID</xs:documentation>
+ </data>
+ <xs:documentation>Rule ID</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="type">
+ <text/>
+ <xs:documentation>Rule Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="how">
+ <text/>
+ <xs:documentation>Alignment Rule Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="idref">
+ <data type="string">
+ <xs:documentation>Rule Shape Reference</xs:documentation>
+ </data>
+ <xs:documentation>Rule Shape Reference</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Proxy">
+ <optional>
+ <attribute name="start">
+ <text/>
+ <xs:documentation>Start Point Connection Flag</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="end">
+ <text/>
+ <xs:documentation>End Point Connection Flag</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="idref">
+ <data type="string">
+ <xs:documentation>Proxy Shape Reference</xs:documentation>
+ </data>
+ <xs:documentation>Proxy Shape Reference</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="connectloc">
+ <data type="int">
+ <xs:documentation>Connection Location</xs:documentation>
+ </data>
+ <xs:documentation>Connection Location</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Diagram">
+ <optional>
+ <element name="relationtable">
+ <ref name="CT_RelationTable"/>
+ </element>
+ </optional>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <optional>
+ <attribute name="dgmstyle">
+ <data type="integer">
+ <xs:documentation>Diagram Style Options</xs:documentation>
+ </data>
+ <xs:documentation>Diagram Style Options</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="autoformat">
+ <text/>
+ <xs:documentation>Diagram Automatic Format</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="reverse">
+ <text/>
+ <xs:documentation>Diagram Reverse Direction</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="autolayout">
+ <text/>
+ <xs:documentation>Diagram Automatic Layout</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dgmscalex">
+ <data type="integer">
+ <xs:documentation>Diagram Layout X Scale</xs:documentation>
+ </data>
+ <xs:documentation>Diagram Layout X Scale</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dgmscaley">
+ <data type="integer">
+ <xs:documentation>Diagram Layout Y Scale</xs:documentation>
+ </data>
+ <xs:documentation>Diagram Layout Y Scale</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dgmfontsize">
+ <data type="integer">
+ <xs:documentation>Diagram Font Size</xs:documentation>
+ </data>
+ <xs:documentation>Diagram Font Size</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="constrainbounds">
+ <data type="string">
+ <xs:documentation>Diagram Layout Extents</xs:documentation>
+ </data>
+ <xs:documentation>Diagram Layout Extents</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dgmbasetextscale">
+ <data type="integer">
+ <xs:documentation>Diagram Base Font Size</xs:documentation>
+ </data>
+ <xs:documentation>Diagram Base Font Size</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_RelationTable">
+ <zeroOrMore>
+ <element name="rel">
+ <ref name="CT_Relation"/>
+ </element>
+ </zeroOrMore>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </define>
+ <define name="CT_Relation">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <optional>
+ <attribute name="idsrc">
+ <data type="string">
+ <xs:documentation>Diagram Relationship Source Shape</xs:documentation>
+ </data>
+ <xs:documentation>Diagram Relationship Source Shape</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="iddest">
+ <data type="string">
+ <xs:documentation>Diagram Relationship Destination Shape</xs:documentation>
+ </data>
+ <xs:documentation>Diagram Relationship Destination Shape</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="idcntr">
+ <data type="string">
+ <xs:documentation>Diagram Relationship Center Shape</xs:documentation>
+ </data>
+ <xs:documentation>Diagram Relationship Center Shape</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_ColorMru">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <attribute name="colors">
+ <data type="string">
+ <xs:documentation>Recent colors</xs:documentation>
+ </data>
+ <xs:documentation>Recent colors</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_ColorMenu">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <attribute name="strokecolor">
+ <text/>
+ <xs:documentation>Default stroke color</xs:documentation>
+ </attribute>
+ <attribute name="fillcolor">
+ <text/>
+ <xs:documentation>Default fill color</xs:documentation>
+ </attribute>
+ <attribute name="shadowcolor">
+ <text/>
+ <xs:documentation>Default shadow color</xs:documentation>
+ </attribute>
+ <attribute name="extrusioncolor">
+ <text/>
+ <xs:documentation>Default extrusion color</xs:documentation>
+ </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"/>
+ <optional>
+ <attribute name="id">
+ <data type="string">
+ <xs:documentation>Skew ID</xs:documentation>
+ </data>
+ <xs:documentation>Skew ID</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="on">
+ <text/>
+ <xs:documentation>Skew Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="offset">
+ <data type="string">
+ <xs:documentation>Skew Offset</xs:documentation>
+ </data>
+ <xs:documentation>Skew Offset</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="origin">
+ <data type="string">
+ <xs:documentation>Skew Origin</xs:documentation>
+ </data>
+ <xs:documentation>Skew Origin</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="matrix">
+ <data type="string">
+ <xs:documentation>Skew Perspective Matrix</xs:documentation>
+ </data>
+ <xs:documentation>Skew Perspective Matrix</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Extrusion">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <optional>
+ <attribute name="on">
+ <text/>
+ <xs:documentation>Extrusion Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="type">
+ <text/>
+ <xs:documentation>Extrusion Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="render">
+ <text/>
+ <xs:documentation>Extrusion Render Mode</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="viewpointorigin">
+ <data type="string">
+ <xs:documentation>Extrusion Viewpoint Origin</xs:documentation>
+ </data>
+ <xs:documentation>Extrusion Viewpoint Origin</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="viewpoint">
+ <data type="string">
+ <xs:documentation>Extrusion Viewpoint</xs:documentation>
+ </data>
+ <xs:documentation>Extrusion Viewpoint</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="plane">
+ <text/>
+ <xs:documentation>Extrusion Direction</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="skewangle">
+ <data type="float">
+ <xs:documentation>Extrusion Skew Angle</xs:documentation>
+ </data>
+ <xs:documentation>Extrusion Skew Angle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="skewamt">
+ <data type="string">
+ <xs:documentation>Extrusion Skew</xs:documentation>
+ </data>
+ <xs:documentation>Extrusion Skew</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="foredepth">
+ <data type="string">
+ <xs:documentation>Forward Extrusion</xs:documentation>
+ </data>
+ <xs:documentation>Forward Extrusion</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="backdepth">
+ <data type="string">
+ <xs:documentation>Backward Extrusion Depth</xs:documentation>
+ </data>
+ <xs:documentation>Backward Extrusion Depth</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="orientation">
+ <data type="string">
+ <xs:documentation>Rotation Axis</xs:documentation>
+ </data>
+ <xs:documentation>Rotation Axis</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="orientationangle">
+ <data type="float">
+ <xs:documentation>Rotation Around Axis</xs:documentation>
+ </data>
+ <xs:documentation>Rotation Around Axis</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lockrotationcenter">
+ <text/>
+ <xs:documentation>Rotation Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="autorotationcenter">
+ <text/>
+ <xs:documentation>Center of Rotation Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rotationcenter">
+ <data type="string">
+ <xs:documentation>Rotation Center</xs:documentation>
+ </data>
+ <xs:documentation>Rotation Center</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rotationangle">
+ <data type="string">
+ <xs:documentation>X-Y Rotation Angle</xs:documentation>
+ </data>
+ <xs:documentation>X-Y Rotation Angle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="colormode">
+ <text/>
+ <xs:documentation>Extrusion Color Mode</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="color">
+ <text/>
+ <xs:documentation>Extrusion Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="shininess">
+ <data type="float">
+ <xs:documentation>Shininess</xs:documentation>
+ </data>
+ <xs:documentation>Shininess</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="specularity">
+ <data type="string">
+ <xs:documentation>Specularity</xs:documentation>
+ </data>
+ <xs:documentation>Specularity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="diffusity">
+ <data type="string">
+ <xs:documentation>Diffuse Reflection</xs:documentation>
+ </data>
+ <xs:documentation>Diffuse Reflection</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="metal">
+ <text/>
+ <xs:documentation>Metallic Surface Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="edge">
+ <data type="string">
+ <xs:documentation>Simulated Bevel</xs:documentation>
+ </data>
+ <xs:documentation>Simulated Bevel</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="facet">
+ <data type="string">
+ <xs:documentation>Faceting Quality</xs:documentation>
+ </data>
+ <xs:documentation>Faceting Quality</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lightface">
+ <text/>
+ <xs:documentation>Shape Face Lighting Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="brightness">
+ <data type="string">
+ <xs:documentation>Brightness</xs:documentation>
+ </data>
+ <xs:documentation>Brightness</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lightposition">
+ <data type="string">
+ <xs:documentation>Primary Light Position</xs:documentation>
+ </data>
+ <xs:documentation>Primary Light Position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lightlevel">
+ <data type="string">
+ <xs:documentation>Primary Light Intensity</xs:documentation>
+ </data>
+ <xs:documentation>Primary Light Intensity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lightharsh">
+ <text/>
+ <xs:documentation>Primary Light Harshness Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lightposition2">
+ <data type="string">
+ <xs:documentation>Secondary Light Position</xs:documentation>
+ </data>
+ <xs:documentation>Secondary Light Position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lightlevel2">
+ <data type="string">
+ <xs:documentation>Secondary Light Intensity</xs:documentation>
+ </data>
+ <xs:documentation>Secondary Light Intensity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lightharsh2">
+ <text/>
+ <xs:documentation>Secondary Light Harshness Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Callout">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <optional>
+ <attribute name="on">
+ <text/>
+ <xs:documentation>Callout toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="type">
+ <data type="string">
+ <xs:documentation>Callout type</xs:documentation>
+ </data>
+ <xs:documentation>Callout type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="gap">
+ <data type="string">
+ <xs:documentation>Callout gap</xs:documentation>
+ </data>
+ <xs:documentation>Callout gap</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="angle">
+ <text/>
+ <xs:documentation>Callout angle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dropauto">
+ <text/>
+ <xs:documentation>Callout automatic drop toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="drop">
+ <text/>
+ <xs:documentation>Callout drop position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distance">
+ <data type="string">
+ <xs:documentation>Callout drop distance</xs:documentation>
+ </data>
+ <xs:documentation>Callout drop distance</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lengthspecified">
+ <text/>
+ <xs:documentation>Callout length toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="length">
+ <data type="string">
+ <xs:documentation>Callout length</xs:documentation>
+ </data>
+ <xs:documentation>Callout length</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="accentbar">
+ <text/>
+ <xs:documentation>Callout accent bar toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="textborder">
+ <text/>
+ <xs:documentation>Callout text border toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="minusx">
+ <text/>
+ <xs:documentation>Callout flip x</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="minusy">
+ <text/>
+ <xs:documentation>Callout flip y</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Lock">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <optional>
+ <attribute name="position">
+ <text/>
+ <xs:documentation>Position Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="selection">
+ <text/>
+ <xs:documentation>Selection Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="grouping">
+ <text/>
+ <xs:documentation>Grouping Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ungrouping">
+ <text/>
+ <xs:documentation>Ungrouping Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rotation">
+ <text/>
+ <xs:documentation>Rotation Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="cropping">
+ <text/>
+ <xs:documentation>Cropping Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="verticies">
+ <text/>
+ <xs:documentation>Vertices Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="adjusthandles">
+ <text/>
+ <xs:documentation>Handles Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="text">
+ <text/>
+ <xs:documentation>Text Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="aspectratio">
+ <text/>
+ <xs:documentation>Aspect Ratio Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="shapetype">
+ <text/>
+ <xs:documentation>AutoShape Type Lock</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_OLEObject">
+ <group>
+ <optional>
+ <element name="LinkType">
+ <ref name="ST_OLELinkType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="LockedField">
+ <ref name="ST_TrueFalseBlank"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="FieldCodes">
+ <data type="string">
+ <xs:documentation>WordprocessingML Field Switches</xs:documentation>
+ </data>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="Type">
+ <text/>
+ <xs:documentation>OLE Object Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ProgID">
+ <data type="string">
+ <xs:documentation>OLE Object Application</xs:documentation>
+ </data>
+ <xs:documentation>OLE Object Application</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ShapeID">
+ <data type="string">
+ <xs:documentation>OLE Object Shape</xs:documentation>
+ </data>
+ <xs:documentation>OLE Object Shape</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="DrawAspect">
+ <text/>
+ <xs:documentation>OLE Object Representation</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ObjectID">
+ <data type="string">
+ <xs:documentation>OLE Object Unique ID</xs:documentation>
+ </data>
+ <xs:documentation>OLE Object Unique ID</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="r:id">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="UpdateMode">
+ <text/>
+ <xs:documentation>OLE Update Mode</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Complex">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </define>
+ <define name="CT_StrokeChild">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <optional>
+ <attribute name="on">
+ <text/>
+ <xs:documentation>Stroke Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="weight">
+ <data type="string">
+ <xs:documentation>Stroke Weight</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Weight</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="color">
+ <text/>
+ <xs:documentation>Stroke Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="color2">
+ <text/>
+ <xs:documentation>Stroke Alternate Pattern Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="opacity">
+ <data type="string">
+ <xs:documentation>Stroke Opacity</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Opacity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="linestyle">
+ <ref name="ST_StrokeLineStyle"/>
+ <xs:documentation>Stroke Line Style</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="miterlimit">
+ <data type="decimal">
+ <xs:documentation>Miter Joint Limit</xs:documentation>
+ </data>
+ <xs:documentation>Miter Joint Limit</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="joinstyle">
+ <ref name="ST_StrokeJoinStyle"/>
+ <xs:documentation>Line End Join Style)</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endcap">
+ <ref name="ST_StrokeEndCap"/>
+ <xs:documentation>Line End Cap</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dashstyle">
+ <data type="string">
+ <xs:documentation>Stroke Dash Pattern</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Dash Pattern</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="insetpen">
+ <text/>
+ <xs:documentation>Inset Border From Path</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="filltype">
+ <ref name="ST_FillType"/>
+ <xs:documentation>Stroke Image Style</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="src">
+ <data type="string">
+ <xs:documentation>Stroke Image Location</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Image Location</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="imageaspect">
+ <ref name="ST_ImageAspect"/>
+ <xs:documentation>Stroke Image Aspect Ratio</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="imagesize">
+ <data type="string">
+ <xs:documentation>Stroke Image Size</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Image Size</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="imagealignshape">
+ <text/>
+ <xs:documentation>Stoke Image Alignment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="startarrow">
+ <ref name="ST_StrokeArrowType"/>
+ <xs:documentation>Line Start Arrowhead</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="startarrowwidth">
+ <ref name="ST_StrokeArrowWidth"/>
+ <xs:documentation>Line Start Arrowhead Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="startarrowlength">
+ <ref name="ST_StrokeArrowLength"/>
+ <xs:documentation>Line Start Arrowhead Length</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endarrow">
+ <ref name="ST_StrokeArrowType"/>
+ <xs:documentation>Line End Arrowhead</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endarrowwidth">
+ <ref name="ST_StrokeArrowWidth"/>
+ <xs:documentation>Line End Arrowhead Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endarrowlength">
+ <ref name="ST_StrokeArrowLength"/>
+ <xs:documentation>Line End Arrowhead Length</xs:documentation>
+ </attribute>
+ </optional>
+ <ref name="href"/>
+ <xs:documentation>Original Image Reference</xs:documentation>
+ <ref name="althref"/>
+ <xs:documentation>Alternate Image Reference</xs:documentation>
+ <ref name="title"/>
+ <xs:documentation>Stroke Title</xs:documentation>
+ <ref name="forcedash"/>
+ <xs:documentation>Force Dashed Outline</xs:documentation>
+ </define>
+ <define name="CT_ClipPath">
+ <attribute name="v">
+ <data type="string">
+ <xs:documentation>Path Definition</xs:documentation>
+ </data>
+ <xs:documentation>Path Definition</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Fill">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <attribute name="type">
+ <text/>
+ <xs:documentation>Fill Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_RType">
+ <list>
+ <xs:documentation>Rule Type</xs:documentation>
+ <choice>
+<!-- Arc Rule -->
+ <value>arc</value>
+<!-- Callout Rule -->
+ <value>callout</value>
+<!-- Connector Rule -->
+ <value>connector</value>
+<!-- Alignment Rule -->
+ <value>align</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_How">
+ <list>
+ <xs:documentation>Alignment Type</xs:documentation>
+ <choice>
+<!-- Top Alignment -->
+ <value>top</value>
+<!-- Middle Alignment -->
+ <value>middle</value>
+<!-- Bottom Alignment -->
+ <value>bottom</value>
+<!-- Left Alignment -->
+ <value>left</value>
+<!-- Center Alignment -->
+ <value>center</value>
+<!-- Right Alignment -->
+ <value>right</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_BWMode">
+ <list>
+ <xs:documentation>Black And White Modes</xs:documentation>
+ <choice>
+<!-- Color -->
+ <value>color</value>
+<!-- Automatic -->
+ <value>auto</value>
+<!-- Grayscale -->
+ <value>grayScale</value>
+<!-- Light grayscale -->
+ <value>lightGrayscale</value>
+<!-- Inverse Grayscale -->
+ <value>inverseGray</value>
+<!-- Gray Outlines -->
+ <value>grayOutline</value>
+<!-- Black And White -->
+ <value>highContrast</value>
+<!-- Black -->
+ <value>black</value>
+<!-- White -->
+ <value>white</value>
+<!-- Hide Object When Displayed in Black and White -->
+ <value>hide</value>
+<!-- Do Not Show -->
+ <value>undrawn</value>
+<!-- Black Text And Lines -->
+ <value>blackTextAndLines</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ScreenSize">
+ <list>
+ <xs:documentation>Screen Sizes Type</xs:documentation>
+ <choice>
+<!-- 544x376 pixels -->
+ <value>544,376</value>
+<!-- 640x480 pixels -->
+ <value>640,480</value>
+<!-- 720x512 pixels -->
+ <value>720,512</value>
+<!-- 800x600 pixels -->
+ <value>800,600</value>
+<!-- 1024x768 pixels -->
+ <value>1024,768</value>
+<!-- 1152x862 pixels -->
+ <value>1152,862</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_InsetMode">
+ <list>
+ <xs:documentation>Inset Margin Type</xs:documentation>
+ <choice>
+<!-- Automatic Margins -->
+ <value>auto</value>
+<!-- Custom Margins -->
+ <value>custom</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ColorMode">
+ <list>
+ <xs:documentation>Extrusion Color Types</xs:documentation>
+ <choice>
+<!-- Use Shape Fill Color -->
+ <value>auto</value>
+<!-- Use Custom Color -->
+ <value>custom</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ColorType">
+ <data type="string">
+ <xs:documentation>Color Type</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_ExtrusionType">
+ <list>
+ <xs:documentation>Extrusion Type</xs:documentation>
+ <choice>
+<!-- Perspective Projection -->
+ <value>perspective</value>
+<!-- Parallel Projection -->
+ <value>parallel</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ExtrusionRender">
+ <list>
+ <xs:documentation>Extrusion Rendering Types</xs:documentation>
+ <choice>
+<!-- Solid -->
+ <value>solid</value>
+<!-- Wireframe -->
+ <value>wireFrame</value>
+<!-- Bounding Cube -->
+ <value>boundingCube</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ExtrusionPlane">
+ <list>
+ <xs:documentation>Extrusion Planes</xs:documentation>
+ <choice>
+<!-- XY Plane -->
+ <value>XY</value>
+<!-- ZX Plane -->
+ <value>ZX</value>
+<!-- YZ Plane -->
+ <value>YZ</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_Angle">
+ <list>
+ <xs:documentation>Callout Angles</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_CalloutDrop">
+ <data type="string">
+ <xs:documentation>Callout Drop Location</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_CalloutPlacement">
+ <list>
+ <xs:documentation>Callout Placement</xs:documentation>
+ <choice>
+<!-- Top placement -->
+ <value>top</value>
+<!-- Center placement -->
+ <value>center</value>
+<!-- Bottom placement -->
+ <value>bottom</value>
+<!-- User-defined placement -->
+ <value>user</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ConnectorType">
+ <list>
+ <xs:documentation>Connector Type</xs:documentation>
+ <choice>
+<!-- No Connector -->
+ <value>none</value>
+<!-- Straight Connector -->
+ <value>straight</value>
+<!-- Elbow Connector -->
+ <value>elbow</value>
+<!-- Curved Connector -->
+ <value>curved</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_HrAlign">
+ <list>
+ <xs:documentation>Alignment Type</xs:documentation>
+ <choice>
+<!-- Left Alignment -->
+ <value>left</value>
+<!-- Right Alignment -->
+ <value>right</value>
+<!-- Center Alignment -->
+ <value>center</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ConnectType">
+ <list>
+ <xs:documentation>Connection Locations Type</xs:documentation>
+ <choice>
+<!-- No -->
+ <value>none</value>
+<!-- Four Connections -->
+ <value>rect</value>
+<!-- Edit Point Connections -->
+ <value>segments</value>
+<!-- Custom Connections -->
+ <value>custom</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_OLELinkType">
+ <list>
+ <xs:documentation>Embedded Object Alternate Image Request Types</xs:documentation>
+ <choice>
+<!-- Other Image -->
+ <value>Picture</value>
+<!-- Bitmap Image -->
+ <value>Bitmap</value>
+<!-- Enhanced Metafile Image -->
+ <value>EnhancedMetaFile</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_OLEType">
+ <list>
+ <xs:documentation>OLE Connection Type</xs:documentation>
+ <choice>
+<!-- Embedded Object -->
+ <value>Embed</value>
+<!-- Linked Object -->
+ <value>Link</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_OLEDrawAspect">
+ <list>
+ <xs:documentation>OLE Object Representations</xs:documentation>
+ <choice>
+<!-- Snapshot -->
+ <value>Content</value>
+<!-- Icon -->
+ <value>Icon</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_OLEUpdateMode">
+ <list>
+ <xs:documentation>OLE Update Method Type</xs:documentation>
+ <choice>
+<!-- Server Application Update -->
+ <value>Always</value>
+<!-- User Update -->
+ <value>OnCall</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_Guid">
+ <data type="token">
+ <xs:documentation>128-Bit GUID</xs:documentation>
+ <param name="pattern">\{[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}\}</param>
+ </data>
+ </define>
+ <define name="ST_RelationshipId">
+ <data type="string">
+ <xs:documentation>Explicit Relationship ID</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_TrueFalse">
+ <list>
+ <xs:documentation>Boolean Value</xs:documentation>
+ <choice>
+<!-- True -->
+ <value>t</value>
+<!-- False -->
+ <value>f</value>
+<!-- True -->
+ <value>true</value>
+<!-- False -->
+ <value>false</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_TrueFalseBlank">
+ <list>
+ <xs:documentation>Boolean Value with Blank [False] State</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_FillType">
+ <list>
+ <xs:documentation>Shape Fill Type</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="BUILT_IN_ANY_TYPE">
+ <zeroOrMore>
+ <choice>
+ <element>
+ <anyName/>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ </choice>
+ </zeroOrMore>
+ </define>
+ </grammar>
+ <resource name="OLEObject" resource="Properties">
+ <element name="OLEObject" tokenid="ooxml:OLEObject_OLEObject"/>
+ </resource>
+ <resource xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" 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_RType" resource="List" generated="yes">
+ <value name="arc" tokenid="ooxml:Value_office_ST_RType_arc">arc</value>
+ <value name="callout" tokenid="ooxml:Value_office_ST_RType_callout">callout</value>
+ <value name="connector" tokenid="ooxml:Value_office_ST_RType_connector">connector</value>
+ <value name="align" tokenid="ooxml:Value_office_ST_RType_align">align</value>
+ </resource>
+ <resource name="ST_How" resource="List" generated="yes">
+ <value name="top" tokenid="ooxml:Value_office_ST_How_top">top</value>
+ <value name="middle" tokenid="ooxml:Value_office_ST_How_middle">middle</value>
+ <value name="bottom" tokenid="ooxml:Value_office_ST_How_bottom">bottom</value>
+ <value name="left" tokenid="ooxml:Value_office_ST_How_left">left</value>
+ <value name="center" tokenid="ooxml:Value_office_ST_How_center">center</value>
+ <value name="right" tokenid="ooxml:Value_office_ST_How_right">right</value>
+ </resource>
+ <resource name="ST_BWMode" resource="List" generated="yes">
+ <value name="color" tokenid="ooxml:Value_office_ST_BWMode_color">color</value>
+ <value name="auto" tokenid="ooxml:Value_office_ST_BWMode_auto">auto</value>
+ <value name="grayScale" tokenid="ooxml:Value_office_ST_BWMode_grayScale">grayScale</value>
+ <value name="lightGrayscale" tokenid="ooxml:Value_office_ST_BWMode_lightGrayscale">lightGrayscale</value>
+ <value name="inverseGray" tokenid="ooxml:Value_office_ST_BWMode_inverseGray">inverseGray</value>
+ <value name="grayOutline" tokenid="ooxml:Value_office_ST_BWMode_grayOutline">grayOutline</value>
+ <value name="highContrast" tokenid="ooxml:Value_office_ST_BWMode_highContrast">highContrast</value>
+ <value name="black" tokenid="ooxml:Value_office_ST_BWMode_black">black</value>
+ <value name="white" tokenid="ooxml:Value_office_ST_BWMode_white">white</value>
+ <value name="hide" tokenid="ooxml:Value_office_ST_BWMode_hide">hide</value>
+ <value name="undrawn" tokenid="ooxml:Value_office_ST_BWMode_undrawn">undrawn</value>
+ <value name="blackTextAndLines" tokenid="ooxml:Value_office_ST_BWMode_blackTextAndLines">blackTextAndLines</value>
+ </resource>
+ <resource name="ST_ScreenSize" resource="List" generated="yes">
+ <value name="544_376" tokenid="ooxml:Value_office_ST_ScreenSize_544_376">544,376</value>
+ <value name="640_480" tokenid="ooxml:Value_office_ST_ScreenSize_640_480">640,480</value>
+ <value name="720_512" tokenid="ooxml:Value_office_ST_ScreenSize_720_512">720,512</value>
+ <value name="800_600" tokenid="ooxml:Value_office_ST_ScreenSize_800_600">800,600</value>
+ <value name="1024_768" tokenid="ooxml:Value_office_ST_ScreenSize_1024_768">1024,768</value>
+ <value name="1152_862" tokenid="ooxml:Value_office_ST_ScreenSize_1152_862">1152,862</value>
+ </resource>
+ <resource name="ST_InsetMode" resource="List" generated="yes">
+ <value name="auto" tokenid="ooxml:Value_office_ST_InsetMode_auto">auto</value>
+ <value name="custom" tokenid="ooxml:Value_office_ST_InsetMode_custom">custom</value>
+ </resource>
+ <resource name="ST_ColorMode" resource="List" generated="yes">
+ <value name="auto" tokenid="ooxml:Value_office_ST_ColorMode_auto">auto</value>
+ <value name="custom" tokenid="ooxml:Value_office_ST_ColorMode_custom">custom</value>
+ </resource>
+ <resource name="ST_ColorType" resource="String" generated="yes"/>
+ <resource name="ST_ExtrusionType" resource="List" generated="yes">
+ <value name="perspective" tokenid="ooxml:Value_office_ST_ExtrusionType_perspective">perspective</value>
+ <value name="parallel" tokenid="ooxml:Value_office_ST_ExtrusionType_parallel">parallel</value>
+ </resource>
+ <resource name="ST_ExtrusionRender" resource="List" generated="yes">
+ <value name="solid" tokenid="ooxml:Value_office_ST_ExtrusionRender_solid">solid</value>
+ <value name="wireFrame" tokenid="ooxml:Value_office_ST_ExtrusionRender_wireFrame">wireFrame</value>
+ <value name="boundingCube" tokenid="ooxml:Value_office_ST_ExtrusionRender_boundingCube">boundingCube</value>
+ </resource>
+ <resource name="ST_ExtrusionPlane" resource="List" generated="yes">
+ <value name="XY" tokenid="ooxml:Value_office_ST_ExtrusionPlane_XY">XY</value>
+ <value name="ZX" tokenid="ooxml:Value_office_ST_ExtrusionPlane_ZX">ZX</value>
+ <value name="YZ" tokenid="ooxml:Value_office_ST_ExtrusionPlane_YZ">YZ</value>
+ </resource>
+ <resource name="ST_Angle" resource="List" generated="yes">
+ <value name="any" tokenid="ooxml:Value_office_ST_Angle_any">any</value>
+ <value name="30" tokenid="ooxml:Value_office_ST_Angle_30">30</value>
+ <value name="45" tokenid="ooxml:Value_office_ST_Angle_45">45</value>
+ <value name="60" tokenid="ooxml:Value_office_ST_Angle_60">60</value>
+ <value name="90" tokenid="ooxml:Value_office_ST_Angle_90">90</value>
+ <value name="auto" tokenid="ooxml:Value_office_ST_Angle_auto">auto</value>
+ </resource>
+ <resource name="ST_CalloutDrop" resource="String" generated="yes"/>
+ <resource name="ST_CalloutPlacement" resource="List" generated="yes">
+ <value name="top" tokenid="ooxml:Value_office_ST_CalloutPlacement_top">top</value>
+ <value name="center" tokenid="ooxml:Value_office_ST_CalloutPlacement_center">center</value>
+ <value name="bottom" tokenid="ooxml:Value_office_ST_CalloutPlacement_bottom">bottom</value>
+ <value name="user" tokenid="ooxml:Value_office_ST_CalloutPlacement_user">user</value>
+ </resource>
+ <resource name="ST_ConnectorType" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_office_ST_ConnectorType_none">none</value>
+ <value name="straight" tokenid="ooxml:Value_office_ST_ConnectorType_straight">straight</value>
+ <value name="elbow" tokenid="ooxml:Value_office_ST_ConnectorType_elbow">elbow</value>
+ <value name="curved" tokenid="ooxml:Value_office_ST_ConnectorType_curved">curved</value>
+ </resource>
+ <resource name="ST_HrAlign" resource="List" generated="yes">
+ <value name="left" tokenid="ooxml:Value_office_ST_HrAlign_left">left</value>
+ <value name="right" tokenid="ooxml:Value_office_ST_HrAlign_right">right</value>
+ <value name="center" tokenid="ooxml:Value_office_ST_HrAlign_center">center</value>
+ </resource>
+ <resource name="ST_ConnectType" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_office_ST_ConnectType_none">none</value>
+ <value name="rect" tokenid="ooxml:Value_office_ST_ConnectType_rect">rect</value>
+ <value name="segments" tokenid="ooxml:Value_office_ST_ConnectType_segments">segments</value>
+ <value name="custom" tokenid="ooxml:Value_office_ST_ConnectType_custom">custom</value>
+ </resource>
+ <resource name="ST_OLELinkType" resource="List" generated="yes">
+ <value name="Picture" tokenid="ooxml:Value_office_ST_OLELinkType_Picture">Picture</value>
+ <value name="Bitmap" tokenid="ooxml:Value_office_ST_OLELinkType_Bitmap">Bitmap</value>
+ <value name="EnhancedMetaFile" tokenid="ooxml:Value_office_ST_OLELinkType_EnhancedMetaFile">EnhancedMetaFile</value>
+ </resource>
+ <resource name="ST_OLEType" resource="List" generated="yes">
+ <value name="Embed" tokenid="ooxml:Value_office_ST_OLEType_Embed">Embed</value>
+ <value name="Link" tokenid="ooxml:Value_office_ST_OLEType_Link">Link</value>
+ </resource>
+ <resource name="ST_OLEDrawAspect" resource="List" generated="yes">
+ <value name="Content" tokenid="ooxml:Value_office_ST_OLEDrawAspect_Content">Content</value>
+ <value name="Icon" tokenid="ooxml:Value_office_ST_OLEDrawAspect_Icon">Icon</value>
+ </resource>
+ <resource name="ST_OLEUpdateMode" resource="List" generated="yes">
+ <value name="Always" tokenid="ooxml:Value_office_ST_OLEUpdateMode_Always">Always</value>
+ <value name="OnCall" tokenid="ooxml:Value_office_ST_OLEUpdateMode_OnCall">OnCall</value>
+ </resource>
+ <resource name="ST_Guid" resource="String" generated="yes"/>
+ <resource name="ST_RelationshipId" resource="String" generated="yes"/>
+ <resource name="ST_TrueFalse" resource="List" generated="yes">
+ <value name="t" tokenid="ooxml:Value_office_ST_TrueFalse_t">t</value>
+ <value name="f" tokenid="ooxml:Value_office_ST_TrueFalse_f">f</value>
+ <value name="true" tokenid="ooxml:Value_office_ST_TrueFalse_true">true</value>
+ <value name="false" tokenid="ooxml:Value_office_ST_TrueFalse_false">false</value>
+ </resource>
+ <resource name="ST_TrueFalseBlank" resource="List" generated="yes">
+ <value name="" tokenid="ooxml:Value_office_ST_TrueFalseBlank_"/>
+ <value name="t" tokenid="ooxml:Value_office_ST_TrueFalseBlank_t">t</value>
+ <value name="f" tokenid="ooxml:Value_office_ST_TrueFalseBlank_f">f</value>
+ <value name="true" tokenid="ooxml:Value_office_ST_TrueFalseBlank_true">true</value>
+ <value name="false" tokenid="ooxml:Value_office_ST_TrueFalseBlank_false">false</value>
+ </resource>
+ <resource name="ST_FillType" resource="List" generated="yes">
+ <value name="gradientCenter" tokenid="ooxml:Value_office_ST_FillType_gradientCenter">gradientCenter</value>
+ <value name="solid" tokenid="ooxml:Value_office_ST_FillType_solid">solid</value>
+ <value name="pattern" tokenid="ooxml:Value_office_ST_FillType_pattern">pattern</value>
+ <value name="tile" tokenid="ooxml:Value_office_ST_FillType_tile">tile</value>
+ <value name="frame" tokenid="ooxml:Value_office_ST_FillType_frame">frame</value>
+ <value name="gradientUnscaled" tokenid="ooxml:Value_office_ST_FillType_gradientUnscaled">gradientUnscaled</value>
+ <value name="gradientRadial" tokenid="ooxml:Value_office_ST_FillType_gradientRadial">gradientRadial</value>
+ <value name="gradient" tokenid="ooxml:Value_office_ST_FillType_gradient">gradient</value>
+ <value name="background" tokenid="ooxml:Value_office_ST_FillType_background">background</value>
+ </resource>
+ </namespace>
+ <namespace name="vml-wordprocessingDrawing" file="vml-wordprocessingDrawing.rng">
+ <start name="bordertop"/>
+ <start name="borderleft"/>
+ <start name="borderright"/>
+ <start name="borderbottom"/>
+ <start name="wrap"/>
+ <start name="anchorlock"/>
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" xmlns:rng="http://relaxng.org/ns/structure/1.0" ns="urn:schemas-microsoft-com:office:word" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+<!-- 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">
+ <optional>
+ <attribute name="type">
+ <text/>
+ <xs:documentation>Border Style</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="width">
+ <data type="positiveInteger">
+ <xs:documentation>Border Width</xs:documentation>
+ </data>
+ <xs:documentation>Border Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="shadow">
+ <text/>
+ <xs:documentation>Border shadow</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="wrap">
+ <element name="wrap">
+ <ref name="CT_Wrap"/>
+ </element>
+ </define>
+ <define name="CT_Wrap">
+ <optional>
+ <attribute name="type">
+ <ref name="ST_WrapType"/>
+ <xs:documentation>Wrapping type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="side">
+ <ref name="ST_WrapSide"/>
+ <xs:documentation>Wrapping side</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="anchorx">
+ <ref name="ST_HorizontalAnchor"/>
+ <xs:documentation>Horizontal Positioning Base</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="anchory">
+ <ref name="ST_VerticalAnchor"/>
+ <xs:documentation>Vertical Positioning Base</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="anchorlock">
+ <element name="anchorlock">
+ <ref name="CT_AnchorLock"/>
+ </element>
+ </define>
+ <define name="CT_AnchorLock">
+ <empty/>
+ </define>
+ <define name="ST_BorderType">
+ <list>
+ <xs:documentation>Border Type</xs:documentation>
+ <choice>
+<!-- No Border -->
+ <value>none</value>
+<!-- Single Line Border -->
+ <value>single</value>
+<!-- Thick Line Border -->
+ <value>thick</value>
+<!-- Double Line Border -->
+ <value>double</value>
+<!-- Hairline Border -->
+ <value>hairline</value>
+<!-- Dotted Border -->
+ <value>dot</value>
+<!-- pecifies a line border consisting of a dashed line around the parent object. -->
+ <value>dash</value>
+<!-- Dot Dash Border -->
+ <value>dotDash</value>
+<!-- Dash Dot Dot Border -->
+ <value>dashDotDot</value>
+<!-- Triple Line Border -->
+ <value>triple</value>
+<!-- Thin Thick Small Gap Border -->
+ <value>thinThickSmall</value>
+<!-- Small thick-thin lines border -->
+ <value>thickThinSmall</value>
+<!-- Small thin-thick-thin Lines Border -->
+ <value>thickBetweenThinSmall</value>
+<!-- Thin Thick Line Border -->
+ <value>thinThick</value>
+<!-- Thick Thin Line Border -->
+ <value>thickThin</value>
+<!-- Thin-thick-thin Border -->
+ <value>thickBetweenThin</value>
+<!-- Thin Thick Large Gap Border -->
+ <value>thinThickLarge</value>
+<!-- Thick Thin Large Gap Border -->
+ <value>thickThinLarge</value>
+<!-- Large thin-thick-thin Border -->
+ <value>thickBetweenThinLarge</value>
+<!-- Wavy Border -->
+ <value>wave</value>
+<!-- Double Wavy Lines Border -->
+ <value>doubleWave</value>
+<!-- Small Dash Border -->
+ <value>dashedSmall</value>
+<!-- Stroked Dash Dot Border -->
+ <value>dashDotStroked</value>
+<!-- 3D Embossed Border -->
+ <value>threeDEmboss</value>
+<!-- 3D Engraved Border -->
+ <value>threeDEngrave</value>
+<!-- Outset Border -->
+ <value>HTMLOutset</value>
+<!-- Inset Border -->
+ <value>HTMLInset</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_BorderShadow">
+ <list>
+ <xs:documentation>Border Shadow Type</xs:documentation>
+ <choice>
+<!-- True -->
+ <value>t</value>
+<!-- True -->
+ <value>true</value>
+<!-- False -->
+ <value>f</value>
+<!-- False -->
+ <value>false</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_WrapType">
+ <list>
+ <xs:documentation>Text Wrapping Type</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_WrapSide">
+ <list>
+ <xs:documentation>Text Wrapping Side</xs:documentation>
+ <choice>
+<!-- Both sides -->
+ <value>both</value>
+<!-- Left side -->
+ <value>left</value>
+<!-- Right side -->
+ <value>right</value>
+<!-- Largest side -->
+ <value>largest</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_HorizontalAnchor">
+ <list>
+ <xs:documentation>Horizontal Anchor Type</xs:documentation>
+ <choice>
+<!-- Margin -->
+ <value>margin</value>
+<!-- Page -->
+ <value>page</value>
+<!-- Text -->
+ <value>text</value>
+<!-- Character -->
+ <value>char</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_VerticalAnchor">
+ <list>
+ <xs:documentation>Vertical Anchor Type</xs:documentation>
+ <choice>
+<!-- Margin -->
+ <value>margin</value>
+<!-- Page -->
+ <value>page</value>
+<!-- Text -->
+ <value>text</value>
+<!-- Line -->
+ <value>line</value>
+ </choice>
+ </list>
+ </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_BorderType" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_none">none</value>
+ <value name="single" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_single">single</value>
+ <value name="thick" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thick">thick</value>
+ <value name="double" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_double">double</value>
+ <value name="hairline" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_hairline">hairline</value>
+ <value name="dot" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_dot">dot</value>
+ <value name="dash" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_dash">dash</value>
+ <value name="dotDash" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_dotDash">dotDash</value>
+ <value name="dashDotDot" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_dashDotDot">dashDotDot</value>
+ <value name="triple" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_triple">triple</value>
+ <value name="thinThickSmall" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thinThickSmall">thinThickSmall</value>
+ <value name="thickThinSmall" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thickThinSmall">thickThinSmall</value>
+ <value name="thickBetweenThinSmall" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thickBetweenThinSmall">thickBetweenThinSmall</value>
+ <value name="thinThick" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thinThick">thinThick</value>
+ <value name="thickThin" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thickThin">thickThin</value>
+ <value name="thickBetweenThin" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thickBetweenThin">thickBetweenThin</value>
+ <value name="thinThickLarge" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thinThickLarge">thinThickLarge</value>
+ <value name="thickThinLarge" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thickThinLarge">thickThinLarge</value>
+ <value name="thickBetweenThinLarge" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thickBetweenThinLarge">thickBetweenThinLarge</value>
+ <value name="wave" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_wave">wave</value>
+ <value name="doubleWave" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_doubleWave">doubleWave</value>
+ <value name="dashedSmall" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_dashedSmall">dashedSmall</value>
+ <value name="dashDotStroked" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_dashDotStroked">dashDotStroked</value>
+ <value name="threeDEmboss" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_threeDEmboss">threeDEmboss</value>
+ <value name="threeDEngrave" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_threeDEngrave">threeDEngrave</value>
+ <value name="HTMLOutset" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_HTMLOutset">HTMLOutset</value>
+ <value name="HTMLInset" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_HTMLInset">HTMLInset</value>
+ </resource>
+ <resource name="ST_BorderShadow" resource="List" generated="yes">
+ <value name="t" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderShadow_t">t</value>
+ <value name="true" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderShadow_true">true</value>
+ <value name="f" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderShadow_f">f</value>
+ <value name="false" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderShadow_false">false</value>
+ </resource>
+ <resource name="ST_WrapType" resource="List" generated="yes">
+ <value name="topAndBottom" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_topAndBottom">topAndBottom</value>
+ <value name="square" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_square">square</value>
+ <value name="none" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_none">none</value>
+ <value name="tight" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_tight">tight</value>
+ <value name="through" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_through">through</value>
+ </resource>
+ <resource name="ST_WrapSide" resource="List" generated="yes">
+ <value name="both" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapSide_both">both</value>
+ <value name="left" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapSide_left">left</value>
+ <value name="right" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapSide_right">right</value>
+ <value name="largest" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapSide_largest">largest</value>
+ </resource>
+ <resource name="ST_HorizontalAnchor" resource="List" generated="yes">
+ <value name="margin" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_HorizontalAnchor_margin">margin</value>
+ <value name="page" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_HorizontalAnchor_page">page</value>
+ <value name="text" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_HorizontalAnchor_text">text</value>
+ <value name="char" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_HorizontalAnchor_char">char</value>
+ </resource>
+ <resource name="ST_VerticalAnchor" resource="List" generated="yes">
+ <value name="margin" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_VerticalAnchor_margin">margin</value>
+ <value name="page" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_VerticalAnchor_page">page</value>
+ <value name="text" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_VerticalAnchor_text">text</value>
+ <value name="line" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_VerticalAnchor_line">line</value>
+ </resource>
+ </namespace>
+ <namespace name="wml" file="wml.rng">
+ <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:sl="http://schemas.openxmlformats.org/schemaLibrary/2006/main" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:rel="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/wordprocessingml/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" attributeFormDefault="qualified">
+<!-- ISO RELAX NG Schema -->
+ <include href="shared-customXmlSchemaProperties.rng"/>
+ <include href="shared-math.rng"/>
+ <include href="dml-wordprocessingDrawing.rng"/>
+ <include href="shared-relationshipReference.rng"/>
+<!-- start = recipients | txbxContent | comments | footnotes | endnotes | hdr | ftr | settings | webSettings | fonts | numbering | styles | document | glossaryDocument -->
+ <define name="CT_Empty">
+ <empty/>
+ </define>
+ <define name="ST_OnOff">
+ <list>
+ <xs:documentation>On/Off Value</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_OnOff">
+ <attribute name="val">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>On/Off Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_LongHexNumber">
+ <data type="hexBinary">
+ <xs:documentation>Four Digit Hexadecimal Number Value</xs:documentation>
+ <param name="length">4</param>
+ </data>
+ </define>
+ <define name="CT_LongHexNumber">
+ <attribute name="val">
+ <ref name="ST_LongHexNumber"/>
+ <xs:documentation>Long Hexadecimal Number Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_ShortHexNumber">
+ <data type="hexBinary">
+ <xs:documentation>Two Digit Hexadecimal Number Value</xs:documentation>
+ <param name="length">2</param>
+ </data>
+ </define>
+ <define name="CT_ShortHexNumber">
+ <attribute name="val">
+ <ref name="ST_ShortHexNumber"/>
+ <xs:documentation>Two Digit Hexadecimal Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_UcharHexNumber">
+ <data type="hexBinary">
+ <xs:documentation>Two Digit Hexadecimal Number Value</xs:documentation>
+ <param name="length">1</param>
+ </data>
+ </define>
+ <define name="CT_UcharHexNumber">
+ <attribute name="val">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_DecimalNumber">
+ <data type="integer">
+ <xs:documentation>Decimal Number Value</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_DecimalNumber">
+ <attribute name="val">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Decimal Number Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_UnsignedDecimalNumber">
+ <data type="unsignedLong">
+ <xs:documentation>Unsigned Decimal Number Value</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_TwipsMeasure">
+ <data type="unsignedLong">
+ <xs:documentation>Measurement in Twentieths of a Point</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_TwipsMeasure">
+ <attribute name="val">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Measurement in Twentieths of a Point</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_SignedTwipsMeasure">
+ <data type="integer">
+ <xs:documentation>Signed Measurement in Twentieths of a Point</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_SignedTwipsMeasure">
+ <attribute name="val">
+ <ref name="ST_SignedTwipsMeasure"/>
+ <xs:documentation>Positive or Negative Value in Twentieths of a Point</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_PixelsMeasure">
+ <data type="unsignedLong">
+ <xs:documentation>Measurement in Pixels</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_PixelsMeasure">
+ <attribute name="val">
+ <ref name="ST_PixelsMeasure"/>
+ <xs:documentation>Measurement in Pixels</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_HpsMeasure">
+ <data type="unsignedLong">
+ <xs:documentation>Measurement in Half-Points</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_HpsMeasure">
+ <attribute name="val">
+ <ref name="ST_HpsMeasure"/>
+ <xs:documentation>Half Point Measurement</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_SignedHpsMeasure">
+ <data type="integer">
+ <xs:documentation>Signed Measurement in Half-Points</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_SignedHpsMeasure">
+ <attribute name="val">
+ <ref name="ST_SignedHpsMeasure"/>
+ <xs:documentation>Signed Half-Point Measurement</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_DateTime">
+ <data type="dateTime">
+ <xs:documentation>Standard Date and Time Storage Format</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_MacroName">
+ <data type="string">
+ <xs:documentation>Script Subroutine Name Value</xs:documentation>
+ <param name="maxLength">33</param>
+ </data>
+ </define>
+ <define name="CT_MacroName">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Name of Script Function</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_EighthPointMeasure">
+ <data type="unsignedLong">
+ <xs:documentation>Measurement in Eighths of a Point</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_PointMeasure">
+ <data type="unsignedLong">
+ <xs:documentation>Measurement in Points</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_String">
+ <data type="string">
+ <xs:documentation>String</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_String">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>String Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_TextScale">
+ <data type="integer">
+ <xs:documentation>Text Expansion/Compression Percentage</xs:documentation>
+ <param name="minInclusive">0</param>
+ <param name="maxInclusive">600</param>
+ </data>
+ </define>
+ <define name="CT_TextScale">
+ <attribute name="val">
+ <ref name="ST_TextScale"/>
+ <xs:documentation>Text Expansion/Compression Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_HighlightColor">
+ <list>
+ <xs:documentation>Text Highlight Colors</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_Highlight">
+ <attribute name="val">
+ <ref name="ST_HighlightColor"/>
+ <xs:documentation>Highlighting Color</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_HexColorAuto">
+ <list>
+ <xs:documentation>&#x2018;Automatic&#x2019; Color Value</xs:documentation>
+<!-- Automatically Determined Color -->
+ <value>auto</value>
+ </list>
+ </define>
+ <define name="ST_HexColorRGB">
+ <data type="hexBinary">
+ <xs:documentation>Hexadecimal Color Value</xs:documentation>
+ <param name="length">3</param>
+ </data>
+ </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"/>
+ <xs:documentation>Run Content Color</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="themeColor">
+ <ref name="ST_ThemeColor"/>
+ <xs:documentation>Run Content Theme Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeTint">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Run Content Theme Color Tint</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeShade">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Run Content Theme Color Shade</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_LangCode">
+ <data type="hexBinary">
+ <xs:documentation>Two Digit Hexadecimal Language Code</xs:documentation>
+ <param name="length">2</param>
+ </data>
+ </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"/>
+ <xs:documentation>Language Code</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Guid">
+ <data type="token">
+ <xs:documentation>128-Bit GUID</xs:documentation>
+ <param name="pattern">\{[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}\}</param>
+ </data>
+ </define>
+ <define name="CT_Guid">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>GUID Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Underline">
+ <list>
+ <xs:documentation>Underline Patterns</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_Underline">
+ <optional><attribute name="val"><ref name="ST_Underline"/><xs:documentation>Underline Style</xs:documentation></attribute>ST_String
+ </optional>
+ <optional>
+ <attribute name="color">
+ <text/>
+ <xs:documentation>Underline Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeColor">
+ <text/>
+ <xs:documentation>Underline Theme Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeTint">
+ <text/>
+ <xs:documentation>Underline Theme Color Tint</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeShade">
+ <text/>
+ <xs:documentation>Underline Theme Color Shade</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_TextEffect">
+ <list>
+ <xs:documentation>Animated Text Effects</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_TextEffect">
+ <attribute name="val">
+ <ref name="ST_TextEffect"/>
+ <xs:documentation>Animated Text Effect Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Border">
+ <list>
+ <xs:documentation>Border Styles</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_Border">
+ <attribute name="val">
+ <ref name="ST_Border"/>
+ <xs:documentation>Border Style</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="color">
+ <ref name="ST_HexColor"/>
+ <xs:documentation>Border Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeColor">
+ <ref name="ST_ThemeColor"/>
+ <xs:documentation>Border Theme Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeTint">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Border Theme Color Tint</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeShade">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Border Theme Color Shade</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sz">
+ <ref name="ST_EighthPointMeasure"/>
+ <xs:documentation>Border Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="space">
+ <ref name="ST_PointMeasure"/>
+ <xs:documentation>Border Spacing Measurement</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="shadow">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Border Shadow</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="frame">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Create Frame Effect</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_Shd">
+ <list>
+ <xs:documentation>Shading Patterns</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_Shd">
+ <attribute name="val">
+ <ref name="ST_Shd"/>
+ <xs:documentation>Shading Pattern</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="color">
+ <ref name="ST_HexColor"/>
+ <xs:documentation>Shading Pattern Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeColor">
+ <ref name="ST_ThemeColor"/>
+ <xs:documentation>Shading Pattern Theme Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeTint">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Shading Pattern Theme Color Tint</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeShade">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Shading Pattern Theme Color Shade</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fill">
+ <ref name="ST_HexColor"/>
+ <xs:documentation>Shading Background Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeFill">
+ <ref name="ST_ThemeColor"/>
+ <xs:documentation>Shading Background Theme Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeFillTint">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Shading Background Theme Color Tint</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeFillShade">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Shading Background Theme Color Shade</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_VerticalAlignRun">
+ <list>
+ <xs:documentation>Vertical Positioning Location</xs:documentation>
+ <choice>
+<!-- Regular Vertical Positioning -->
+ <value>baseline</value>
+<!-- Superscript -->
+ <value>superscript</value>
+<!-- Subscript -->
+ <value>subscript</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_VerticalAlignRun">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Subscript/Superscript Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FitText">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="id">
+ <text/>
+ <xs:documentation>Fit Text Run ID</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_Em">
+ <list>
+ <xs:documentation>Emphasis Mark Type</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_Em">
+ <attribute name="val">
+ <ref name="ST_Em"/>
+ <xs:documentation>Emphasis Mark Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Language">
+ <optional>
+ <attribute name="val">
+ <ref name="ST_Lang"/>
+ <xs:documentation>Latin Language</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="eastAsia">
+ <ref name="ST_Lang"/>
+ <xs:documentation>East Asian Language</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="bidi">
+ <ref name="ST_Lang"/>
+ <xs:documentation>Complex Script Language</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_CombineBrackets">
+ <list>
+ <xs:documentation>Two Lines in One Enclosing Character Type</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_EastAsianLayout">
+ <optional>
+ <attribute name="id">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>East Asian Typography Run ID</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="combine">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Two Lines in One</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="combineBrackets">
+ <ref name="ST_CombineBrackets"/>
+ <xs:documentation>Display Brackets Around Two Lines in One</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="vert">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Horizontal in Vertical (Rotate Text)</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="vertCompress">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Compress Rotated Text to Line Height</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_XAlign">
+ <list>
+ <xs:documentation>Horizontal Alignment Location</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_YAlign">
+ <list>
+ <xs:documentation>Vertical Alignment Location</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_HeightRule">
+ <list>
+ <xs:documentation>Height Rule</xs:documentation>
+ <choice>
+<!-- Determine Height Based On Contents -->
+ <value>auto</value>
+<!-- Exact Height -->
+ <value>exact</value>
+<!-- Minimum Height -->
+ <value>atLeast</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_Wrap">
+ <list>
+ <xs:documentation>Text Wrapping around Text Frame Type</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_VAnchor">
+ <list>
+ <xs:documentation>Vertical Anchor Location</xs:documentation>
+ <choice>
+<!-- Relative To Vertical Text Extents -->
+ <value>text</value>
+<!-- Relative To Margin -->
+ <value>margin</value>
+<!-- Relative To Page -->
+ <value>page</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_HAnchor">
+ <list>
+ <xs:documentation>Horizontal Anchor Location</xs:documentation>
+ <choice>
+<!-- Relative to Text Extents -->
+ <value>text</value>
+<!-- Relative To Margin -->
+ <value>margin</value>
+<!-- Relative to Page -->
+ <value>page</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_DropCap">
+ <list>
+ <xs:documentation>Text Frame Drop Cap Location</xs:documentation>
+ <choice>
+<!-- Not Drop Cap -->
+ <value>none</value>
+<!-- Drop Cap Inside Margin -->
+ <value>drop</value>
+<!-- Drop Cap Outside Margin -->
+ <value>margin</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_FramePr">
+ <optional>
+ <attribute name="dropCap">
+ <ref name="ST_DropCap"/>
+ <xs:documentation>Drop Cap Frame</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lines">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Drop Cap Vertical Height in Lines</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="w">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Frame Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="h">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Frame Height</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="vSpace">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Vertical Frame Padding</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="hSpace">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Horizontal Frame Padding</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="wrap">
+ <ref name="ST_Wrap"/>
+ <xs:documentation>Text Wrapping Around Frame</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="hAnchor">
+ <ref name="ST_HAnchor"/>
+ <xs:documentation>Frame Horizontal Positioning Base</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="vAnchor">
+ <ref name="ST_VAnchor"/>
+ <xs:documentation>Frame Vertical Positioning Base</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="x">
+ <ref name="ST_SignedTwipsMeasure"/>
+ <xs:documentation>Absolute Horizontal Position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="xAlign">
+ <ref name="ST_XAlign"/>
+ <xs:documentation>Relative Horizontal Position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="y">
+ <ref name="ST_SignedTwipsMeasure"/>
+ <xs:documentation>Absolute Vertical Position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="yAlign">
+ <ref name="ST_YAlign"/>
+ <xs:documentation>Relative Vertical Position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="hRule">
+ <ref name="ST_HeightRule"/>
+ <xs:documentation>Frame Height Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="anchorLock">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Lock Frame Anchor to Paragraph</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_TabJc">
+ <list>
+ <xs:documentation>Custom Tab Stop Type</xs:documentation>
+ <choice>
+<!-- No Tab Stop -->
+ <value>clear</value>
+<!-- Left Tab -->
+ <value>left</value>
+<!-- Centered Tab -->
+ <value>center</value>
+<!-- Right Tab -->
+ <value>right</value>
+<!-- Decimal Tab -->
+ <value>decimal</value>
+<!-- Bar Tab -->
+ <value>bar</value>
+<!-- List Tab -->
+ <value>num</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_TabTlc">
+ <list>
+ <xs:documentation>Custom Tab Stop Leader Character</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_TabStop">
+ <attribute name="val">
+ <ref name="ST_TabJc"/>
+ <xs:documentation>Tab Stop Type</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="leader">
+ <ref name="ST_TabTlc"/>
+ <xs:documentation>Tab Leader Character</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="pos">
+ <ref name="ST_SignedTwipsMeasure"/>
+ <xs:documentation>Tab Stop Position</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_LineSpacingRule">
+ <list>
+ <xs:documentation>Line Spacing Rule</xs:documentation>
+ <choice>
+<!-- Automatically Determined Line Height -->
+ <value>auto</value>
+<!-- Exact Line Height -->
+ <value>exact</value>
+<!-- Minimum Line Height -->
+ <value>atLeast</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Spacing">
+ <optional>
+ <attribute name="before">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Spacing Above Paragraph</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="beforeLines">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Spacing Above Paragraph IN Line Units</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="beforeAutospacing">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Automatically Determine Spacing Above Paragraph</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="after">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Spacing Below Paragraph</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="afterLines">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Spacing Below Paragraph in Line Units</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="afterAutospacing">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Automatically Determine Spacing Below Paragraph</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="line">
+ <ref name="ST_SignedTwipsMeasure"/>
+ <xs:documentation>Spacing Between Lines in Paragraph</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lineRule">
+ <ref name="ST_LineSpacingRule"/>
+ <xs:documentation>Type of Spacing Between Lines</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Ind">
+ <optional>
+ <attribute name="left">
+ <ref name="ST_SignedTwipsMeasure"/>
+ <xs:documentation>Left Indentation</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="leftChars">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Left Indentation in Character Units</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="right">
+ <ref name="ST_SignedTwipsMeasure"/>
+ <xs:documentation>Right Indentation</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rightChars">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Right Indentation in Character Units</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="hanging">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Indentation Removed from First Line</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="hangingChars">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Indentation Removed From First Line in Character Units</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="firstLine">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Additional First Line Indentation</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="firstLineChars">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Additional First Line Indentation in Character Units</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_Jc">
+ <list>
+ <xs:documentation>Horizontal Alignment Type</xs:documentation>
+ <choice>
+<!-- Align Left -->
+ <value>left</value>
+<!-- Align Center -->
+ <value>center</value>
+<!-- Align Right -->
+ <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>
+ </list>
+ </define>
+ <define name="CT_Jc">
+ <attribute name="val">
+ <ref name="ST_Jc"/>
+ <xs:documentation>Alignment Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_View">
+ <list>
+ <xs:documentation>Document View Values</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_View">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Document View Setting Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Zoom">
+ <list>
+ <xs:documentation>Magnification Preset Values</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_Zoom">
+ <optional>
+ <attribute name="val">
+ <ref name="ST_Zoom"/>
+ <xs:documentation>Zoom Type</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="percent">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Zoom Percentage</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_WritingStyle">
+ <attribute name="lang">
+ <text/>
+ <xs:documentation>Writing Style Language</xs:documentation>
+ </attribute>
+ <attribute name="vendorID">
+ <text/>
+ <xs:documentation>Grammatical Engine ID</xs:documentation>
+ </attribute>
+ <attribute name="dllVersion">
+ <text/>
+ <xs:documentation>Grammatical Check Engine Version</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="nlCheck">
+ <text/>
+ <xs:documentation>Natural Language Grammar Check</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="checkStyle">
+ <text/>
+ <xs:documentation>Check Stylistic Rules With Grammar</xs:documentation>
+ </attribute>
+ <attribute name="appName">
+ <text/>
+ <xs:documentation>Application Name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Proof">
+ <list>
+ <xs:documentation>Proofing State Values</xs:documentation>
+ <choice>
+<!-- Check Completed -->
+ <value>clean</value>
+<!-- Check Not Completed -->
+ <value>dirty</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Proof">
+ <optional>
+ <attribute name="spelling">
+ <text/>
+ <xs:documentation>Spell Checking State</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="grammar">
+ <text/>
+ <xs:documentation>Grammatical Checking State</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_DocType">
+ <list>
+ <xs:documentation>Document Classification Values</xs:documentation>
+ <choice>
+<!-- Default Document -->
+ <value>notSpecified</value>
+<!-- Letter -->
+ <value>letter</value>
+<!-- E-Mail Message -->
+ <value>eMail</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_DocType">
+ <attribute name="val">
+ <ref name="ST_DocType"/>
+ <xs:documentation>Document Classification Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_DocProtect">
+ <list>
+ <xs:documentation>Document Protection Types</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_CryptProv">
+ <list>
+ <xs:documentation>Cryptographic Provider Types</xs:documentation>
+ <choice>
+<!-- AES Provider -->
+ <value>rsaAES</value>
+<!-- Any Provider -->
+ <value>rsaFull</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_AlgClass">
+ <list>
+ <xs:documentation>Cryptographic Algorithm Classes</xs:documentation>
+<!-- Hashing -->
+ <value>hash</value>
+ </list>
+ </define>
+ <define name="ST_AlgType">
+ <list>
+ <xs:documentation>Cryptographic Algorithm Types</xs:documentation>
+<!-- Any Type -->
+ <value>typeAny</value>
+ </list>
+ </define>
+ <define name="AG_Password">
+ <attribute name="cryptProviderType">
+ <ref name="ST_CryptProv"/>
+ <xs:documentation>Cryptographic Provider Type</xs:documentation>
+ </attribute>
+ <attribute name="cryptAlgorithmClass">
+ <ref name="ST_AlgClass"/>
+ <xs:documentation>Cryptographic Algorithm Class</xs:documentation>
+ </attribute>
+ <attribute name="cryptAlgorithmType">
+ <ref name="ST_AlgType"/>
+ <xs:documentation>Cryptographic Algorithm Type</xs:documentation>
+ </attribute>
+ <attribute name="cryptAlgorithmSid">
+ <text/>
+ <xs:documentation>Cryptographic Hashing Algorithm</xs:documentation>
+ </attribute>
+ <attribute name="cryptSpinCount">
+ <text/>
+ <xs:documentation>Iterations to Run Hashing Algorithm</xs:documentation>
+ </attribute>
+ <attribute name="cryptProvider">
+ <text/>
+ <xs:documentation>Cryptographic Provider</xs:documentation>
+ </attribute>
+ <attribute name="algIdExt">
+ <text/>
+ <xs:documentation>Cryptographic Algorithm Extensibility</xs:documentation>
+ </attribute>
+ <attribute name="algIdExtSource">
+ <text/>
+ <xs:documentation>Algorithm Extensibility Source</xs:documentation>
+ </attribute>
+ <attribute name="cryptProviderTypeExt">
+ <text/>
+ <xs:documentation>Cryptographic Provider Type Extensibility</xs:documentation>
+ </attribute>
+ <attribute name="cryptProviderTypeExtSource">
+ <text/>
+ <xs:documentation>Provider Type Extensibility Source</xs:documentation>
+ </attribute>
+ <attribute name="hash">
+ <data type="base64Binary">
+ <xs:documentation>Password Hash</xs:documentation>
+ </data>
+ <xs:documentation>Password Hash</xs:documentation>
+ </attribute>
+ <attribute name="salt">
+ <data type="base64Binary">
+ <xs:documentation>Salt for Password Verifier</xs:documentation>
+ </data>
+ <xs:documentation>Salt for Password Verifier</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_DocProtect">
+ <optional>
+ <attribute name="edit">
+ <ref name="ST_DocProtect"/>
+ <xs:documentation>Document Editing Restrictions</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="formatting">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Only Allow Formatting With Unlocked Styles</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="enforcement">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Enforce Document Protection Settings</xs:documentation>
+ </attribute>
+ <ref name="AG_Password"/>
+ </define>
+ <define name="ST_MailMergeDocType">
+ <list>
+ <xs:documentation>Source Document Types</xs:documentation>
+ <choice>
+<!-- Catalog Source Document -->
+ <value>catalog</value>
+<!-- Envelope Source Document -->
+ <value>envelopes</value>
+<!-- Mailing Label Source Document -->
+ <value>mailingLabels</value>
+<!-- Form Letter Source Document -->
+ <value>formLetters</value>
+<!-- E-Mail Source Document -->
+ <value>email</value>
+<!-- Fax Source Document -->
+ <value>fax</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_MailMergeDocType">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Mail Merge Source Document Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_MailMergeDataType">
+ <list>
+ <xs:documentation>Mail Merge Data Source Type Values</xs:documentation>
+ <choice>
+<!-- Text File Data Source -->
+ <value>textFile</value>
+<!-- Database Data Source -->
+ <value>database</value>
+<!-- Spreadsheet Data Source -->
+ <value>spreadsheet</value>
+<!-- Query Data Source -->
+ <value>query</value>
+<!-- Open Database Connectivity Data Source -->
+ <value>odbc</value>
+<!-- Office Data Source Object Data Source -->
+ <value>native</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_MailMergeDataType">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_MailMergeDest">
+ <list>
+ <xs:documentation>Merged Document Destination Types</xs:documentation>
+ <choice>
+<!-- Send Merged Documents to New Documents -->
+ <value>newDocument</value>
+<!-- Send Merged Documents to Printer -->
+ <value>printer</value>
+<!-- Send Merged Documents as E-mail Messages -->
+ <value>email</value>
+<!-- Send Merged Documents as Faxes -->
+ <value>fax</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_MailMergeDest">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Mail Merge Merged Document Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_MailMergeOdsoFMDFieldType">
+ <list>
+ <xs:documentation>Merge Field Mapping Types</xs:documentation>
+ <choice>
+<!-- Field Not Mapped -->
+ <value>null</value>
+<!-- Field Mapping to Data Source Column -->
+ <value>dbColumn</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_MailMergeOdsoFMDFieldType">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Merge Field Mapping Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TrackChangesView">
+ <optional>
+ <attribute name="markup">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Display Visual Indicator Of Markup Area</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="comments">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Display Comments</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="insDel">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Display Content Revisions</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="formatting">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Display Formatting Revisions</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="inkAnnotations">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Display Ink Annotations</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Kinsoku">
+ <attribute name="lang">
+ <ref name="ST_Lang"/>
+ <xs:documentation>Language For Which Custom Line Breaking Rule Applies</xs:documentation>
+ </attribute>
+ <attribute name="val">
+ <ref name="ST_String"/>
+ <xs:documentation>Characters For Custom Line Breaking Rule</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_TextDirection">
+ <list>
+ <xs:documentation>Text Flow Direction</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_TextDirection">
+ <attribute name="val">
+ <ref name="ST_TextDirection"/>
+ <xs:documentation>Direction of Text Flow</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_TextAlignment">
+ <list>
+ <xs:documentation>Vertical Text Alignment Types</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_TextAlignment">
+ <attribute name="val">
+ <ref name="ST_TextAlignment"/>
+ <xs:documentation>Vertical Character Alignment Position</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_DisplacedByCustomXml">
+ <list>
+ <xs:documentation>Location of Custom XML Markup Displacing an Annotation</xs:documentation>
+ <choice>
+<!-- Displaced by Next Custom XML Markup Tag -->
+ <value>next</value>
+<!-- Displaced by Previous Custom XML Markup Tag -->
+ <value>prev</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_AnnotationVMerge">
+ <list>
+ <xs:documentation>Table Cell Vertical Merge Revision Type</xs:documentation>
+ <choice>
+<!-- Vertically Merged Cell -->
+ <value>cont</value>
+<!-- Vertically Split Cell -->
+ <value>rest</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Markup">
+ <attribute name="id">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Annotation Identifier</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TrackChange">
+ <ref name="CT_Markup"/>
+ <attribute name="author">
+ <ref name="ST_String"/>
+ <xs:documentation>Annotation Author</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="date">
+ <ref name="ST_DateTime"/>
+ <xs:documentation>Annotation Date</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_CellMergeTrackChange">
+ <ref name="CT_TrackChange"/>
+ <optional>
+ <attribute name="vMerge">
+ <ref name="ST_AnnotationVMerge"/>
+ <xs:documentation>Revised Vertical Merge Setting</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="vMergeOrig">
+ <ref name="ST_AnnotationVMerge"/>
+ <xs:documentation>Vertical Merge Setting Removed by Revision</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_TrackChangeRange">
+ <ref name="CT_TrackChange"/>
+ <optional>
+ <attribute name="displacedByCustomXml">
+ <ref name="ST_DisplacedByCustomXml"/>
+ <xs:documentation>Annotation Marker Displaced By Custom XML Markup</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_MarkupRange">
+ <ref name="CT_Markup"/>
+ <optional>
+ <attribute name="displacedByCustomXml">
+ <ref name="ST_DisplacedByCustomXml"/>
+ <xs:documentation>Annotation Marker Relocated For Custom XML Markup</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_MarkupRangeBookmark">
+ <attribute name="id">
+ <text/>
+ <xs:documentation>Annotation Identifier</xs:documentation>
+ </attribute>
+ <ref name="CT_MarkupRange"/>
+ </define>
+ <define name="CT_BookmarkRange">
+ <ref name="CT_MarkupRangeBookmark"/>
+ <optional>
+ <attribute name="colFirst">
+ <text/>
+ <xs:documentation>First Table Column Covered By Bookmark</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="colLast">
+ <text/>
+ <xs:documentation>Last Table Column Covered By Bookmark</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Bookmark">
+ <ref name="CT_BookmarkRange"/>
+ <attribute name="name">
+ <text/>
+ <xs:documentation>Bookmark Name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_MoveBookmark">
+ <ref name="CT_Bookmark"/>
+ <attribute name="author">
+ <text/>
+ <xs:documentation>Annotation Author</xs:documentation>
+ </attribute>
+ <attribute name="date">
+ <text/>
+ <xs:documentation>Annotation Date</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Comment">
+ <attribute name="id">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Annotation Identifier</xs:documentation>
+ </attribute>
+ <ref name="CT_TrackChange"/>
+ <zeroOrMore>
+ <ref name="EG_BlockLevelElts"/>
+ </zeroOrMore>
+ <optional>
+ <attribute name="initials">
+ <ref name="ST_String"/>
+ <xs:documentation>Initials of Comment Author</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_TrackChangeNumbering">
+ <ref name="CT_TrackChange"/>
+ <optional>
+ <attribute name="original">
+ <text/>
+ <xs:documentation>Previous Numbering Value</xs:documentation>
+ </attribute>
+ </optional>
+ </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"/>
+ <optional>
+ <element name="sectPr">
+ <ref name="CT_SectPrBase"/>
+ </element>
+ </optional>
+ </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"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="EG_ContentRunContent"/>
+ <ref name="EG_OMathMathElements"/>
+ </choice>
+ </zeroOrMore>
+ </define>
+ <define name="EG_CellMarkupElements">
+ <choice>
+ <optional>
+ <element name="cellIns">
+ <ref name="CT_TrackChange"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cellDel">
+ <ref name="CT_TrackChange"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cellMerge">
+ <ref name="CT_CellMergeTrackChange"/>
+ </element>
+ </optional>
+ </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="moveFromRangeStart">
+ <ref name="CT_MoveBookmark"/>
+ </element>
+ <element name="moveFromRangeEnd">
+ <ref name="CT_MarkupRange"/>
+ </element>
+ <element name="moveToRangeStart">
+ <ref name="CT_MoveBookmark"/>
+ </element>
+ <element name="moveToRangeEnd">
+ <ref name="CT_MarkupRange"/>
+ </element>
+ <element name="commentRangeStart">
+ <ref name="CT_MarkupRange"/>
+ </element>
+ <element name="commentRangeEnd">
+ <ref name="CT_MarkupRange"/>
+ </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">
+ <optional>
+ <element name="ilvl">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="numId">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="numberingChange">
+ <ref name="CT_TrackChangeNumbering"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ins">
+ <ref name="CT_TrackChange"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_PBdr">
+ <optional>
+ <element name="top">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="left">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bottom">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="right">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="between">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bar">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Tabs">
+ <oneOrMore>
+ <element name="tab">
+ <ref name="CT_TabStop"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="ST_TextboxTightWrap">
+ <list>
+ <xs:documentation>Lines To Tight Wrap Within Text Box</xs:documentation>
+ <choice>
+<!-- Do Not Tight Wrap -->
+ <value>none</value>
+<!-- Tight Wrap All Lines -->
+ <value>allLines</value>
+<!-- Tight Wrap First and Last Lines -->
+ <value>firstAndLastLine</value>
+<!-- Tight Wrap First Line -->
+ <value>firstLineOnly</value>
+<!-- Tight Wrap Last Line -->
+ <value>lastLineOnly</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_TextboxTightWrap">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Lines to Tight Wrap to Paragraph Extents</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_PPrBase">
+ <optional>
+ <element name="pStyle">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="keepNext">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="keepLines">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pageBreakBefore">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="framePr">
+ <ref name="CT_FramePr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="widowControl">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="numPr">
+ <ref name="CT_NumPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="suppressLineNumbers">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pBdr">
+ <ref name="CT_PBdr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="shd">
+ <ref name="CT_Shd"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tabs">
+ <ref name="CT_Tabs"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="suppressAutoHyphens">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="kinsoku">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="wordWrap">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="overflowPunct">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="topLinePunct">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="autoSpaceDE">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="autoSpaceDN">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bidi">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="adjustRightInd">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="snapToGrid">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="spacing">
+ <ref name="CT_Spacing"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ind">
+ <ref name="CT_Ind"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="contextualSpacing">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="mirrorIndents">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="suppressOverlap">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="jc">
+ <ref name="CT_Jc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="textDirection">
+ <ref name="CT_TextDirection"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="textAlignment">
+ <ref name="CT_TextAlignment"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="textboxTightWrap">
+ <ref name="CT_TextboxTightWrap"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="outlineLvl">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="divId">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cnfStyle">
+ <ref name="CT_Cnf"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_PPr">
+ <ref name="CT_PPrBase"/>
+ <group>
+ <optional>
+ <element name="rPr">
+ <ref name="CT_ParaRPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sectPr">
+ <ref name="CT_SectPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pPrChange">
+ <ref name="CT_PPrChange"/>
+ </element>
+ </optional>
+ </group>
+ </define>
+ <define name="CT_Control">
+ <optional>
+ <attribute name="name">
+ <text/>
+ <xs:documentation>Unique Name for Embedded Control</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="shapeid">
+ <text/>
+ <xs:documentation>Associated VML Data Reference</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="r:id">
+ <ref name="ST_String"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Background">
+ <ref name="CT_PictureBase"/>
+ <optional>
+ <attribute name="color">
+ <text/>
+ <xs:documentation>Background Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeColor">
+ <text/>
+ <xs:documentation>Background Theme Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeTint">
+ <text/>
+ <xs:documentation>Border Theme Color Tint</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeShade">
+ <text/>
+ <xs:documentation>Border Theme Color Shade</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Rel">
+ <attribute name="r:id">
+ <ref name="ST_String"/>
+ </attribute>
+ </define>
+ <define name="CT_PictureBase">
+ <oneOrMore>
+ <optional>
+ <element>
+ <anyName/>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ </oneOrMore>
+ </define>
+ <define name="CT_Object">
+ <ref name="CT_PictureBase"/>
+ <optional>
+ <element name="control">
+ <ref name="CT_Control"/>
+ </element>
+ </optional>
+ <optional>
+ <attribute name="dxaOrig">
+ <text/>
+ <xs:documentation>Original Image Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dyaOrig">
+ <text/>
+ <xs:documentation>Original Image Height</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Picture">
+ <ref name="CT_PictureBase"/>
+ <group>
+ <optional>
+ <element name="movie">
+ <ref name="CT_Rel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="control">
+ <ref name="CT_Control"/>
+ </element>
+ </optional>
+ </group>
+ </define>
+ <define name="CT_Drawing">
+ <oneOrMore>
+ <choice>
+ <optional>
+ <ref name="anchor"/>
+ </optional>
+ <optional>
+ <ref name="inline"/>
+ </optional>
+ </choice>
+ </oneOrMore>
+ </define>
+ <define name="CT_SimpleField">
+ <group>
+ <optional>
+ <element name="fldData">
+ <ref name="CT_Text"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_PContent"/>
+ </zeroOrMore>
+ </group>
+ <attribute name="instr">
+ <text/>
+ <xs:documentation>Field Codes</xs:documentation>
+ </attribute>
+ <attribute name="fldLock">
+ <text/>
+ <xs:documentation>Field Should Not Be Recalculated</xs:documentation>
+ </attribute>
+ <attribute name="dirty">
+ <text/>
+ <xs:documentation>Field Result Invalidated</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_FldCharType">
+ <list>
+ <xs:documentation>Complex Field Character Type</xs:documentation>
+ <choice>
+<!-- Start Character -->
+ <value>begin</value>
+<!-- Separator Character -->
+ <value>separate</value>
+<!-- End Character -->
+ <value>end</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_InfoTextType">
+ <list>
+ <xs:documentation>Help or Status Text Type</xs:documentation>
+ <choice>
+<!-- Literal Text -->
+ <value>text</value>
+<!-- Glossary Document Entry -->
+ <value>autoText</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_FFHelpTextVal">
+ <data type="string">
+ <xs:documentation>Help Text Value</xs:documentation>
+ <param name="maxLength">256</param>
+ </data>
+ </define>
+ <define name="ST_FFStatusTextVal">
+ <data type="string">
+ <xs:documentation>Status Text Value</xs:documentation>
+ <param name="maxLength">140</param>
+ </data>
+ </define>
+ <define name="ST_FFName">
+ <data type="string">
+ <xs:documentation>Form Field Name Value</xs:documentation>
+ <param name="maxLength">65</param>
+ </data>
+ </define>
+ <define name="ST_FFTextType">
+ <list>
+ <xs:documentation>Text Box Form Field Type Values</xs:documentation>
+ <choice>
+<!-- Text Box -->
+ <value>regular</value>
+<!-- Number -->
+ <value>number</value>
+<!-- Date -->
+ <value>date</value>
+<!-- Current Time Display -->
+ <value>currentTime</value>
+<!-- Current Date Display -->
+ <value>currentDate</value>
+<!-- Field Calculation -->
+ <value>calculated</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_FFTextType">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Text Box Form Field Type Values</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FFName">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Form Field Name Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FldChar">
+ <choice>
+ <optional>
+ <element name="fldData">
+ <ref name="CT_Text"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ffData">
+ <ref name="CT_FFData"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="numberingChange">
+ <ref name="CT_TrackChangeNumbering"/>
+ </element>
+ </optional>
+ </choice>
+ <attribute name="fldCharType">
+ <ref name="ST_FldCharType"/>
+ <xs:documentation>Field Character Type</xs:documentation>
+ </attribute>
+ <attribute name="fldLock">
+ <text/>
+ <xs:documentation>Field Should Not Be Recalculated</xs:documentation>
+ </attribute>
+ <attribute name="dirty">
+ <text/>
+ <xs:documentation>Field Result Invalidated</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Hyperlink">
+ <zeroOrMore>
+ <ref name="EG_PContent"/>
+ </zeroOrMore>
+ <optional>
+ <attribute name="tgtFrame">
+ <text/>
+ <xs:documentation>Hyperlink Target Frame</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="tooltip">
+ <text/>
+ <xs:documentation>Associated String</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="docLocation">
+ <text/>
+ <xs:documentation>Location in Target Document</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="history">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Add To Viewed Hyperlinks</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="anchor">
+ <text/>
+ <xs:documentation>Hyperlink Anchor</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="r:id">
+ <ref name="ST_String"/>
+ </attribute>
+ </define>
+ <define name="CT_FFData">
+ <oneOrMore>
+ <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>
+ <optional>
+ <element name="entryMacro">
+ <ref name="CT_MacroName"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="exitMacro">
+ <ref name="CT_MacroName"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="helpText">
+ <ref name="CT_FFHelpText"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="statusText">
+ <ref name="CT_FFStatusText"/>
+ </element>
+ </optional>
+ <choice>
+ <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>
+ </choice>
+ </oneOrMore>
+ </define>
+ <define name="CT_FFHelpText">
+ <attribute name="type">
+ <text/>
+ <xs:documentation>Help Text Type</xs:documentation>
+ </attribute>
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Help Text Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FFStatusText">
+ <attribute name="type">
+ <text/>
+ <xs:documentation>Status Text Type</xs:documentation>
+ </attribute>
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Status Text Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FFCheckBox">
+ <choice>
+ <element name="size">
+ <ref name="CT_HpsMeasure"/>
+ </element>
+ <element name="sizeAuto">
+ <ref name="CT_OnOff"/>
+ </element>
+ </choice>
+ <optional>
+ <element name="default">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="checked">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_FFDDList">
+ <optional>
+ <element name="result">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="default">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="listEntry">
+ <ref name="CT_String"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_FFTextInput">
+ <optional>
+ <element name="type">
+ <ref name="CT_FFTextType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="default">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="maxLength">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="format">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_SectionMark">
+ <list>
+ <xs:documentation>Section Type</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_SectType">
+ <attribute name="val">
+ <ref name="ST_SectionMark"/>
+ <xs:documentation>Section Type Setting</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_PaperSource">
+ <attribute name="first">
+ <text/>
+ <xs:documentation>First Page Printer Tray Code</xs:documentation>
+ </attribute>
+ <attribute name="other">
+ <text/>
+ <xs:documentation>Non-First Page Printer Tray Code</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_NumberFormat">
+ <list>
+ <xs:documentation>Numbering Format</xs:documentation>
+ <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>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_PageOrientation">
+ <list>
+ <xs:documentation>Page Orientation</xs:documentation>
+ <choice>
+<!-- Portrait Mode -->
+ <value>portrait</value>
+<!-- Landscape Mode -->
+ <value>landscape</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_PageSz">
+ <optional>
+ <attribute name="w">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Page Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="h">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Page Height</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="orient">
+ <ref name="ST_PageOrientation"/>
+ <xs:documentation>Page Orientation</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="code">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Printer Paper Code</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_PageMar">
+ <attribute name="top">
+ <ref name="ST_SignedTwipsMeasure"/>
+ <xs:documentation>Top Margin Spacing</xs:documentation>
+ </attribute>
+ <attribute name="right">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Right Margin Spacing</xs:documentation>
+ </attribute>
+ <attribute name="bottom">
+ <ref name="ST_SignedTwipsMeasure"/>
+ <xs:documentation>Page Bottom Spacing</xs:documentation>
+ </attribute>
+ <attribute name="left">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Left Margin Spacing</xs:documentation>
+ </attribute>
+ <attribute name="header">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Spacing to Top of Header</xs:documentation>
+ </attribute>
+ <attribute name="footer">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Spacing to Bottom of Footer</xs:documentation>
+ </attribute>
+ <attribute name="gutter">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Page Gutter Spacing</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_PageBorderZOrder">
+ <list>
+ <xs:documentation>Page Border Z-Order</xs:documentation>
+ <choice>
+<!-- Page Border Ahead of Text -->
+ <value>front</value>
+<!-- Page Border Behind Text -->
+ <value>back</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_PageBorderDisplay">
+ <list>
+ <xs:documentation>Page Border Display Options</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_PageBorderOffset">
+ <list>
+ <xs:documentation>Page Border Positioning Base</xs:documentation>
+ <choice>
+<!-- Page Border Is Positioned Relative to Page Edges -->
+ <value>page</value>
+<!-- Page Border Is Positioned Relative to Text Extents -->
+ <value>text</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_PageBorders">
+ <group>
+ <optional>
+ <element name="top">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="left">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bottom">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="right">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="zOrder">
+ <ref name="ST_PageBorderZOrder"/>
+ <xs:documentation>Z-Ordering of Page Border</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="display">
+ <ref name="ST_PageBorderDisplay"/>
+ <xs:documentation>Pages to Display Page Borders</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="offsetFrom">
+ <ref name="ST_PageBorderOffset"/>
+ <xs:documentation>Page Border Positioning</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_ChapterSep">
+ <list>
+ <xs:documentation>Chapter Separator Types</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_LineNumberRestart">
+ <list>
+ <xs:documentation>Line Numbering Restart Position</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_LineNumber">
+ <optional>
+ <attribute name="countBy">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Line Number Increments to Display</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="start">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Line Numbering Starting Value</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distance">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Distance Between Text and Line Numbering</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="restart">
+ <ref name="ST_LineNumberRestart"/>
+ <xs:documentation>Line Numbering Restart Setting</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_PageNumber">
+ <optional>
+ <attribute name="fmt">
+ <ref name="ST_NumberFormat"/>
+ <xs:documentation>Page Number Format</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="start">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Starting Page Number</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="chapStyle">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Chapter Heading Style</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="chapSep">
+ <ref name="ST_ChapterSep"/>
+ <xs:documentation>Chapter Separator Character</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Column">
+ <optional>
+ <attribute name="w">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Column Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="space">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Space Before Following Column</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Columns">
+ <zeroOrMore>
+ <element name="col">
+ <ref name="CT_Column"/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <attribute name="equalWidth">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Equal Column Widths</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="space">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Spacing Between Equal Width Columns</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="num">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Number of Equal Width Columns</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sep">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Draw Line Between Columns</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_VerticalJc">
+ <list>
+ <xs:documentation>Vertical Alignment Type</xs:documentation>
+ <choice>
+<!-- Align Top -->
+ <value>top</value>
+<!-- Align Center -->
+ <value>center</value>
+<!-- Vertical Justification -->
+ <value>both</value>
+<!-- Align Bottom -->
+ <value>bottom</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_VerticalJc">
+ <attribute name="val">
+ <ref name="ST_VerticalJc"/>
+ <xs:documentation>Vertical Alignment Setting</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_DocGrid">
+ <list>
+ <xs:documentation>Document Grid Types</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_DocGrid">
+ <attribute name="type">
+ <text/>
+ <xs:documentation>Document Grid Type</xs:documentation>
+ </attribute>
+ <attribute name="linePitch">
+ <text/>
+ <xs:documentation>Document Grid Line Pitch</xs:documentation>
+ </attribute>
+ <attribute name="charSpace">
+ <text/>
+ <xs:documentation>Document Grid Character Pitch</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_HdrFtr">
+ <list>
+ <xs:documentation>Header or Footer Type</xs:documentation>
+ <choice>
+<!-- Even Numbered Pages Only -->
+ <value>even</value>
+<!-- Default Header or Footer -->
+ <value>default</value>
+<!-- First Page Only -->
+ <value>first</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_FtnEdn">
+ <list>
+ <xs:documentation>Footnote or Endnote Type</xs:documentation>
+ <choice>
+<!-- Normal Footnote/Endnote -->
+ <value>normal</value>
+<!-- Separator -->
+ <value>separator</value>
+<!-- Continuation Separator -->
+ <value>continuationSeparator</value>
+<!-- Continuation Notice Separator -->
+ <value>continuationNotice</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_HdrFtrRef">
+ <ref name="CT_Rel"/>
+ <attribute name="type">
+ <ref name="ST_HdrFtr"/>
+ <xs:documentation>Header or Footer Type</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="r:id">
+ <ref name="ST_String"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="EG_HdrFtrReferences">
+ <choice>
+ <optional>
+ <element name="headerReference">
+ <ref name="CT_HdrFtrRef"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="footerReference">
+ <ref name="CT_HdrFtrRef"/>
+ </element>
+ </optional>
+ </choice>
+ </define>
+ <define name="CT_HdrFtr">
+ <oneOrMore>
+ <ref name="EG_BlockLevelElts"/>
+ </oneOrMore>
+ </define>
+ <define name="EG_SectPrContents">
+ <optional>
+ <element name="footnotePr">
+ <ref name="CT_FtnProps"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="endnotePr">
+ <ref name="CT_EdnProps"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="type">
+ <ref name="CT_SectType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pgSz">
+ <ref name="CT_PageSz"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pgMar">
+ <ref name="CT_PageMar"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="paperSrc">
+ <ref name="CT_PaperSource"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pgBorders">
+ <ref name="CT_PageBorders"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lnNumType">
+ <ref name="CT_LineNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pgNumType">
+ <ref name="CT_PageNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cols">
+ <ref name="CT_Columns"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="formProt">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="vAlign">
+ <ref name="CT_VerticalJc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noEndnote">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="titlePg">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="textDirection">
+ <ref name="CT_TextDirection"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bidi">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rtlGutter">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="docGrid">
+ <ref name="CT_DocGrid"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="printerSettings">
+ <ref name="CT_Rel"/>
+ </element>
+ </optional>
+ </define>
+ <define name="AG_SectPrAttributes">
+ <attribute name="rsidRPr">
+ <text/>
+ <xs:documentation>Physical Section Mark Character Revision ID</xs:documentation>
+ </attribute>
+ <attribute name="rsidDel">
+ <text/>
+ <xs:documentation>Section Deletion Revision ID</xs:documentation>
+ </attribute>
+ <attribute name="rsidR">
+ <text/>
+ <xs:documentation>Section Addition Revision ID</xs:documentation>
+ </attribute>
+ <attribute name="rsidSect">
+ <text/>
+ <xs:documentation>Section Properties Revision ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SectPrBase">
+ <optional>
+ <ref name="EG_SectPrContents"/>
+ </optional>
+ <ref name="AG_SectPrAttributes"/>
+ </define>
+ <define name="CT_SectPr">
+ <group>
+ <zeroOrMore>
+ <ref name="EG_HdrFtrReferences"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="EG_SectPrContents"/>
+ </optional>
+ <optional>
+ <element name="sectPrChange">
+ <ref name="CT_SectPrChange"/>
+ </element>
+ </optional>
+ </group>
+ <ref name="AG_SectPrAttributes"/>
+ </define>
+ <define name="ST_BrType">
+ <list>
+ <xs:documentation>Break Types</xs:documentation>
+ <choice>
+<!-- Page Break -->
+ <value>page</value>
+<!-- Column Break -->
+ <value>column</value>
+<!-- Line Break -->
+ <value>textWrapping</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_BrClear">
+ <list>
+ <xs:documentation>Line Break Text Wrapping Restart Location</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_Br">
+ <optional>
+ <attribute name="type">
+ <ref name="ST_BrType"/>
+ <xs:documentation>Break Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="clear">
+ <ref name="ST_BrClear"/>
+ <xs:documentation>Restart Location For Text Wrapping Break</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_PTabAlignment">
+ <list>
+ <xs:documentation>Absolute Position Tab Alignment</xs:documentation>
+ <choice>
+<!-- Left -->
+ <value>left</value>
+<!-- Center -->
+ <value>center</value>
+<!-- Right -->
+ <value>right</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_PTabRelativeTo">
+ <list>
+ <xs:documentation>Absolute Position Tab Positioning Base</xs:documentation>
+ <choice>
+<!-- Relative To Text Margins -->
+ <value>margin</value>
+<!-- Relative To Indents -->
+ <value>indent</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_PTabLeader">
+ <list>
+ <xs:documentation>Absolute Position Tab Leader Character</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_PTab">
+ <attribute name="alignment">
+ <ref name="ST_PTabAlignment"/>
+ <xs:documentation>Positional Tab Stop Alignment</xs:documentation>
+ </attribute>
+ <attribute name="relativeTo">
+ <ref name="ST_PTabRelativeTo"/>
+ <xs:documentation>Positional Tab Base</xs:documentation>
+ </attribute>
+ <attribute name="leader">
+ <ref name="ST_PTabLeader"/>
+ <xs:documentation>Tab Leader Character</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Sym">
+ <attribute name="font">
+ <text/>
+ <xs:documentation>Symbol Character Font</xs:documentation>
+ </attribute>
+ <attribute name="char">
+ <ref name="ST_ShortHexNumber"/>
+ <xs:documentation>Symbol Character Code</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_ProofErr">
+ <list>
+ <xs:documentation>Proofing Error Type</xs:documentation>
+ <choice>
+<!-- Start of Region Marked as Spelling Error -->
+ <value>spellStart</value>
+<!-- End of Region Marked as Spelling Error -->
+ <value>spellEnd</value>
+<!-- Start of Region Marked as Grammatical Error -->
+ <value>gramStart</value>
+<!-- End of Region Marked as Grammatical Error -->
+ <value>gramEnd</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_ProofErr">
+ <attribute name="type">
+ <text/>
+ <xs:documentation>Proofing Error Anchor Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_EdGrp">
+ <list>
+ <xs:documentation>Range Permision Editing Group</xs:documentation>
+ <choice>
+<!-- No Users Have Editing Permissions -->
+ <value>none</value>
+<!-- All Users Have Editing Permissions -->
+ <value>everyone</value>
+<!-- Administrator Group -->
+ <value>administrators</value>
+<!-- Contributors Group -->
+ <value>contributors</value>
+<!-- Editors Group -->
+ <value>editors</value>
+<!-- Owners Group -->
+ <value>owners</value>
+<!-- Current Group -->
+ <value>current</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Perm">
+ <attribute name="id">
+ <text/>
+ <xs:documentation>Annotation ID</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="displacedByCustomXml">
+ <text/>
+ <xs:documentation>Annotation Displaced By Custom XML Markup</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_PermStart">
+ <ref name="CT_Perm"/>
+ <optional>
+ <attribute name="edGrp">
+ <text/>
+ <xs:documentation>Editor Group For Range Permission</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ed">
+ <text/>
+ <xs:documentation>Single User For Range Permission</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="colFirst">
+ <text/>
+ <xs:documentation>First Table Column Covered By Range Permission</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="colLast">
+ <text/>
+ <xs:documentation>Last Table Column Covered By Range Permission</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Text">
+ <ref name="ST_String"/>
+ <optional>
+ <attribute name="xml:space">
+ <text/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_FtnEdnRefChar">
+ <empty/>
+ </define>
+ <define name="CT_FtnEdnSep">
+ <empty/>
+ </define>
+ <define name="CT_FtnEdnCont">
+ <empty/>
+ </define>
+ <define name="CT_PgNum">
+ <empty/>
+ </define>
+ <define name="CT_Cr">
+ <empty/>
+ </define>
+ <define name="CT_Tab">
+ <empty/>
+ </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>
+ <optional>
+ <element name="softHyphen">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="dayShort">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="monthShort">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="yearShort">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="dayLong">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="monthLong">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="yearLong">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="annotationRef">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="footnoteRef">
+ <ref name="CT_FtnEdnRefChar"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="endnoteRef">
+ <ref name="CT_FtnEdnRefChar"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="separator">
+ <ref name="CT_FtnEdnSep"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="continuationSeparator">
+ <ref name="CT_FtnEdnCont"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sym">
+ <ref name="CT_Sym"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pgNum">
+ <ref name="CT_PgNum"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cr">
+ <ref name="CT_Cr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tab">
+ <ref name="CT_Tab"/>
+ </element>
+ </optional>
+ <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>
+ <optional>
+ <element name="ptab">
+ <ref name="CT_PTab"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lastRenderedPageBreak">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ </choice>
+ </define>
+ <define name="CT_R">
+ <group>
+ <optional>
+ <ref name="EG_RPr"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_RunInnerContent"/>
+ </zeroOrMore>
+ </group>
+ <attribute name="rsidRPr">
+ <text/>
+ <xs:documentation>Revision Identifier for Run Properties</xs:documentation>
+ </attribute>
+ <attribute name="rsidDel">
+ <text/>
+ <xs:documentation>Revision Identifier for Run Deletion</xs:documentation>
+ </attribute>
+ <attribute name="rsidR">
+ <text/>
+ <xs:documentation>Revision Identifier for Run</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Hint">
+ <list>
+ <xs:documentation>Font Type Hint</xs:documentation>
+ <choice>
+<!-- High ANSI Font -->
+ <value>default</value>
+<!-- East Asian Font -->
+ <value>eastAsia</value>
+<!-- Complex Script Font -->
+ <value>cs</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_Theme">
+ <list>
+ <xs:documentation>Theme Font</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_Fonts">
+ <attribute name="hint">
+ <ref name="ST_Hint"/>
+ <xs:documentation>Font Content Type</xs:documentation>
+ </attribute>
+ <attribute name="ascii">
+ <ref name="ST_String"/>
+ <xs:documentation>ASCII Font</xs:documentation>
+ </attribute>
+ <attribute name="hAnsi">
+ <ref name="ST_String"/>
+ <xs:documentation>High ANSI Font</xs:documentation>
+ </attribute>
+ <attribute name="eastAsia">
+ <ref name="ST_String"/>
+ <xs:documentation>East Asian Font</xs:documentation>
+ </attribute>
+ <attribute name="cs">
+ <ref name="ST_String"/>
+ <xs:documentation>Complex Script Font</xs:documentation>
+ </attribute>
+ <attribute name="asciiTheme">
+ <ref name="ST_Theme"/>
+ <xs:documentation>ASCII Theme Font</xs:documentation>
+ </attribute>
+ <attribute name="hAnsiTheme">
+ <ref name="ST_Theme"/>
+ <xs:documentation>High ANSI Theme Font</xs:documentation>
+ </attribute>
+ <attribute name="eastAsiaTheme">
+ <ref name="ST_Theme"/>
+ <xs:documentation>East Asian Theme Font</xs:documentation>
+ </attribute>
+ <attribute name="cstheme">
+ <ref name="ST_Theme"/>
+ <xs:documentation>Complex Script Theme Font</xs:documentation>
+ </attribute>
+ </define>
+ <define name="EG_RPrBase">
+ <optional>
+ <element name="rStyle">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rFonts">
+ <ref name="CT_Fonts"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="b">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bCs">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="i">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="iCs">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="caps">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="smallCaps">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="strike">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="dstrike">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="outline">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="shadow">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="emboss">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="imprint">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noProof">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="snapToGrid">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="vanish">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="webHidden">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="color">
+ <ref name="CT_Color"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="spacing">
+ <ref name="CT_SignedTwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="w">
+ <ref name="CT_TextScale"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="kern">
+ <ref name="CT_HpsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="position">
+ <ref name="CT_SignedHpsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sz">
+ <ref name="CT_HpsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="szCs">
+ <ref name="CT_HpsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="highlight">
+ <ref name="CT_Highlight"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="u">
+ <ref name="CT_Underline"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="effect">
+ <ref name="CT_TextEffect"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bdr">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="shd">
+ <ref name="CT_Shd"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="fitText">
+ <ref name="CT_FitText"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="vertAlign">
+ <ref name="CT_VerticalAlignRun"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rtl">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cs">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="em">
+ <ref name="CT_Em"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lang">
+ <ref name="CT_Language"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="eastAsianLayout">
+ <ref name="CT_EastAsianLayout"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="specVanish">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="oMath">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="EG_RPrContent">
+ <optional>
+ <ref name="EG_RPrBase"/>
+ </optional>
+ <optional>
+ <element name="rPrChange">
+ <ref name="CT_RPrChange"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_RPr">
+ <optional>
+ <ref name="EG_RPrContent"/>
+ </optional>
+ </define>
+ <define name="EG_RPr">
+ <optional>
+ <element name="rPr">
+ <ref name="CT_RPr"/>
+ </element>
+ </optional>
+ </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">
+ <zeroOrMore>
+ <ref name="EG_RPrBase"/>
+ </zeroOrMore>
+ </define>
+ <define name="CT_ParaRPrOriginal">
+ <optional>
+ <ref name="EG_ParaRPrTrackChanges"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_RPrBase"/>
+ </zeroOrMore>
+ </define>
+ <define name="CT_ParaRPr">
+ <optional>
+ <ref name="EG_ParaRPrTrackChanges"/>
+ </optional>
+ <optional>
+ <ref name="EG_RPrBase"/>
+ </optional>
+ <optional>
+ <element name="rPrChange">
+ <ref name="CT_ParaRPrChange"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_ParaTrackChange">
+ <ref name="CT_TrackChange"/>
+ </define>
+ <define name="EG_ParaRPrTrackChanges">
+ <optional>
+ <element name="ins">
+ <ref name="CT_ParaTrackChange"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="del">
+ <ref name="CT_ParaTrackChange"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="moveFrom">
+ <ref name="CT_TrackChange"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="moveTo">
+ <ref name="CT_TrackChange"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_AltChunk">
+ <optional>
+ <element name="altChunkPr">
+ <ref name="CT_AltChunkPr"/>
+ </element>
+ </optional>
+ <optional>
+ <attribute name="r:id">
+ <ref name="ST_String"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_AltChunkPr">
+ <optional>
+ <element name="matchSrc">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_RubyAlign">
+ <list>
+ <xs:documentation>Phonetic Guide Text Alignment</xs:documentation>
+ <choice>
+<!-- Center -->
+ <value>center</value>
+<!-- Distribute All Characters -->
+ <value>distributeLetter</value>
+<!-- Distribute all Characters w/ Additional Space On Either Side -->
+ <value>distributeSpace</value>
+<!-- Left Aligned -->
+ <value>left</value>
+<!-- Right Aligned -->
+ <value>right</value>
+<!-- Vertically Aligned to Right of Base Text -->
+ <value>rightVertical</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_RubyAlign">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Phonetic Guide Text Alignment Value</xs:documentation>
+ </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>
+ <optional>
+ <element name="dirty">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="EG_RubyContent">
+ <choice>
+ <element name="r">
+ <ref name="CT_R"/>
+ </element>
+ <zeroOrMore>
+ <ref name="EG_RunLevelElts"/>
+ </zeroOrMore>
+ </choice>
+ </define>
+ <define name="CT_RubyContent">
+ <zeroOrMore>
+ <ref name="EG_RubyContent"/>
+ </zeroOrMore>
+ </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="ST_Lock">
+ <list>
+ <xs:documentation>Locking Types</xs:documentation>
+ <choice>
+<!-- SDT Cannot Be Deleted -->
+ <value>sdtLocked</value>
+<!-- Contents Cannot Be Edited At Runtime -->
+ <value>contentLocked</value>
+<!-- No Locking -->
+ <value>unlocked</value>
+<!-- Contents Cannot Be Edited At Runtime And SDT Cannot Be Deleted -->
+ <value>sdtContentLocked</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Lock">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Locking Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SdtListItem">
+ <attribute name="displayText">
+ <text/>
+ <xs:documentation>List Entry Display Text</xs:documentation>
+ </attribute>
+ <attribute name="value">
+ <text/>
+ <xs:documentation>List Entry Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_SdtDateMappingType">
+ <list>
+ <xs:documentation>Date Storage Format Types</xs:documentation>
+ <choice>
+<!-- Same As Display -->
+ <value>text</value>
+<!-- XML Schema Date Format -->
+ <value>date</value>
+<!-- XML Schema DateTime Format -->
+ <value>dateTime</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_SdtDateMappingType">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Date Storage Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_CalendarType">
+ <list>
+ <xs:documentation>Calendar Types</xs:documentation>
+ <choice>
+<!-- Gregorian -->
+ <value>gregorian</value>
+<!-- Hijri -->
+ <value>hijri</value>
+<!-- Hebrew -->
+ <value>hebrew</value>
+<!-- Taiwan -->
+ <value>taiwan</value>
+<!-- Japanese Emperor Era -->
+ <value>japan</value>
+<!-- Thai -->
+ <value>thai</value>
+<!-- Korean Tangun Era -->
+ <value>korea</value>
+<!-- Saka Era -->
+ <value>saka</value>
+<!-- Gregorian transliterated English -->
+ <value>gregorianXlitEnglish</value>
+<!-- Gregorian transliterated French -->
+ <value>gregorianXlitFrench</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_CalendarType">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Calendar Type Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SdtDate">
+ <group>
+ <optional>
+ <element name="dateFormat">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lid">
+ <ref name="CT_Lang"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="storeMappedDataAs">
+ <ref name="CT_SdtDateMappingType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="calendar">
+ <ref name="CT_CalendarType"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="fullDate">
+ <text/>
+ <xs:documentation>Last Known Date in XML Schema DateTime Format</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_SdtComboBox">
+ <zeroOrMore>
+ <element name="listItem">
+ <ref name="CT_SdtListItem"/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <attribute name="lastValue">
+ <text/>
+ <xs:documentation>Combo Box Last Saved Value</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_SdtDocPart">
+ <optional>
+ <element name="docPartGallery">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="docPartCategory">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="docPartUnique">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_SdtDropDownList">
+ <zeroOrMore>
+ <element name="listItem">
+ <ref name="CT_SdtListItem"/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <attribute name="lastValue">
+ <text/>
+ <xs:documentation>Drop-down List Last Saved Value</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Placeholder">
+ <element name="docPart">
+ <ref name="CT_String"/>
+ </element>
+ </define>
+ <define name="CT_SdtText">
+ <attribute name="multiLine">
+ <text/>
+ <xs:documentation>Allow Soft Line Breaks</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_DataBinding">
+ <attribute name="prefixMappings">
+ <text/>
+ <xs:documentation>XML Namespace Prefix Mappings</xs:documentation>
+ </attribute>
+ <attribute name="xpath">
+ <text/>
+ <xs:documentation>XPath</xs:documentation>
+ </attribute>
+ <attribute name="storeItemID">
+ <text/>
+ <xs:documentation>Custom XML Data Storage ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SdtPr">
+ <oneOrMore>
+ <choice>
+ <optional>
+ <element name="rPr">
+ <ref name="CT_RPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="alias">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lock">
+ <ref name="CT_Lock"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="placeholder">
+ <ref name="CT_Placeholder"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="showingPlcHdr">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="dataBinding">
+ <ref name="CT_DataBinding"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="temporary">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="id">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tag">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <choice>
+ <element name="equation">
+ <ref name="CT_Empty"/>
+ </element>
+ <element name="comboBox">
+ <ref name="CT_SdtComboBox"/>
+ </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_Empty"/>
+ </element>
+ <element name="richText">
+ <ref name="CT_Empty"/>
+ </element>
+ <element name="text">
+ <ref name="CT_SdtText"/>
+ </element>
+ <element name="citation">
+ <ref name="CT_Empty"/>
+ </element>
+ <element name="group">
+ <ref name="CT_Empty"/>
+ </element>
+ <element name="bibliography">
+ <ref name="CT_Empty"/>
+ </element>
+ </choice>
+ </optional>
+ </choice>
+ </oneOrMore>
+ </define>
+ <define name="CT_SdtEndPr">
+ <oneOrMore>
+ <optional>
+ <element name="rPr">
+ <ref name="CT_RPr"/>
+ </element>
+ </optional>
+ </oneOrMore>
+ </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="r">
+ <ref name="CT_R"/>
+ </element>
+ <zeroOrMore>
+ <ref name="EG_RunLevelElts"/>
+ </zeroOrMore>
+ </choice>
+ </define>
+ <define name="CT_SdtContentRun">
+ <zeroOrMore>
+ <ref name="EG_PContent"/>
+ </zeroOrMore>
+ </define>
+ <define name="EG_ContentBlockContent">
+ <choice>
+ <element name="customXml">
+ <ref name="CT_CustomXmlBlock"/>
+ </element>
+ <element name="sdt">
+ <ref name="CT_SdtBlock"/>
+ </element>
+ <zeroOrMore>
+ <element name="p">
+ <ref name="CT_P"/>
+ </element>
+ </zeroOrMore>
+ <zeroOrMore>
+ <element name="tbl">
+ <ref name="CT_Tbl"/>
+ </element>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="EG_RunLevelElts"/>
+ </zeroOrMore>
+ </choice>
+ </define>
+ <define name="CT_SdtContentBlock">
+ <zeroOrMore>
+ <ref name="EG_ContentBlockContent"/>
+ </zeroOrMore>
+ </define>
+ <define name="EG_ContentRowContent">
+ <choice>
+ <zeroOrMore>
+ <element name="tr">
+ <ref name="CT_Row"/>
+ </element>
+ </zeroOrMore>
+ <element name="customXml">
+ <ref name="CT_CustomXmlRow"/>
+ </element>
+ <element name="sdt">
+ <ref name="CT_SdtRow"/>
+ </element>
+ <zeroOrMore>
+ <ref name="EG_RunLevelElts"/>
+ </zeroOrMore>
+ </choice>
+ </define>
+ <define name="CT_SdtContentRow">
+ <zeroOrMore>
+ <ref name="EG_ContentRowContent"/>
+ </zeroOrMore>
+ </define>
+ <define name="EG_ContentCellContent">
+ <choice>
+ <zeroOrMore>
+ <element name="tc">
+ <ref name="CT_Tc"/>
+ </element>
+ </zeroOrMore>
+ <element name="customXml">
+ <ref name="CT_CustomXmlCell"/>
+ </element>
+ <element name="sdt">
+ <ref name="CT_SdtCell"/>
+ </element>
+ <zeroOrMore>
+ <ref name="EG_RunLevelElts"/>
+ </zeroOrMore>
+ </choice>
+ </define>
+ <define name="CT_SdtContentCell">
+ <zeroOrMore>
+ <ref name="EG_ContentCellContent"/>
+ </zeroOrMore>
+ </define>
+ <define name="CT_SdtBlock">
+ <optional>
+ <element name="sdtPr">
+ <ref name="CT_SdtPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sdtEndPr">
+ <ref name="CT_SdtEndPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sdtContent">
+ <ref name="CT_SdtContentBlock"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_SdtRun">
+ <optional>
+ <element name="sdtPr">
+ <ref name="CT_SdtPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sdtEndPr">
+ <ref name="CT_SdtEndPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sdtContent">
+ <ref name="CT_SdtContentRun"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_SdtCell">
+ <optional>
+ <element name="sdtPr">
+ <ref name="CT_SdtPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sdtEndPr">
+ <ref name="CT_SdtEndPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sdtContent">
+ <ref name="CT_SdtContentCell"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_SdtRow">
+ <optional>
+ <element name="sdtPr">
+ <ref name="CT_SdtPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sdtEndPr">
+ <ref name="CT_SdtEndPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sdtContent">
+ <ref name="CT_SdtContentRow"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Attr">
+ <attribute name="uri">
+ <text/>
+ <xs:documentation>Namespace</xs:documentation>
+ </attribute>
+ <attribute name="name">
+ <text/>
+ <xs:documentation>Name</xs:documentation>
+ </attribute>
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_CustomXmlRun">
+ <group>
+ <optional>
+ <element name="customXmlPr">
+ <ref name="CT_CustomXmlPr"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_PContent"/>
+ </zeroOrMore>
+ </group>
+ <attribute name="uri">
+ <text/>
+ <xs:documentation>Custom XML Markup Namespace</xs:documentation>
+ </attribute>
+ <attribute name="element">
+ <text/>
+ <xs:documentation>Element name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SmartTagRun">
+ <group>
+ <optional>
+ <element name="smartTagPr">
+ <ref name="CT_SmartTagPr"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_PContent"/>
+ </zeroOrMore>
+ </group>
+ <attribute name="uri">
+ <text/>
+ <xs:documentation>Smart Tag Namespace</xs:documentation>
+ </attribute>
+ <attribute name="element">
+ <text/>
+ <xs:documentation>Smart Tag Name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_CustomXmlBlock">
+ <group>
+ <optional>
+ <element name="customXmlPr">
+ <ref name="CT_CustomXmlPr"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_ContentBlockContent"/>
+ </zeroOrMore>
+ </group>
+ <attribute name="uri">
+ <text/>
+ <xs:documentation>Custom XML Element Namespace</xs:documentation>
+ </attribute>
+ <attribute name="element">
+ <text/>
+ <xs:documentation>Custom XML Element Name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_CustomXmlPr">
+ <optional>
+ <element name="placeholder">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="attr">
+ <ref name="CT_Attr"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_CustomXmlRow">
+ <group>
+ <optional>
+ <element name="customXmlPr">
+ <ref name="CT_CustomXmlPr"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_ContentRowContent"/>
+ </zeroOrMore>
+ </group>
+ <attribute name="uri">
+ <text/>
+ <xs:documentation>Custom XML Element Namespace</xs:documentation>
+ </attribute>
+ <attribute name="element">
+ <text/>
+ <xs:documentation>Custom XML Element Name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_CustomXmlCell">
+ <group>
+ <optional>
+ <element name="customXmlPr">
+ <ref name="CT_CustomXmlPr"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_ContentCellContent"/>
+ </zeroOrMore>
+ </group>
+ <attribute name="uri">
+ <text/>
+ <xs:documentation>Custom XML Element Namespace</xs:documentation>
+ </attribute>
+ <attribute name="element">
+ <text/>
+ <xs:documentation>Custom XML Element Name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SmartTagPr">
+ <zeroOrMore>
+ <element name="attr">
+ <ref name="CT_Attr"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="EG_PContent">
+ <choice>
+ <zeroOrMore>
+ <ref name="EG_ContentRunContent"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <element name="fldSimple">
+ <ref name="CT_SimpleField"/>
+ </element>
+ </zeroOrMore>
+ <element name="hyperlink">
+ <ref name="CT_Hyperlink"/>
+ </element>
+ <element name="subDoc">
+ <ref name="CT_Rel"/>
+ </element>
+ </choice>
+ </define>
+ <define name="CT_P">
+ <group>
+ <optional>
+ <element name="pPr">
+ <ref name="CT_PPr"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_PContent"/>
+ </zeroOrMore>
+ </group>
+ <attribute name="rsidRPr">
+ <text/>
+ <xs:documentation>Revision Identifier for Paragraph Glyph Formatting</xs:documentation>
+ </attribute>
+ <attribute name="rsidR">
+ <text/>
+ <xs:documentation>Revision Identifier for Paragraph</xs:documentation>
+ </attribute>
+ <attribute name="rsidDel">
+ <text/>
+ <xs:documentation>Revision Identifier for Paragraph Deletion</xs:documentation>
+ </attribute>
+ <attribute name="rsidP">
+ <text/>
+ <xs:documentation>Revision Identifier for Paragraph Properties</xs:documentation>
+ </attribute>
+ <attribute name="rsidRDefault">
+ <text/>
+ <xs:documentation>Default Revision Identifier for Runs</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_TblWidth">
+ <list>
+ <xs:documentation>Table Width Units</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_Height">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Table Row Height</xs:documentation>
+ </attribute>
+ <attribute name="hRule">
+ <text/>
+ <xs:documentation>Table Row Height Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TblWidth">
+ <attribute name="w">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Table Width Value</xs:documentation>
+ </attribute>
+ <attribute name="type">
+ <ref name="ST_TblWidth"/>
+ <xs:documentation>Table Width Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TblGridCol">
+ <attribute name="w">
+ <text/>
+ <xs:documentation>Grid Column Width</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TblGridBase">
+ <zeroOrMore>
+ <element name="gridCol">
+ <ref name="CT_TblGridCol"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_TblGrid">
+ <ref name="CT_TblGridBase"/>
+ <optional>
+ <element name="tblGridChange">
+ <ref name="CT_TblGridChange"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_TcBorders">
+ <optional>
+ <element name="top">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="left">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bottom">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="right">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="insideH">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="insideV">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tl2br">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tr2bl">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_TcMar">
+ <optional>
+ <element name="top">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="left">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bottom">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="right">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_Merge">
+ <list>
+ <xs:documentation>Merged Cell Type</xs:documentation>
+ <choice>
+<!-- Continue Merged Region -->
+ <value>continue</value>
+<!-- Start/Restart Merged Region -->
+ <value>restart</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_VMerge">
+ <attribute name="val">
+ <ref name="ST_Merge"/>
+ <xs:documentation>Vertical Merge Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_HMerge">
+ <attribute name="val">
+ <ref name="ST_Merge"/>
+ <xs:documentation>Horizontal Merge Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TcPrBase">
+ <optional>
+ <element name="cnfStyle">
+ <ref name="CT_Cnf"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tcW">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="gridSpan">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hMerge">
+ <ref name="CT_HMerge"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="vMerge">
+ <ref name="CT_VMerge"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tcBorders">
+ <ref name="CT_TcBorders"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="shd">
+ <ref name="CT_Shd"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noWrap">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tcMar">
+ <ref name="CT_TcMar"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="textDirection">
+ <ref name="CT_TextDirection"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tcFitText">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="vAlign">
+ <ref name="CT_VerticalJc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hideMark">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_TcPr">
+ <ref name="CT_TcPrInner"/>
+ <optional>
+ <element name="tcPrChange">
+ <ref name="CT_TcPrChange"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_TcPrInner">
+ <ref name="CT_TcPrBase"/>
+ <optional>
+ <ref name="EG_CellMarkupElements"/>
+ </optional>
+ </define>
+ <define name="CT_Tc">
+ <optional>
+ <element name="tcPr">
+ <ref name="CT_TcPr"/>
+ </element>
+ </optional>
+ <oneOrMore>
+ <ref name="EG_BlockLevelElts"/>
+ </oneOrMore>
+ </define>
+ <define name="ST_Cnf">
+ <data type="string">
+ <xs:documentation>Conditional Formatting Bitmask</xs:documentation>
+ <param name="length">12</param>
+ <param name="pattern">[01]*</param>
+ </data>
+ </define>
+ <define name="CT_Cnf">
+ <attribute name="val">
+ <ref name="ST_Cnf"/>
+ <xs:documentation>Conditional Formatting Bit Mask</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TrPrBase">
+ <oneOrMore>
+ <choice>
+ <optional>
+ <element name="cnfStyle">
+ <ref name="CT_Cnf"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="divId">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="gridBefore">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="gridAfter">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="wBefore">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="wAfter">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cantSplit">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="trHeight">
+ <ref name="CT_Height"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblHeader">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblCellSpacing">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="jc">
+ <ref name="CT_Jc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hidden">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </choice>
+ </oneOrMore>
+ </define>
+ <define name="CT_TrPr">
+ <ref name="CT_TrPrBase"/>
+ <group>
+ <optional>
+ <element name="ins">
+ <ref name="CT_TrackChange"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="del">
+ <ref name="CT_TrackChange"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="trPrChange">
+ <ref name="CT_TrPrChange"/>
+ </element>
+ </optional>
+ </group>
+ </define>
+ <define name="CT_Row">
+ <group>
+ <optional>
+ <element name="tblPrEx">
+ <ref name="CT_TblPrEx"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="trPr">
+ <ref name="CT_TrPr"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_ContentCellContent"/>
+ </zeroOrMore>
+ </group>
+ <attribute name="rsidRPr">
+ <text/>
+ <xs:documentation>Revision Identifier for Table Row Glyph Formatting</xs:documentation>
+ </attribute>
+ <attribute name="rsidR">
+ <text/>
+ <xs:documentation>Revision Identifier for Table Row</xs:documentation>
+ </attribute>
+ <attribute name="rsidDel">
+ <text/>
+ <xs:documentation>Revision Identifier for Table Row Deletion</xs:documentation>
+ </attribute>
+ <attribute name="rsidTr">
+ <text/>
+ <xs:documentation>Revision Identifier for Table Row Properties</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_TblLayoutType">
+ <list>
+ <xs:documentation>Table Layout Type</xs:documentation>
+ <choice>
+<!-- Fixed Width Table Layout -->
+ <value>fixed</value>
+<!-- AutoFit Table Layout -->
+ <value>autofit</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_TblLayoutType">
+ <attribute name="type">
+ <text/>
+ <xs:documentation>Table Layout Setting</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_TblOverlap">
+ <list>
+ <xs:documentation>Table Overlap Setting</xs:documentation>
+ <choice>
+<!-- Floating Table Cannot Overlap -->
+ <value>never</value>
+<!-- Floating Table Can Overlap -->
+ <value>overlap</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_TblOverlap">
+ <attribute name="val">
+ <ref name="ST_TblOverlap"/>
+ <xs:documentation>Floating Table Overlap Setting</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TblPPr">
+ <attribute name="leftFromText">
+ <text/>
+ <xs:documentation>Distance From Left of Table to Text</xs:documentation>
+ </attribute>
+ <attribute name="rightFromText">
+ <text/>
+ <xs:documentation>(Distance From Right of Table to Text</xs:documentation>
+ </attribute>
+ <attribute name="topFromText">
+ <text/>
+ <xs:documentation>Distance From Top of Table to Text</xs:documentation>
+ </attribute>
+ <attribute name="bottomFromText">
+ <text/>
+ <xs:documentation>Distance From Bottom of Table to Text</xs:documentation>
+ </attribute>
+ <attribute name="vertAnchor">
+ <text/>
+ <xs:documentation>Table Vertical Anchor</xs:documentation>
+ </attribute>
+ <attribute name="horzAnchor">
+ <text/>
+ <xs:documentation>Table Horizontal Anchor</xs:documentation>
+ </attribute>
+ <attribute name="tblpXSpec">
+ <text/>
+ <xs:documentation>Relative Horizontal Alignment From Anchor</xs:documentation>
+ </attribute>
+ <attribute name="tblpX">
+ <text/>
+ <xs:documentation>Absolute Horizontal Distance From Anchor</xs:documentation>
+ </attribute>
+ <attribute name="tblpYSpec">
+ <text/>
+ <xs:documentation>Relative Vertical Alignment from Anchor</xs:documentation>
+ </attribute>
+ <attribute name="tblpY">
+ <text/>
+ <xs:documentation>Absolute Vertical Distance From Anchor</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TblCellMar">
+ <optional>
+ <element name="top">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="left">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bottom">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="right">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_TblBorders">
+ <optional>
+ <element name="top">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="left">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bottom">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="right">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="insideH">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="insideV">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_TblPrBase">
+ <optional>
+ <element name="tblStyle">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblpPr">
+ <ref name="CT_TblPPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblOverlap">
+ <ref name="CT_TblOverlap"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bidiVisual">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblStyleRowBandSize">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblStyleColBandSize">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblW">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="jc">
+ <ref name="CT_Jc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblCellSpacing">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblInd">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblBorders">
+ <ref name="CT_TblBorders"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="shd">
+ <ref name="CT_Shd"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblLayout">
+ <ref name="CT_TblLayoutType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblCellMar">
+ <ref name="CT_TblCellMar"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblLook">
+ <ref name="CT_ShortHexNumber"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_TblPr">
+ <ref name="CT_TblPrBase"/>
+ <optional>
+ <element name="tblPrChange">
+ <ref name="CT_TblPrChange"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_TblPrExBase">
+ <optional>
+ <element name="tblW">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="jc">
+ <ref name="CT_Jc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblCellSpacing">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblInd">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblBorders">
+ <ref name="CT_TblBorders"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="shd">
+ <ref name="CT_Shd"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblLayout">
+ <ref name="CT_TblLayoutType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblCellMar">
+ <ref name="CT_TblCellMar"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblLook">
+ <ref name="CT_ShortHexNumber"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_TblPrEx">
+ <ref name="CT_TblPrExBase"/>
+ <optional>
+ <element name="tblPrExChange">
+ <ref name="CT_TblPrExChange"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Tbl">
+ <zeroOrMore>
+ <ref name="EG_RangeMarkupElements"/>
+ </zeroOrMore>
+ <element name="tblPr">
+ <ref name="CT_TblPr"/>
+ </element>
+ <element name="tblGrid">
+ <ref name="CT_TblGrid"/>
+ </element>
+ <zeroOrMore>
+ <ref name="EG_ContentRowContent"/>
+ </zeroOrMore>
+ </define>
+ <define name="ST_FtnPos">
+ <list>
+ <xs:documentation>Footnote Positioning Location</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_FtnPos">
+ <attribute name="val">
+ <ref name="ST_FtnPos"/>
+ <xs:documentation>Footnote Position Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_EdnPos">
+ <list>
+ <xs:documentation>Endnote Positioning Location</xs:documentation>
+ <choice>
+<!-- Endnotes Positioned at End of Section -->
+ <value>sectEnd</value>
+<!-- Endnotes Positioned at End of Document -->
+ <value>docEnd</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_EdnPos">
+ <attribute name="val">
+ <ref name="ST_EdnPos"/>
+ <xs:documentation>Endnote Position Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_NumFmt">
+ <attribute name="val">
+ <ref name="ST_NumberFormat"/>
+ <xs:documentation>Numbering Format Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_RestartNumber">
+ <list>
+ <xs:documentation>Footnote/Endnote Numbering Restart Locations</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_NumRestart">
+ <attribute name="val">
+ <ref name="ST_RestartNumber"/>
+ <xs:documentation>Automatic Numbering Restart Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FtnEdnRef">
+ <optional>
+ <attribute name="customMarkFollows">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Suppress Footnote/Endnote Reference Mark</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="id">
+ <text/>
+ <xs:documentation>Footnote/Endnote ID Reference</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FtnEdnSepRef">
+ <attribute name="id">
+ <text/>
+ <xs:documentation>Footnote/Endnote ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FtnEdn">
+ <oneOrMore>
+ <ref name="EG_BlockLevelElts"/>
+ </oneOrMore>
+ <optional>
+ <attribute name="type">
+ <ref name="ST_FtnEdn"/>
+ <xs:documentation>Footnote/Endnote Type</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="id">
+ <text/>
+ <xs:documentation>Footnote/Endnote ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_CommentRef">
+ <ref name="CT_Markup"/>
+ </define>
+ <define name="EG_FtnEdnNumProps">
+ <optional>
+ <element name="numStart">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="numRestart">
+ <ref name="CT_NumRestart"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_FtnProps">
+ <optional>
+ <element name="pos">
+ <ref name="CT_FtnPos"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="numFmt">
+ <ref name="CT_NumFmt"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_FtnEdnNumProps"/>
+ </optional>
+ </define>
+ <define name="CT_EdnProps">
+ <optional>
+ <element name="pos">
+ <ref name="CT_EdnPos"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="numFmt">
+ <ref name="CT_NumFmt"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_FtnEdnNumProps"/>
+ </optional>
+ </define>
+ <define name="CT_FtnDocProps">
+ <ref name="CT_FtnProps"/>
+ <zeroOrMore>
+ <element name="footnote">
+ <ref name="CT_FtnEdnSepRef"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_EdnDocProps">
+ <ref name="CT_EdnProps"/>
+ <zeroOrMore>
+ <element name="endnote">
+ <ref name="CT_FtnEdnSepRef"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_RecipientData">
+ <optional>
+ <element name="active">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <element name="column">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ <element name="uniqueTag">
+ <data type="base64Binary">
+ <xs:documentation>Unique Value for Record</xs:documentation>
+ </data>
+ </element>
+ </define>
+ <define name="CT_Recipients">
+ <oneOrMore>
+ <element name="recipientData">
+ <ref name="CT_RecipientData"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="recipients">
+ <element name="recipients">
+ <ref name="CT_Recipients"/>
+ </element>
+ </define>
+ <define name="CT_OdsoFieldMapData">
+ <optional>
+ <element name="type">
+ <ref name="CT_MailMergeOdsoFMDFieldType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="name">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="mappedName">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="column">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lid">
+ <ref name="CT_Lang"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="dynamicAddress">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_MailMergeSourceType">
+ <list>
+ <xs:documentation>Mail Merge ODSO Data Source Types</xs:documentation>
+ <choice>
+<!-- Database Data Source -->
+ <value>database</value>
+<!-- Address Book Data Source -->
+ <value>addressBook</value>
+<!-- Alternate Document Format Data Source -->
+ <value>document1</value>
+<!-- Alternate Document Format Data Source Two -->
+ <value>document2</value>
+<!-- Text File Data Source -->
+ <value>text</value>
+<!-- E-Mail Program Data Source -->
+ <value>email</value>
+<!-- Native Data Souce -->
+ <value>native</value>
+<!-- Legacy Document Format Data Source -->
+ <value>legacy</value>
+<!-- Aggregate Data Source -->
+ <value>master</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_MailMergeSourceType">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Data Source Type Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Odso">
+ <optional>
+ <element name="udl">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="table">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="src">
+ <ref name="CT_Rel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="colDelim">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="type">
+ <ref name="CT_MailMergeSourceType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="fHdr">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="fieldMapData">
+ <ref name="CT_OdsoFieldMapData"/>
+ </element>
+ </zeroOrMore>
+ <zeroOrMore>
+ <element name="recipientData">
+ <ref name="CT_Rel"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_MailMerge">
+ <element name="mainDocumentType">
+ <ref name="CT_MailMergeDocType"/>
+ </element>
+ <optional>
+ <element name="linkToQuery">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <element name="dataType">
+ <ref name="CT_MailMergeDataType"/>
+ </element>
+ <optional>
+ <element name="connectString">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="query">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="dataSource">
+ <ref name="CT_Rel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="headerSource">
+ <ref name="CT_Rel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotSuppressBlankLines">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="destination">
+ <ref name="CT_MailMergeDest"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="addressFieldName">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="mailSubject">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="mailAsAttachment">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="viewMergedData">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="activeRecord">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="checkErrors">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="odso">
+ <ref name="CT_Odso"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_TargetScreenSz">
+ <list>
+ <xs:documentation>Target Screen Sizes for Generated Web Pages</xs:documentation>
+ <choice>
+<!-- Optimize for 544x376 -->
+ <value>544x376</value>
+<!-- Optimize for 640x480 -->
+ <value>640x480</value>
+<!-- Optimize for 720x512 -->
+ <value>720x512</value>
+<!-- Optimize for 800x600 -->
+ <value>800x600</value>
+<!-- Optimize for 1024x768 -->
+ <value>1024x768</value>
+<!-- Optimize for 1152x882 -->
+ <value>1152x882</value>
+<!-- Optimize for 1152x900 -->
+ <value>1152x900</value>
+<!-- Optimize for 1280x1024 -->
+ <value>1280x1024</value>
+<!-- Optimize for 1600x1200 -->
+ <value>1600x1200</value>
+<!-- Optimize for 1800x1440 -->
+ <value>1800x1440</value>
+<!-- Optimize for 1920x1200 -->
+ <value>1920x1200</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_TargetScreenSz">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Target Screen Size Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Compat">
+ <optional>
+ <element name="useSingleBorderforContiguousCells">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="wpJustification">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noTabHangInd">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noLeading">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="spaceForUL">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noColumnBalance">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="balanceSingleByteDoubleByteWidth">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noExtraLineSpacing">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotLeaveBackslashAlone">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ulTrailSpace">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotExpandShiftReturn">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="spacingInWholePoints">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lineWrapLikeWord6">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="printBodyTextBeforeHeader">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="printColBlack">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="wpSpaceWidth">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="showBreaksInFrames">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="subFontBySize">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="suppressBottomSpacing">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="suppressTopSpacing">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="suppressSpacingAtTopOfPage">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="suppressTopSpacingWP">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="suppressSpBfAfterPgBrk">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="swapBordersFacingPages">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="convMailMergeEsc">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="truncateFontHeightsLikeWP6">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="mwSmallCaps">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="usePrinterMetrics">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotSuppressParagraphBorders">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="wrapTrailSpaces">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="footnoteLayoutLikeWW8">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="shapeLayoutLikeWW8">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="alignTablesRowByRow">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="forgetLastTabAlignment">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="adjustLineHeightInTable">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="autoSpaceLikeWord95">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noSpaceRaiseLower">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotUseHTMLParagraphAutoSpacing">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="layoutRawTableWidth">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="layoutTableRowsApart">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="useWord97LineBreakRules">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotBreakWrappedTables">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotSnapToGridInCell">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="selectFldWithFirstOrLastChar">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="applyBreakingRules">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotWrapTextWithPunct">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotUseEastAsianBreakRules">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="useWord2002TableStyleRules">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="growAutofit">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="useFELayout">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="useNormalStyleForList">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotUseIndentAsNumberingTabStop">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="useAltKinsokuLineBreakRules">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="allowSpaceOfSameStyleInTable">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotSuppressIndentation">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotAutofitConstrainedTables">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="autofitToFirstFixedWidthCell">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="underlineTabInNumList">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="displayHangulFixedWidth">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="splitPgBreakAndParaMark">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotVertAlignCellWithSp">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotBreakConstrainedForcedTable">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotVertAlignInTxbx">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="useAnsiKerningPairs">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cachedColBalance">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_DocVar">
+ <attribute name="name">
+ <text/>
+ <xs:documentation>Document Variable Name</xs:documentation>
+ </attribute>
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Document Variable Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_DocVars">
+ <zeroOrMore>
+ <element name="docVar">
+ <ref name="CT_DocVar"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_DocRsids">
+ <optional>
+ <element name="rsidRoot">
+ <ref name="CT_LongHexNumber"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="rsid">
+ <ref name="CT_LongHexNumber"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="ST_CharacterSpacing">
+ <list>
+ <xs:documentation>Character-Level Whitespace Compression Settings</xs:documentation>
+ <choice>
+<!-- Do Not Compress Whitespace -->
+ <value>doNotCompress</value>
+<!-- Compress Whitespace From Punctuation Characters -->
+ <value>compressPunctuation</value>
+<!-- Compress Whitespace From Both Japanese Kana And Punctuation Characters -->
+ <value>compressPunctuationAndJapaneseKana</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_CharacterSpacing">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SaveThroughXslt">
+ <optional>
+ <attribute name="r:id">
+ <ref name="ST_String"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="solutionID">
+ <text/>
+ <xs:documentation>Local Identifier for XSL Transform</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_RPrDefault">
+ <optional>
+ <element name="rPr">
+ <ref name="CT_RPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_PPrDefault">
+ <optional>
+ <element name="pPr">
+ <ref name="CT_PPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_DocDefaults">
+ <optional>
+ <element name="rPrDefault">
+ <ref name="CT_RPrDefault"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pPrDefault">
+ <ref name="CT_PPrDefault"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_ColorSchemeIndex">
+ <list>
+ <xs:documentation>Theme Color Reference</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_ColorSchemeMapping">
+ <attribute name="bg1">
+ <text/>
+ <xs:documentation>Background 1 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="t1">
+ <text/>
+ <xs:documentation>Text 1 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="bg2">
+ <text/>
+ <xs:documentation>Background 2 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="t2">
+ <text/>
+ <xs:documentation>Text 2 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="accent1">
+ <text/>
+ <xs:documentation>Accent 1 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="accent2">
+ <text/>
+ <xs:documentation>Accent 2 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="accent3">
+ <text/>
+ <xs:documentation>Accent3 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="accent4">
+ <text/>
+ <xs:documentation>Accent4 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="accent5">
+ <text/>
+ <xs:documentation>Accent5 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="accent6">
+ <text/>
+ <xs:documentation>Accent6 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="hyperlink">
+ <text/>
+ <xs:documentation>Hyperlink Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="followedHyperlink">
+ <text/>
+ <xs:documentation>Followed Hyperlink Theme Color Mapping</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_ReadingModeInkLockDown">
+ <attribute name="actualPg">
+ <text/>
+ <xs:documentation>Use Actual Pages, Not Virtual Pages</xs:documentation>
+ </attribute>
+ <attribute name="w">
+ <text/>
+ <xs:documentation>Virtual Page Width</xs:documentation>
+ </attribute>
+ <attribute name="h">
+ <text/>
+ <xs:documentation>Virtual Page Height</xs:documentation>
+ </attribute>
+ <attribute name="fontSz">
+ <text/>
+ <xs:documentation>Font Size Scaling</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_WriteProtection">
+ <optional>
+ <attribute name="recommended">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Recommend Write Protection in User Interface</xs:documentation>
+ </attribute>
+ </optional>
+ <ref name="AG_Password"/>
+ </define>
+ <define name="CT_Settings">
+ <optional>
+ <element name="writeProtection">
+ <ref name="CT_WriteProtection"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="view">
+ <ref name="CT_View"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="zoom">
+ <ref name="CT_Zoom"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="removePersonalInformation">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="removeDateAndTime">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotDisplayPageBoundaries">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="displayBackgroundShape">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="printPostScriptOverText">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="printFractionalCharacterWidth">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="printFormsData">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="embedTrueTypeFonts">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="embedSystemFonts">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="saveSubsetFonts">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="saveFormsData">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="mirrorMargins">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="alignBordersAndEdges">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bordersDoNotSurroundHeader">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bordersDoNotSurroundFooter">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="gutterAtTop">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hideSpellingErrors">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hideGrammaticalErrors">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="activeWritingStyle">
+ <ref name="CT_WritingStyle"/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <element name="proofState">
+ <ref name="CT_Proof"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="formsDesign">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="attachedTemplate">
+ <ref name="CT_Rel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="linkStyles">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="stylePaneFormatFilter">
+ <ref name="CT_ShortHexNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="stylePaneSortMethod">
+ <ref name="CT_ShortHexNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="documentType">
+ <ref name="CT_DocType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="mailMerge">
+ <ref name="CT_MailMerge"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="revisionView">
+ <ref name="CT_TrackChangesView"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="trackRevisions">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotTrackMoves">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotTrackFormatting">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="documentProtection">
+ <ref name="CT_DocProtect"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="autoFormatOverride">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="styleLockTheme">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="styleLockQFSet">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="defaultTabStop">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="autoHyphenation">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="consecutiveHyphenLimit">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hyphenationZone">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotHyphenateCaps">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="showEnvelope">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="summaryLength">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="clickAndTypeStyle">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="defaultTableStyle">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="evenAndOddHeaders">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bookFoldRevPrinting">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bookFoldPrinting">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bookFoldPrintingSheets">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="drawingGridHorizontalSpacing">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="drawingGridVerticalSpacing">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="displayHorizontalDrawingGridEvery">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="displayVerticalDrawingGridEvery">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotUseMarginsForDrawingGridOrigin">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="drawingGridHorizontalOrigin">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="drawingGridVerticalOrigin">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotShadeFormData">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noPunctuationKerning">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="characterSpacingControl">
+ <ref name="CT_CharacterSpacing"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="printTwoOnOne">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="strictFirstAndLastChars">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noLineBreaksAfter">
+ <ref name="CT_Kinsoku"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noLineBreaksBefore">
+ <ref name="CT_Kinsoku"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="savePreviewPicture">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotValidateAgainstSchema">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="saveInvalidXml">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ignoreMixedContent">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="alwaysShowPlaceholderText">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotDemarcateInvalidXml">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="saveXmlDataOnly">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="useXSLTWhenSaving">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="saveThroughXslt">
+ <ref name="CT_SaveThroughXslt"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="showXMLTags">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="alwaysMergeEmptyNamespace">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="updateFields">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hdrShapeDefaults">
+ <ref name="CT_ShapeDefaults"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="footnotePr">
+ <ref name="CT_FtnDocProps"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="endnotePr">
+ <ref name="CT_EdnDocProps"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="compat">
+ <ref name="CT_Compat"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="docVars">
+ <ref name="CT_DocVars"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rsids">
+ <ref name="CT_DocRsids"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="mathPr"/>
+ </optional>
+ <optional>
+ <element name="uiCompat97To2003">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="attachedSchema">
+ <ref name="CT_String"/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <element name="themeFontLang">
+ <ref name="CT_Language"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="clrSchemeMapping">
+ <ref name="CT_ColorSchemeMapping"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotIncludeSubdocsInStats">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotAutoCompressPictures">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="forceUpgrade">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="captions">
+ <ref name="CT_Captions"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="readModeInkLockDown">
+ <ref name="CT_ReadingModeInkLockDown"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="smartTagType">
+ <ref name="CT_SmartTagType"/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <ref name="schemaLibrary"/>
+ </optional>
+ <optional>
+ <element name="shapeDefaults">
+ <ref name="CT_ShapeDefaults"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotEmbedSmartTags">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="decimalSymbol">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="listSeparator">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_WebSettings">
+ <optional>
+ <element name="frameset">
+ <ref name="CT_Frameset"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="divs">
+ <ref name="CT_Divs"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="encoding">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="optimizeForBrowser">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="relyOnVML">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="allowPNG">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotRelyOnCSS">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotSaveAsSingleFile">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotOrganizeInFolder">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotUseLongFileNames">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pixelsPerInch">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="targetScreenSz">
+ <ref name="CT_TargetScreenSz"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="saveSmartTagsAsXml">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_FrameScrollbar">
+ <list>
+ <xs:documentation>Frame Scrollbar Visibility</xs:documentation>
+ <choice>
+<!-- Always Show Scrollbar -->
+ <value>on</value>
+<!-- Never Show Scrollbar -->
+ <value>off</value>
+<!-- Automatically Show Scrollbar As Needed -->
+ <value>auto</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_FrameScrollbar">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Scrollbar Display Option Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Frame">
+ <optional>
+ <element name="sz">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="name">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sourceFileName">
+ <ref name="CT_Rel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="marW">
+ <ref name="CT_PixelsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="marH">
+ <ref name="CT_PixelsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="scrollbar">
+ <ref name="CT_FrameScrollbar"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noResizeAllowed">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="linkedToFile">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_FrameLayout">
+ <list>
+ <xs:documentation>Frameset Layout Order</xs:documentation>
+ <choice>
+<!-- Stack Frames Vertically -->
+ <value>rows</value>
+<!-- Stack Frames Horizontally -->
+ <value>cols</value>
+<!-- Do Not Stack Frames -->
+ <value>none</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_FrameLayout">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Frameset Layout Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FramesetSplitbar">
+ <optional>
+ <element name="w">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="color">
+ <ref name="CT_Color"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noBorder">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="flatBorders">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Frameset">
+ <optional>
+ <element name="sz">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="framesetSplitbar">
+ <ref name="CT_FramesetSplitbar"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="frameLayout">
+ <ref name="CT_FrameLayout"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <choice>
+ <zeroOrMore>
+ <element name="frameset">
+ <ref name="CT_Frameset"/>
+ </element>
+ </zeroOrMore>
+ <zeroOrMore>
+ <element name="frame">
+ <ref name="CT_Frame"/>
+ </element>
+ </zeroOrMore>
+ </choice>
+ </zeroOrMore>
+ </define>
+ <define name="CT_NumPicBullet">
+ <element name="pict">
+ <ref name="CT_Picture"/>
+ </element>
+ <attribute name="numPicBulletId">
+ <text/>
+ <xs:documentation>Picture Numbering Symbol ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_LevelSuffix">
+ <list>
+ <xs:documentation>Content Between Numbering Symbol and Paragraph Text</xs:documentation>
+ <choice>
+<!-- Tab Between Numbering and Text -->
+ <value>tab</value>
+<!-- Space Between Numbering and Text -->
+ <value>space</value>
+<!-- Nothing Between Numbering and Text -->
+ <value>nothing</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_LevelSuffix">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Character Type Between Numbering and Text</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_LevelText">
+ <optional>
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Level Text</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="null">
+ <text/>
+ <xs:documentation>Level Text Is Null Character</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_LvlLegacy">
+ <optional>
+ <attribute name="legacy">
+ <text/>
+ <xs:documentation>Use Legacy Numbering Properties</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="legacySpace">
+ <text/>
+ <xs:documentation>Legacy Spacing</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="legacyIndent">
+ <text/>
+ <xs:documentation>Legacy Indent</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Lvl">
+ <group>
+ <optional>
+ <element name="start">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="numFmt">
+ <ref name="CT_NumFmt"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lvlRestart">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pStyle">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="isLgl">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="suff">
+ <ref name="CT_LevelSuffix"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lvlText">
+ <ref name="CT_LevelText"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lvlPicBulletId">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="legacy">
+ <ref name="CT_LvlLegacy"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lvlJc">
+ <ref name="CT_Jc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pPr">
+ <ref name="CT_PPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rPr">
+ <ref name="CT_RPr"/>
+ </element>
+ </optional>
+ </group>
+ <attribute name="ilvl">
+ <text/>
+ <xs:documentation>Numbering Level</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="tplc">
+ <text/>
+ <xs:documentation>Template Code</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="tentative">
+ <text/>
+ <xs:documentation>Tentative Numbering</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_MultiLevelType">
+ <list>
+ <xs:documentation>Numbering Definition Type</xs:documentation>
+ <choice>
+<!-- Single Level Numbering Definition -->
+ <value>singleLevel</value>
+<!-- Multilevel Numbering Definition -->
+ <value>multilevel</value>
+<!-- Hybrid Multilevel Numbering Definition -->
+ <value>hybridMultilevel</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_MultiLevelType">
+ <attribute name="val">
+ <ref name="ST_MultiLevelType"/>
+ <xs:documentation>Abstract Numbering Definition Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_AbstractNum">
+ <group>
+ <optional>
+ <element name="nsid">
+ <ref name="CT_LongHexNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="multiLevelType">
+ <ref name="CT_MultiLevelType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tmpl">
+ <ref name="CT_LongHexNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="name">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="styleLink">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="numStyleLink">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="lvl">
+ <ref name="CT_Lvl"/>
+ </element>
+ </zeroOrMore>
+ </group>
+ <attribute name="abstractNumId">
+ <text/>
+ <xs:documentation>Abstract Numbering Definition ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_NumLvl">
+ <group>
+ <optional>
+ <element name="startOverride">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lvl">
+ <ref name="CT_Lvl"/>
+ </element>
+ </optional>
+ </group>
+ <attribute name="ilvl">
+ <text/>
+ <xs:documentation>Numbering Level ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Num">
+ <group>
+ <element name="abstractNumId">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ <zeroOrMore>
+ <element name="lvlOverride">
+ <ref name="CT_NumLvl"/>
+ </element>
+ </zeroOrMore>
+ </group>
+ <attribute name="numId">
+ <text/>
+ <xs:documentation>Numbering Definition Instance ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Numbering">
+ <zeroOrMore>
+ <element name="numPicBullet">
+ <ref name="CT_NumPicBullet"/>
+ </element>
+ </zeroOrMore>
+ <zeroOrMore>
+ <element name="abstractNum">
+ <ref name="CT_AbstractNum"/>
+ </element>
+ </zeroOrMore>
+ <zeroOrMore>
+ <element name="num">
+ <ref name="CT_Num"/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <element name="numIdMacAtCleanup">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_TblStyleOverrideType">
+ <list>
+ <xs:documentation>Conditional Table Style Formatting Types</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_Style_tblStylePr">
+ <group>
+ <optional>
+ <element name="pPr">
+ <ref name="CT_PPrBase"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rPr">
+ <ref name="EG_RPrBase"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblPr">
+ <ref name="CT_TblPrBase"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="trPr">
+ <ref name="CT_TrPrBase"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tcPr">
+ <ref name="CT_TcPrBase"/>
+ </element>
+ </optional>
+ </group>
+ <attribute name="type">
+ <ref name="ST_TblStyleOverrideType"/>
+ <xs:documentation>Table Style Conditional Formatting Type</xs:documentation>
+ </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">
+ <list>
+ <xs:documentation>Style Types</xs:documentation>
+ <choice>
+<!-- Paragraph Style -->
+ <value>paragraph</value>
+<!-- Character Style -->
+ <value>character</value>
+<!-- Table Style -->
+ <value>table</value>
+<!-- Numbering Style -->
+ <value>numbering</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Style">
+ <group>
+ <optional>
+ <element name="name">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="aliases">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="basedOn">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="next">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="link">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="autoRedefine">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hidden">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="uiPriority">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="semiHidden">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="unhideWhenUsed">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="qFormat">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="locked">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="personal">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="personalCompose">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="personalReply">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rsid">
+ <ref name="CT_LongHexNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pPr">
+ <ref name="CT_PPrBase"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rPr">
+ <ref name="EG_RPrBase"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblPr">
+ <ref name="CT_TblPrBase"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="trPr">
+ <ref name="CT_TrPrBase"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tcPr">
+ <ref name="CT_TcPrBase"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="tblStylePr">
+ <ref name="CT_Style_tblStylePr"/>
+ </element>
+ </zeroOrMore>
+ </group>
+ <optional>
+ <attribute name="type">
+ <ref name="ST_StyleType"/>
+ <xs:documentation>Style Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="styleId">
+ <ref name="ST_String"/>
+ <xs:documentation>Style ID</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="default">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Default Style</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="customStyle">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>User-Defined Style</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_LsdException">
+ <attribute name="name">
+ <text/>
+ <xs:documentation>Primary Style Name</xs:documentation>
+ </attribute>
+ <attribute name="locked">
+ <text/>
+ <xs:documentation>Latent Style Locking Setting</xs:documentation>
+ </attribute>
+ <attribute name="uiPriority">
+ <text/>
+ <xs:documentation>Override default sorting order</xs:documentation>
+ </attribute>
+ <attribute name="semiHidden">
+ <text/>
+ <xs:documentation>Semi hidden text override</xs:documentation>
+ </attribute>
+ <attribute name="unhideWhenUsed">
+ <text/>
+ <xs:documentation>Unhide when used</xs:documentation>
+ </attribute>
+ <attribute name="qFormat">
+ <text/>
+ <xs:documentation>Latent Style Primary Style Setting</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_LatentStyles">
+ <zeroOrMore>
+ <element name="lsdException">
+ <ref name="CT_LsdException"/>
+ </element>
+ </zeroOrMore>
+ <attribute name="defLockedState">
+ <text/>
+ <xs:documentation>Default Style Locking Setting</xs:documentation>
+ </attribute>
+ <attribute name="defUIPriority">
+ <text/>
+ <xs:documentation>Default User Interface Priority Setting</xs:documentation>
+ </attribute>
+ <attribute name="defSemiHidden">
+ <text/>
+ <xs:documentation>Default Semi-Hidden Setting</xs:documentation>
+ </attribute>
+ <attribute name="defUnhideWhenUsed">
+ <text/>
+ <xs:documentation>Default Hidden Until Used Setting</xs:documentation>
+ </attribute>
+ <attribute name="defQFormat">
+ <text/>
+ <xs:documentation>Default Primary Style Setting</xs:documentation>
+ </attribute>
+ <attribute name="count">
+ <text/>
+ <xs:documentation>Latent Style Count</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Styles">
+ <optional>
+ <element name="docDefaults">
+ <ref name="CT_DocDefaults"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="latentStyles">
+ <ref name="CT_LatentStyles"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="style">
+ <ref name="CT_Style"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="ST_Panose">
+ <data type="hexBinary">
+ <xs:documentation>Panose-1 Number</xs:documentation>
+ <param name="length">10</param>
+ </data>
+ </define>
+ <define name="CT_Panose">
+ <attribute name="val">
+ <ref name="ST_Panose"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_FontFamily">
+ <list>
+ <xs:documentation>Font Family Value</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_FontFamily">
+ <attribute name="val">
+ <ref name="ST_FontFamily"/>
+ <xs:documentation>Font Family Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Pitch">
+ <list>
+ <xs:documentation>Font Pitch Value</xs:documentation>
+ <choice>
+<!-- Fixed Width -->
+ <value>fixed</value>
+<!-- Proportional Width -->
+ <value>variable</value>
+<!-- Default -->
+ <value>default</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Pitch">
+ <attribute name="val">
+ <ref name="ST_Pitch"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FontSig">
+ <attribute name="usb0">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>First 32 Bits of Unicode Subset Bitfield</xs:documentation>
+ </attribute>
+ <attribute name="usb1">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Second 32 Bits of Unicode Subset Bitfield</xs:documentation>
+ </attribute>
+ <attribute name="usb2">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Third 32 Bits of Unicode Subset Bitfield</xs:documentation>
+ </attribute>
+ <attribute name="usb3">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Fourth 32 Bits of Unicode Subset Bitfield</xs:documentation>
+ </attribute>
+ <attribute name="csb0">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Lower 32 Bits of Code Page Bit Field</xs:documentation>
+ </attribute>
+ <attribute name="csb1">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Upper 32 Bits of Code Page Bit Field</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FontRel">
+ <ref name="CT_Rel"/>
+ <attribute name="fontKey">
+ <text/>
+ <xs:documentation>Embedded Font Obfuscation Key</xs:documentation>
+ </attribute>
+ <attribute name="subsetted">
+ <text/>
+ <xs:documentation>Embedded Font Is Subsetted</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Font">
+ <group>
+ <optional>
+ <element name="altName">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="panose1">
+ <ref name="CT_Panose"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="charset">
+ <ref name="CT_UcharHexNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="family">
+ <ref name="CT_FontFamily"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="notTrueType">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pitch">
+ <ref name="CT_Pitch"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sig">
+ <ref name="CT_FontSig"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="embedRegular">
+ <ref name="CT_FontRel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="embedBold">
+ <ref name="CT_FontRel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="embedItalic">
+ <ref name="CT_FontRel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="embedBoldItalic">
+ <ref name="CT_FontRel"/>
+ </element>
+ </optional>
+ </group>
+ <attribute name="name">
+ <text/>
+ <xs:documentation>Primary Font Name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FontsList">
+ <zeroOrMore>
+ <element name="font">
+ <ref name="CT_Font"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_DivBdr">
+ <optional>
+ <element name="top">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="left">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bottom">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="right">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Div">
+ <group>
+ <optional>
+ <element name="blockQuote">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bodyDiv">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <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>
+ <optional>
+ <element name="divBdr">
+ <ref name="CT_DivBdr"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="divsChild">
+ <ref name="CT_Divs"/>
+ </element>
+ </zeroOrMore>
+ </group>
+ <attribute name="id">
+ <text/>
+ <xs:documentation>div Data ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Divs">
+ <oneOrMore>
+ <element name="div">
+ <ref name="CT_Div"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_TxbxContent">
+ <oneOrMore>
+ <ref name="EG_BlockLevelElts"/>
+ </oneOrMore>
+ </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">
+ <zeroOrMore>
+ <ref name="EG_ContentBlockContent"/>
+ </zeroOrMore>
+ </define>
+ <define name="EG_BlockLevelElts">
+ <choice>
+ <zeroOrMore>
+ <ref name="EG_BlockLevelChunkElts"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <element name="altChunk">
+ <ref name="CT_AltChunk"/>
+ </element>
+ </zeroOrMore>
+ </choice>
+ </define>
+ <define name="EG_RunLevelElts">
+ <choice>
+ <optional>
+ <element name="proofErr">
+ <ref name="CT_ProofErr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="permStart">
+ <ref name="CT_PermStart"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="permEnd">
+ <ref name="CT_Perm"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_RangeMarkupElements"/>
+ </zeroOrMore>
+ <optional>
+ <element name="ins">
+ <ref name="CT_RunTrackChange"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="del">
+ <ref name="CT_RunTrackChange"/>
+ </element>
+ </optional>
+ <element name="moveFrom">
+ <ref name="CT_RunTrackChange"/>
+ </element>
+ <element name="moveTo">
+ <ref name="CT_RunTrackChange"/>
+ </element>
+ <zeroOrMore>
+ <ref name="EG_MathContent"/>
+ </zeroOrMore>
+ </choice>
+ </define>
+ <define name="CT_Body">
+ <zeroOrMore>
+ <ref name="EG_BlockLevelElts"/>
+ </zeroOrMore>
+ <optional>
+ <element name="sectPr">
+ <ref name="CT_SectPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_ShapeDefaults">
+ <oneOrMore>
+ <zeroOrMore>
+ <element>
+ <anyName/>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </zeroOrMore>
+ </oneOrMore>
+ </define>
+ <define name="CT_Comments">
+ <zeroOrMore>
+ <element name="comment">
+ <ref name="CT_Comment"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="comments">
+ <element name="comments">
+ <ref name="CT_Comments"/>
+ </element>
+ </define>
+ <define name="CT_Footnotes">
+ <zeroOrMore>
+ <element name="footnote">
+ <ref name="CT_FtnEdn"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="footnotes">
+ <element name="footnotes">
+ <ref name="CT_Footnotes"/>
+ </element>
+ </define>
+ <define name="CT_Endnotes">
+ <zeroOrMore>
+ <element name="endnote">
+ <ref name="CT_FtnEdn"/>
+ </element>
+ </zeroOrMore>
+ </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">
+ <text/>
+ <xs:documentation>Smart Tag Namespace</xs:documentation>
+ </attribute>
+ <attribute name="name">
+ <text/>
+ <xs:documentation>Smart Tag Name</xs:documentation>
+ </attribute>
+ <attribute name="url">
+ <text/>
+ <xs:documentation>Smart Tag Supplementary URL</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_ThemeColor">
+ <list>
+ <xs:documentation>Theme Color</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="ST_DocPartBehavior">
+ <list>
+ <xs:documentation>Insertion Behavior Types</xs:documentation>
+ <choice>
+<!-- Insert Content At Specified Location -->
+ <value>content</value>
+<!-- Ensure Entry Is In New Paragraph -->
+ <value>p</value>
+<!-- Ensure Entry Is On New Page -->
+ <value>pg</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_DocPartBehavior">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Insertion Behavior Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_DocPartBehaviors">
+ <oneOrMore>
+ <element name="behavior">
+ <ref name="CT_DocPartBehavior"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="ST_DocPartType">
+ <list>
+ <xs:documentation>Entry Types</xs:documentation>
+ <choice>
+<!-- No Type -->
+ <value>none</value>
+<!-- Normal -->
+ <value>normal</value>
+<!-- Automatically Replace Name With Content -->
+ <value>autoExp</value>
+<!-- AutoText User Interface Entry -->
+ <value>toolbar</value>
+<!-- AutoCorrect Entry -->
+ <value>speller</value>
+<!-- Form Field Help Text -->
+ <value>formFld</value>
+<!-- Structured Document Tag Placeholder Text -->
+ <value>bbPlcHdr</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_DocPartType">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Type Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_DocPartTypes">
+ <oneOrMore>
+ <element name="type">
+ <ref name="CT_DocPartType"/>
+ </element>
+ </oneOrMore>
+ <optional>
+ <attribute name="all">
+ <text/>
+ <xs:documentation>Entry Is Of All Types</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_DocPartGallery">
+ <list>
+ <xs:documentation>Entry Gallery Types</xs:documentation>
+ <choice>
+<!-- Structured Document Tag Placeholder Text Gallery -->
+ <value>placeholder</value>
+<!-- All Galleries -->
+ <value>any</value>
+<!-- No Gallery Classification -->
+ <value>default</value>
+<!-- Document Parts Gallery -->
+ <value>docParts</value>
+<!-- Cover Page Gallery -->
+ <value>coverPg</value>
+<!-- Equations Gallery -->
+ <value>eq</value>
+<!-- Footers Gallery -->
+ <value>ftrs</value>
+<!-- Headers Gallery -->
+ <value>hdrs</value>
+<!-- Page Numbers Gallery -->
+ <value>pgNum</value>
+<!-- Table Gallery -->
+ <value>tbls</value>
+<!-- Watermark Gallery -->
+ <value>watermarks</value>
+<!-- AutoText Gallery -->
+ <value>autoTxt</value>
+<!-- Text Box Gallery -->
+ <value>txtBox</value>
+<!-- Page Numbers At Top Gallery -->
+ <value>pgNumT</value>
+<!-- Page Numbers At Bottom Gallery -->
+ <value>pgNumB</value>
+<!-- Page Numbers At Margins Gallery -->
+ <value>pgNumMargins</value>
+<!-- Table of Contents Gallery -->
+ <value>tblOfContents</value>
+<!-- Bibliography Gallery -->
+ <value>bib</value>
+<!-- Custom Quick Parts Gallery -->
+ <value>custQuickParts</value>
+<!-- Custom Cover Page Gallery -->
+ <value>custCoverPg</value>
+<!-- Custom Equation Gallery -->
+ <value>custEq</value>
+<!-- Custom Footer Gallery -->
+ <value>custFtrs</value>
+<!-- Custom Header Gallery -->
+ <value>custHdrs</value>
+<!-- Custom Page Number Gallery -->
+ <value>custPgNum</value>
+<!-- Custom Table Gallery -->
+ <value>custTbls</value>
+<!-- Custom Watermark Gallery -->
+ <value>custWatermarks</value>
+<!-- Custom AutoText Gallery -->
+ <value>custAutoTxt</value>
+<!-- Custom Text Box Gallery -->
+ <value>custTxtBox</value>
+<!-- Custom Page Number At Top Gallery -->
+ <value>custPgNumT</value>
+<!-- Custom Page Number At Bottom Gallery -->
+ <value>custPgNumB</value>
+<!-- Custom Page Number At Margins Gallery -->
+ <value>custPgNumMargins</value>
+<!-- Custom Table of Contents Gallery -->
+ <value>custTblOfContents</value>
+<!-- Custom Bibliography Gallery -->
+ <value>custBib</value>
+<!-- Custom 1 Gallery -->
+ <value>custom1</value>
+<!-- Custom 2 Gallery -->
+ <value>custom2</value>
+<!-- Custom 3 Gallery -->
+ <value>custom3</value>
+<!-- Custom 4 Gallery -->
+ <value>custom4</value>
+<!-- Custom 5 Gallery -->
+ <value>custom5</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_DocPartGallery">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Gallery Value</xs:documentation>
+ </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">
+ <text/>
+ <xs:documentation>Name Value</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="decorated">
+ <text/>
+ <xs:documentation>Built-In Entry</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_DocPartPr">
+ <oneOrMore>
+ <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>
+ </oneOrMore>
+ </define>
+ <define name="CT_DocPart">
+ <optional>
+ <element name="docPartPr">
+ <ref name="CT_DocPartPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="docPartBody">
+ <ref name="CT_Body"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_DocParts">
+ <oneOrMore>
+ <element name="docPart">
+ <ref name="CT_DocPart"/>
+ </element>
+ </oneOrMore>
+ </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">
+ <list>
+ <xs:documentation>Automatic Caption Positioning Values</xs:documentation>
+ <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>
+ </list>
+ </define>
+ <define name="CT_Caption">
+ <attribute name="name">
+ <ref name="ST_String"/>
+ <xs:documentation>Caption Type Name</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="pos">
+ <ref name="ST_CaptionPos"/>
+ <xs:documentation>Automatic Caption Placement</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="chapNum">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Include Chapter Number in Field for Caption</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="heading">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Style for Chapter Headings</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noLabel">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Do Not Include Name In Caption</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="numFmt">
+ <ref name="ST_NumberFormat"/>
+ <xs:documentation>Caption Numbering Format</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sep">
+ <ref name="ST_ChapterSep"/>
+ <xs:documentation>Chapter Number/Item Index Separator</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_AutoCaption">
+ <attribute name="name">
+ <ref name="ST_String"/>
+ <xs:documentation>Identifier of Object to be Automatically Captioned</xs:documentation>
+ </attribute>
+ <attribute name="caption">
+ <ref name="ST_String"/>
+ <xs:documentation>Caption Used for Automatic Captioning</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_AutoCaptions">
+ <oneOrMore>
+ <element name="autoCaption">
+ <ref name="CT_AutoCaption"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_Captions">
+ <oneOrMore>
+ <element name="caption">
+ <ref name="CT_Caption"/>
+ </element>
+ </oneOrMore>
+ <optional>
+ <element name="autoCaptions">
+ <ref name="CT_AutoCaptions"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_DocumentBase">
+ <optional>
+ <element name="background">
+ <ref name="CT_Background"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Document">
+ <ref name="CT_DocumentBase"/>
+ <optional>
+ <element name="body">
+ <ref name="CT_Body"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_GlossaryDocument">
+ <ref name="CT_DocumentBase"/>
+ <optional>
+ <element name="docParts">
+ <ref name="CT_DocParts"/>
+ </element>
+ </optional>
+ </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">
+ <zeroOrMore>
+ <choice>
+ <element>
+ <anyName/>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ </choice>
+ </zeroOrMore>
+ </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="BooleanValue"/>
+ <resource name="ST_LongHexNumber" resource="Hex"/>
+ <resource name="CT_LongHexNumber" resource="HexValue"/>
+ <resource name="ST_ShortHexNumber" resource="Hex"/>
+ <resource name="CT_ShortHexNumber" resource="IntegerValue"/>
+ <resource name="ST_UcharHexNumber" resource="Hex"/>
+ <resource name="CT_UcharHexNumber" resource="HexValue"/>
+ <resource name="ST_DecimalNumber" resource="Integer"/>
+ <resource name="CT_DecimalNumber" resource="IntegerValue"/>
+ <resource name="ST_UnsignedDecimalNumber" resource="Integer" generated="yes"/>
+ <resource name="ST_TwipsMeasure" resource="Integer"/>
+ <resource name="CT_TwipsMeasure" resource="IntegerValue"/>
+ <resource name="ST_SignedTwipsMeasure" resource="Integer"/>
+ <resource name="CT_SignedTwipsMeasure" resource="IntegerValue"/>
+ <resource name="ST_PixelsMeasure" resource="Integer" generated="yes"/>
+ <resource name="CT_PixelsMeasure" resource="IntegerValue"/>
+ <resource name="ST_HpsMeasure" resource="Integer"/>
+ <resource name="CT_HpsMeasure" resource="IntegerValue"/>
+ <resource name="ST_SignedHpsMeasure" resource="Integer"/>
+ <resource name="CT_SignedHpsMeasure" resource="IntegerValue"/>
+ <resource name="ST_DateTime" resource="String" generated="yes"/>
+ <resource name="ST_MacroName" resource="String" generated="yes"/>
+ <resource name="CT_MacroName" resource="StringValue" generated="yes"/>
+ <resource name="ST_EighthPointMeasure" resource="Integer"/>
+ <resource name="ST_PointMeasure" resource="Integer"/>
+ <resource name="ST_String" resource="String"/>
+ <resource name="CT_String" resource="StringValue"/>
+ <resource name="ST_TextScale" resource="Integer"/>
+ <resource name="CT_TextScale" resource="IntegerValue"/>
+ <resource name="ST_HighlightColor" resource="List">
+ <value tokenid="1">black</value>
+ <value tokenid="2">blue</value>
+ <value tokenid="3">cyan</value>
+ <value tokenid="4">green</value>
+ <value tokenid="5">magenta</value>
+ <value tokenid="6">red</value>
+ <value tokenid="7">yellow</value>
+ <value tokenid="8">white</value>
+ <value tokenid="9">darkBlue</value>
+ <value tokenid="10">darkCyan</value>
+ <value tokenid="11">darkGreen</value>
+ <value tokenid="12">darkMagenta</value>
+ <value tokenid="13">darkRed</value>
+ <value tokenid="14">darkYellow</value>
+ <value tokenid="15">darkGray</value>
+ <value tokenid="16">lightGray</value>
+ <value tokenid="0">none</value>
+ </resource>
+ <resource name="CT_Highlight" resource="ListValue">
+ <attribute name="val" tokenid="ooxml:CT_Highlight_val"/>
+ </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="Hex"/>
+ <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" generated="yes"/>
+ <resource name="ST_Lang" resource="String"/>
+ <resource name="CT_Lang" resource="StringValue">
+ <attribute name="val" tokenid="ooxml:CT_Lang_val"/>
+ </resource>
+ <resource name="ST_Guid" resource="String"/>
+ <resource name="CT_Guid" resource="StringValue">
+ <attribute name="val" tokenid="ooxml:CT_Guid_val"/>
+ </resource>
+ <resource name="ST_Underline" resource="List">
+ <value tokenid="1">single</value>
+ <value tokenid="2">words</value>
+ <value tokenid="3">double</value>
+ <value tokenid="6">thick</value>
+ <value tokenid="4">dotted</value>
+ <value tokenid="20">dottedHeavy</value>
+ <value tokenid="7">dash</value>
+ <value tokenid="23">dashedHeavy</value>
+ <value tokenid="39">dashLong</value>
+ <value tokenid="55">dashLongHeavy</value>
+ <value tokenid="9">dotDash</value>
+ <value tokenid="25">dashDotHeavy</value>
+ <value tokenid="10">dotDotDash</value>
+ <value tokenid="26">dashDotDotHeavy</value>
+ <value tokenid="11">wave</value>
+ <value tokenid="27">wavyHeavy</value>
+ <value tokenid="43">wavyDouble</value>
+ <value tokenid="0">none</value>
+ </resource>
+ <resource name="CT_Underline" resource="Properties">
+ <attribute name="val" tokenid="ooxml:CT_Underline_val" default="single"/>
+ <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="0">none</value>
+ <value tokenid="1">lights</value>
+ <value tokenid="2">blinkBackground</value>
+ <value tokenid="3">sparkle</value>
+ <value tokenid="4">antsBlack</value>
+ <value tokenid="5">antsRed</value>
+ <value tokenid="6">shimmer</value>
+ </resource>
+ <resource name="CT_TextEffect" resource="ListValue">
+ <attribute name="val" tokenid="ooxml:CT_TextEffect_val"/>
+ </resource>
+ <resource name="ST_Border" resource="List">
+ <value tokenid="255">nil</value>
+ <value tokenid="0">none</value>
+ <value tokenid="1">single</value>
+ <value tokenid="2">thick</value>
+ <value tokenid="3">double</value>
+ <value tokenid="6">dotted</value>
+ <value tokenid="7">dashed</value>
+ <value tokenid="8">dotDash</value>
+ <value tokenid="9">dotDotDash</value>
+ <value tokenid="10">triple</value>
+ <value tokenid="11">thinThickSmallGap</value>
+ <value tokenid="12">thickThinSmallGap</value>
+ <value tokenid="13">thinThickThinSmallGap</value>
+ <value tokenid="14">thinThickMediumGap</value>
+ <value tokenid="15">thickThinMediumGap</value>
+ <value tokenid="16">thinThickThinMediumGap</value>
+ <value tokenid="17">thinThickLargeGap</value>
+ <value tokenid="18">thickThinLargeGap</value>
+ <value tokenid="19">thinThickThinLargeGap</value>
+ <value tokenid="20">wave</value>
+ <value tokenid="21">doubleWave</value>
+ <value tokenid="22">dashSmallGap</value>
+ <value tokenid="23">dashDotStroked</value>
+ <value tokenid="24">threeDEmboss</value>
+ <value tokenid="25">threeDEngrave</value>
+ <value tokenid="18">outset</value>
+ <value tokenid="17">inset</value>
+ <value tokenid="64">apples</value>
+ <value tokenid="65">archedScallops</value>
+ <value tokenid="66">babyPacifier</value>
+ <value tokenid="67">babyRattle</value>
+ <value tokenid="68">balloons3Colors</value>
+ <value tokenid="69">balloonsHotAir</value>
+ <value tokenid="70">basicBlackDashes</value>
+ <value tokenid="71">basicBlackDots</value>
+ <value tokenid="72">basicBlackSquares</value>
+ <value tokenid="73">basicThinLines</value>
+ <value tokenid="74">basicWhiteDashes</value>
+ <value tokenid="75">basicWhiteDots</value>
+ <value tokenid="76">basicWhiteSquares</value>
+ <value tokenid="77">basicWideInline</value>
+ <value tokenid="78">basicWideMidline</value>
+ <value tokenid="79">basicWideOutline</value>
+ <value tokenid="80">bats</value>
+ <value tokenid="81">birds</value>
+ <value tokenid="82">birdsFlight</value>
+ <value tokenid="83">cabins</value>
+ <value tokenid="84">cakeSlice</value>
+ <value tokenid="85">candyCorn</value>
+ <value tokenid="86">celticKnotwork</value>
+ <value tokenid="87">certificateBanner</value>
+ <value tokenid="88">chainLink</value>
+ <value tokenid="89">champagneBottle</value>
+ <value tokenid="90">checkedBarBlack</value>
+ <value tokenid="91">checkedBarColor</value>
+ <value tokenid="92">checkered</value>
+ <value tokenid="93">christmasTree</value>
+ <value tokenid="94">circlesLines</value>
+ <value tokenid="95">circlesRectangles</value>
+ <value tokenid="96">classicalWave</value>
+ <value tokenid="97">clocks</value>
+ <value tokenid="98">compass</value>
+ <value tokenid="99">confetti</value>
+ <value tokenid="100">confettiGrays</value>
+ <value tokenid="101">confettiOutline</value>
+ <value tokenid="102">confettiStreamers</value>
+ <value tokenid="103">confettiWhite</value>
+ <value tokenid="104">cornerTriangles</value>
+ <value tokenid="105">couponCutoutDashes</value>
+ <value tokenid="106">couponCutoutDots</value>
+ <value tokenid="107">crazyMaze</value>
+ <value tokenid="108">creaturesButterfly</value>
+ <value tokenid="109">creaturesFish</value>
+ <value tokenid="110">creaturesInsects</value>
+ <value tokenid="111">creaturesLadyBug</value>
+ <value tokenid="112">crossStitch</value>
+ <value tokenid="113">cup</value>
+ <value tokenid="114">decoArch</value>
+ <value tokenid="115">decoArchColor</value>
+ <value tokenid="116">decoBlocks</value>
+ <value tokenid="117">diamondsGray</value>
+ <value tokenid="118">doubleD</value>
+ <value tokenid="119">doubleDiamonds</value>
+ <value tokenid="120">earth1</value>
+ <value tokenid="121">earth2</value>
+ <value tokenid="122">eclipsingSquares1</value>
+ <value tokenid="123">eclipsingSquares2</value>
+ <value tokenid="124">eggsBlack</value>
+ <value tokenid="125">fans</value>
+ <value tokenid="126">film</value>
+ <value tokenid="127">firecrackers</value>
+ <value tokenid="128">flowersBlockPrint</value>
+ <value tokenid="129">flowersDaisies</value>
+ <value tokenid="130">flowersModern1</value>
+ <value tokenid="131">flowersModern2</value>
+ <value tokenid="132">flowersPansy</value>
+ <value tokenid="133">flowersRedRose</value>
+ <value tokenid="134">flowersRoses</value>
+ <value tokenid="135">flowersTeacup</value>
+ <value tokenid="136">flowersTiny</value>
+ <value tokenid="137">gems</value>
+ <value tokenid="138">gingerbreadMan</value>
+ <value tokenid="139">gradient</value>
+ <value tokenid="140">handmade1</value>
+ <value tokenid="141">handmade2</value>
+ <value tokenid="142">heartBalloon</value>
+ <value tokenid="143">heartGray</value>
+ <value tokenid="144">hearts</value>
+ <value tokenid="145">heebieJeebies</value>
+ <value tokenid="146">holly</value>
+ <value tokenid="147">houseFunky</value>
+ <value tokenid="148">hypnotic</value>
+ <value tokenid="149">iceCreamCones</value>
+ <value tokenid="150">lightBulb</value>
+ <value tokenid="151">lightning1</value>
+ <value tokenid="152">lightning2</value>
+ <value tokenid="153">mapPins</value>
+ <value tokenid="154">mapleLeaf</value>
+ <value tokenid="155">mapleMuffins</value>
+ <value tokenid="156">marquee</value>
+ <value tokenid="157">marqueeToothed</value>
+ <value tokenid="158">moons</value>
+ <value tokenid="159">mosaic</value>
+ <value tokenid="160">musicNotes</value>
+ <value tokenid="161">northwest</value>
+ <value tokenid="162">ovals</value>
+ <value tokenid="163">packages</value>
+ <value tokenid="164">palmsBlack</value>
+ <value tokenid="165">palmsColor</value>
+ <value tokenid="166">paperClips</value>
+ <value tokenid="167">papyrus</value>
+ <value tokenid="168">partyFavor</value>
+ <value tokenid="169">partyGlass</value>
+ <value tokenid="170">pencils</value>
+ <value tokenid="171">people</value>
+ <value tokenid="172">peopleWaving</value>
+ <value tokenid="173">peopleHats</value>
+ <value tokenid="174">poinsettias</value>
+ <value tokenid="175">postageStamp</value>
+ <value tokenid="176">pumpkin1</value>
+ <value tokenid="177">pushPinNote2</value>
+ <value tokenid="178">pushPinNote1</value>
+ <value tokenid="179">pyramids</value>
+ <value tokenid="180">pyramidsAbove</value>
+ <value tokenid="181">quadrants</value>
+ <value tokenid="182">rings</value>
+ <value tokenid="183">safari</value>
+ <value tokenid="184">sawtooth</value>
+ <value tokenid="185">sawtoothGray</value>
+ <value tokenid="186">scaredCat</value>
+ <value tokenid="187">seattle</value>
+ <value tokenid="188">shadowedSquares</value>
+ <value tokenid="189">sharksTeeth</value>
+ <value tokenid="190">shorebirdTracks</value>
+ <value tokenid="191">skyrocket</value>
+ <value tokenid="192">snowflakeFancy</value>
+ <value tokenid="193">snowflakes</value>
+ <value tokenid="194">sombrero</value>
+ <value tokenid="195">southwest</value>
+ <value tokenid="196">stars</value>
+ <value tokenid="197">starsTop</value>
+ <value tokenid="198">stars3d</value>
+ <value tokenid="199">starsBlack</value>
+ <value tokenid="200">starsShadowed</value>
+ <value tokenid="201">sun</value>
+ <value tokenid="202">swirligig</value>
+ <value tokenid="203">tornPaper</value>
+ <value tokenid="204">tornPaperBlack</value>
+ <value tokenid="205">trees</value>
+ <value tokenid="206">triangleParty</value>
+ <value tokenid="207">triangles</value>
+ <value tokenid="208">tribal1</value>
+ <value tokenid="209">tribal2</value>
+ <value tokenid="210">tribal3</value>
+ <value tokenid="211">tribal4</value>
+ <value tokenid="212">tribal5</value>
+ <value tokenid="213">tribal6</value>
+ <value tokenid="214">twistedLines1</value>
+ <value tokenid="215">twistedLines2</value>
+ <value tokenid="216">vine</value>
+ <value tokenid="217">waveline</value>
+ <value tokenid="218">weavingAngles</value>
+ <value tokenid="219">weavingBraid</value>
+ <value tokenid="220">weavingRibbon</value>
+ <value tokenid="221">weavingStrips</value>
+ <value tokenid="222">whiteFlowers</value>
+ <value tokenid="223">woodwork</value>
+ <value tokenid="224">xIllusions</value>
+ <value tokenid="225">zanyTriangles</value>
+ <value tokenid="226">zigZag</value>
+ <value tokenid="227">zigZagStitch</value>
+ </resource>
+ <resource name="CT_Border" resource="Properties">
+ <attribute name="val" tokenid="rtf:BRCTYPE"/>
+ <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="rtf:DPTLINEWIDTH"/>
+ <attribute name="space" tokenid="rtf:DPTSPACE"/>
+ <attribute name="shadow" tokenid="rtf:FSHADOW"/>
+ <attribute name="frame" tokenid="rtf:FFRAME"/>
+ </resource>
+ <resource name="ST_Shd" resource="List">
+ <value tokenid="0">nil</value>
+ <value tokenid="0">clear</value>
+ <value tokenid="1">solid</value>
+ <value tokenid="14">horzStripe</value>
+ <value tokenid="15">vertStripe</value>
+ <value tokenid="17">reverseDiagStripe</value>
+ <value tokenid="16">diagStripe</value>
+ <value tokenid="18">horzCross</value>
+ <value tokenid="19">diagCross</value>
+ <value tokenid="20">thinHorzStripe</value>
+ <value tokenid="21">thinVertStripe</value>
+ <value tokenid="23">thinReverseDiagStripe</value>
+ <value tokenid="22">thinDiagStripe</value>
+ <value tokenid="24">thinHorzCross</value>
+ <value tokenid="25">thinDiagCross</value>
+ <value tokenid="2">pct5</value>
+ <value tokenid="3">pct10</value>
+ <value tokenid="27">pct12</value>
+ <value tokenid="28">pct15</value>
+ <value tokenid="4">pct20</value>
+ <value tokenid="5">pct25</value>
+ <value tokenid="6">pct30</value>
+ <value tokenid="43">pct35</value>
+ <value tokenid="44">pct37</value>
+ <value tokenid="7">pct40</value>
+ <value tokenid="46">pct45</value>
+ <value tokenid="8">pct50</value>
+ <value tokenid="49">pct55</value>
+ <value tokenid="9">pct60</value>
+ <value tokenid="51">pct62</value>
+ <value tokenid="52">pct65</value>
+ <value tokenid="10">pct70</value>
+ <value tokenid="11">pct75</value>
+ <value tokenid="12">pct80</value>
+ <value tokenid="57">pct85</value>
+ <value tokenid="58">pct87</value>
+ <value tokenid="13">pct90</value>
+ <value tokenid="60">pct95</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="ST_VerticalAlignRun" resource="List" generated="yes">
+ <value name="baseline" tokenid="ooxml:Value_wordprocessingml_ST_VerticalAlignRun_baseline">baseline</value>
+ <value name="superscript" tokenid="ooxml:Value_wordprocessingml_ST_VerticalAlignRun_superscript">superscript</value>
+ <value name="subscript" tokenid="ooxml:Value_wordprocessingml_ST_VerticalAlignRun_subscript">subscript</value>
+ </resource>
+ <resource name="CT_VerticalAlignRun" resource="StringValue" generated="yes"/>
+ <resource name="CT_FitText" resource="StringValue" generated="yes"/>
+ <resource name="ST_Em" resource="List">
+ <value tokenid="0">none</value>
+ <value tokenid="1">dot</value>
+ <value tokenid="2">comma</value>
+ <value tokenid="3">circle</value>
+ <value tokenid="4">underDot</value>
+ </resource>
+ <resource name="CT_Em" resource="ListValue">
+ <attribute name="val" tokenid="ooxml:CT_Em_val"/>
+ </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="0">none</value>
+ <value tokenid="1">round</value>
+ <value tokenid="2">square</value>
+ <value tokenid="3">angle</value>
+ <value tokenid="4">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" generated="yes">
+ <value name="left" tokenid="ooxml:Value_wordprocessingml_ST_XAlign_left">left</value>
+ <value name="center" tokenid="ooxml:Value_wordprocessingml_ST_XAlign_center">center</value>
+ <value name="right" tokenid="ooxml:Value_wordprocessingml_ST_XAlign_right">right</value>
+ <value name="inside" tokenid="ooxml:Value_wordprocessingml_ST_XAlign_inside">inside</value>
+ <value name="outside" tokenid="ooxml:Value_wordprocessingml_ST_XAlign_outside">outside</value>
+ </resource>
+ <resource name="ST_YAlign" resource="List" generated="yes">
+ <value name="inline" tokenid="ooxml:Value_wordprocessingml_ST_YAlign_inline">inline</value>
+ <value name="top" tokenid="ooxml:Value_wordprocessingml_ST_YAlign_top">top</value>
+ <value name="center" tokenid="ooxml:Value_wordprocessingml_ST_YAlign_center">center</value>
+ <value name="bottom" tokenid="ooxml:Value_wordprocessingml_ST_YAlign_bottom">bottom</value>
+ <value name="inside" tokenid="ooxml:Value_wordprocessingml_ST_YAlign_inside">inside</value>
+ <value name="outside" tokenid="ooxml:Value_wordprocessingml_ST_YAlign_outside">outside</value>
+ </resource>
+ <resource name="ST_HeightRule" resource="List" generated="yes">
+ <value name="auto" tokenid="ooxml:Value_wordprocessingml_ST_HeightRule_auto">auto</value>
+ <value name="exact" tokenid="ooxml:Value_wordprocessingml_ST_HeightRule_exact">exact</value>
+ <value name="atLeast" tokenid="ooxml:Value_wordprocessingml_ST_HeightRule_atLeast">atLeast</value>
+ </resource>
+ <resource name="ST_Wrap" resource="List" generated="yes">
+ <value name="auto" tokenid="ooxml:Value_wordprocessingml_ST_Wrap_auto">auto</value>
+ <value name="notBeside" tokenid="ooxml:Value_wordprocessingml_ST_Wrap_notBeside">notBeside</value>
+ <value name="around" tokenid="ooxml:Value_wordprocessingml_ST_Wrap_around">around</value>
+ <value name="tight" tokenid="ooxml:Value_wordprocessingml_ST_Wrap_tight">tight</value>
+ <value name="through" tokenid="ooxml:Value_wordprocessingml_ST_Wrap_through">through</value>
+ <value name="none" tokenid="ooxml:Value_wordprocessingml_ST_Wrap_none">none</value>
+ </resource>
+ <resource name="ST_VAnchor" resource="List" generated="yes">
+ <value name="text" tokenid="ooxml:Value_wordprocessingml_ST_VAnchor_text">text</value>
+ <value name="margin" tokenid="ooxml:Value_wordprocessingml_ST_VAnchor_margin">margin</value>
+ <value name="page" tokenid="ooxml:Value_wordprocessingml_ST_VAnchor_page">page</value>
+ </resource>
+ <resource name="ST_HAnchor" resource="List" generated="yes">
+ <value name="text" tokenid="ooxml:Value_wordprocessingml_ST_HAnchor_text">text</value>
+ <value name="margin" tokenid="ooxml:Value_wordprocessingml_ST_HAnchor_margin">margin</value>
+ <value name="page" tokenid="ooxml:Value_wordprocessingml_ST_HAnchor_page">page</value>
+ </resource>
+ <resource name="ST_DropCap" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_wordprocessingml_ST_DropCap_none">none</value>
+ <value name="drop" tokenid="ooxml:Value_wordprocessingml_ST_DropCap_drop">drop</value>
+ <value name="margin" tokenid="ooxml:Value_wordprocessingml_ST_DropCap_margin">margin</value>
+ </resource>
+ <resource name="CT_FramePr" resource="Properties">
+ <kind name="paragraph"/>
+ <attribute name="dropCap" tokenid="ooxml:CT_FramePr_dropCap"/>
+ <attribute name="lines" tokenid="ooxml:CT_FramePr_lines"/>
+ <attribute name="w" tokenid="sprm:PDxaWidth"/>
+ <attribute name="h" tokenid="sprm:PWHeightAbs"/>
+ <attribute name="vSpace" tokenid="sprm:PDyaFromText"/>
+ <attribute name="hSpace" tokenid="sprm:PDxaFromText"/>
+ <attribute name="wrap" tokenid="sprm:PWr"/>
+ <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="sprm:PFLocked"/>
+ </resource>
+ <resource name="ST_TabJc" resource="List">
+ <value tokenid="ooxml:Value_ST_TabJc_clear">clear</value>
+ <value tokenid="0">left</value>
+ <value tokenid="1">center</value>
+ <value tokenid="2">right</value>
+ <value tokenid="3">decimal</value>
+ <value tokenid="4">bar</value>
+ <value tokenid="ooxml:Value_ST_TabJc_num">num</value>
+ </resource>
+ <resource name="ST_TabTlc" resource="List">
+ <value tokenid="0">none</value>
+ <value tokenid="1">dot</value>
+ <value tokenid="2">hyphen</value>
+ <value tokenid="3">underscore</value>
+ <value tokenid="4">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" generated="yes">
+ <value name="auto" tokenid="ooxml:Value_wordprocessingml_ST_LineSpacingRule_auto">auto</value>
+ <value name="exact" tokenid="ooxml:Value_wordprocessingml_ST_LineSpacingRule_exact">exact</value>
+ <value name="atLeast" tokenid="ooxml:Value_wordprocessingml_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="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"/>
+ <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"/>
+ </resource>
+ <resource name="ST_Jc" resource="List">
+ <value tokenid="0">left</value>
+ <value tokenid="1">center</value>
+ <value tokenid="2">right</value>
+ <value tokenid="3">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="ListValue">
+ <attribute name="val" tokenid="ooxml:CT_Jc_val"/>
+ </resource>
+ <resource name="ST_View" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_wordprocessingml_ST_View_none">none</value>
+ <value name="print" tokenid="ooxml:Value_wordprocessingml_ST_View_print">print</value>
+ <value name="outline" tokenid="ooxml:Value_wordprocessingml_ST_View_outline">outline</value>
+ <value name="masterPages" tokenid="ooxml:Value_wordprocessingml_ST_View_masterPages">masterPages</value>
+ <value name="normal" tokenid="ooxml:Value_wordprocessingml_ST_View_normal">normal</value>
+ <value name="web" tokenid="ooxml:Value_wordprocessingml_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" generated="yes">
+ <value name="none" tokenid="ooxml:Value_wordprocessingml_ST_Zoom_none">none</value>
+ <value name="fullPage" tokenid="ooxml:Value_wordprocessingml_ST_Zoom_fullPage">fullPage</value>
+ <value name="bestFit" tokenid="ooxml:Value_wordprocessingml_ST_Zoom_bestFit">bestFit</value>
+ <value name="textFit" tokenid="ooxml:Value_wordprocessingml_ST_Zoom_textFit">textFit</value>
+ </resource>
+ <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="ST_Proof" resource="List" generated="yes">
+ <value name="clean" tokenid="ooxml:Value_wordprocessingml_ST_Proof_clean">clean</value>
+ <value name="dirty" tokenid="ooxml:Value_wordprocessingml_ST_Proof_dirty">dirty</value>
+ </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" generated="yes">
+ <value name="notSpecified" tokenid="ooxml:Value_wordprocessingml_ST_DocType_notSpecified">notSpecified</value>
+ <value name="letter" tokenid="ooxml:Value_wordprocessingml_ST_DocType_letter">letter</value>
+ <value name="eMail" tokenid="ooxml:Value_wordprocessingml_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" generated="yes">
+ <value name="none" tokenid="ooxml:Value_wordprocessingml_ST_DocProtect_none">none</value>
+ <value name="readOnly" tokenid="ooxml:Value_wordprocessingml_ST_DocProtect_readOnly">readOnly</value>
+ <value name="comments" tokenid="ooxml:Value_wordprocessingml_ST_DocProtect_comments">comments</value>
+ <value name="trackedChanges" tokenid="ooxml:Value_wordprocessingml_ST_DocProtect_trackedChanges">trackedChanges</value>
+ <value name="forms" tokenid="ooxml:Value_wordprocessingml_ST_DocProtect_forms">forms</value>
+ </resource>
+ <resource name="ST_CryptProv" resource="List" generated="yes">
+ <value name="rsaAES" tokenid="ooxml:Value_wordprocessingml_ST_CryptProv_rsaAES">rsaAES</value>
+ <value name="rsaFull" tokenid="ooxml:Value_wordprocessingml_ST_CryptProv_rsaFull">rsaFull</value>
+ </resource>
+ <resource name="ST_AlgClass" resource="List" generated="yes">
+ <value name="hash" tokenid="ooxml:Value_wordprocessingml_ST_AlgClass_hash">hash</value>
+ </resource>
+ <resource name="ST_AlgType" resource="List" generated="yes">
+ <value name="typeAny" tokenid="ooxml:Value_wordprocessingml_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="ST_MailMergeDocType" resource="List" generated="yes">
+ <value name="catalog" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDocType_catalog">catalog</value>
+ <value name="envelopes" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDocType_envelopes">envelopes</value>
+ <value name="mailingLabels" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDocType_mailingLabels">mailingLabels</value>
+ <value name="formLetters" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDocType_formLetters">formLetters</value>
+ <value name="email" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDocType_email">email</value>
+ <value name="fax" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDocType_fax">fax</value>
+ </resource>
+ <resource name="CT_MailMergeDocType" resource="StringValue" generated="yes"/>
+ <resource name="ST_MailMergeDataType" resource="List" generated="yes">
+ <value name="textFile" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDataType_textFile">textFile</value>
+ <value name="database" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDataType_database">database</value>
+ <value name="spreadsheet" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDataType_spreadsheet">spreadsheet</value>
+ <value name="query" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDataType_query">query</value>
+ <value name="odbc" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDataType_odbc">odbc</value>
+ <value name="native" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDataType_native">native</value>
+ </resource>
+ <resource name="CT_MailMergeDataType" resource="StringValue" generated="yes"/>
+ <resource name="ST_MailMergeDest" resource="List" generated="yes">
+ <value name="newDocument" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDest_newDocument">newDocument</value>
+ <value name="printer" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDest_printer">printer</value>
+ <value name="email" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDest_email">email</value>
+ <value name="fax" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDest_fax">fax</value>
+ </resource>
+ <resource name="CT_MailMergeDest" resource="StringValue" generated="yes"/>
+ <resource name="ST_MailMergeOdsoFMDFieldType" resource="List" generated="yes">
+ <value name="null" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeOdsoFMDFieldType_null">null</value>
+ <value name="dbColumn" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeOdsoFMDFieldType_dbColumn">dbColumn</value>
+ </resource>
+ <resource name="CT_MailMergeOdsoFMDFieldType" resource="StringValue" generated="yes"/>
+ <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="ListValue"/>
+ <resource name="ST_TextAlignment" resource="List" generated="yes">
+ <value name="top" tokenid="ooxml:Value_wordprocessingml_ST_TextAlignment_top">top</value>
+ <value name="center" tokenid="ooxml:Value_wordprocessingml_ST_TextAlignment_center">center</value>
+ <value name="baseline" tokenid="ooxml:Value_wordprocessingml_ST_TextAlignment_baseline">baseline</value>
+ <value name="bottom" tokenid="ooxml:Value_wordprocessingml_ST_TextAlignment_bottom">bottom</value>
+ <value name="auto" tokenid="ooxml:Value_wordprocessingml_ST_TextAlignment_auto">auto</value>
+ </resource>
+ <resource name="ST_DisplacedByCustomXml" resource="List" generated="yes">
+ <value name="next" tokenid="ooxml:Value_wordprocessingml_ST_DisplacedByCustomXml_next">next</value>
+ <value name="prev" tokenid="ooxml:Value_wordprocessingml_ST_DisplacedByCustomXml_prev">prev</value>
+ </resource>
+ <resource name="ST_AnnotationVMerge" resource="List" generated="yes">
+ <value name="cont" tokenid="ooxml:Value_wordprocessingml_ST_AnnotationVMerge_cont">cont</value>
+ <value name="rest" tokenid="ooxml:Value_wordprocessingml_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"/>
+ </resource>
+ <resource name="CT_ParaTrackChange" resource="Properties">
+ <action name="start" action="tokenproperty"/>
+ <action name="start" action="propagateCharacterPropertiesAsSet" sendtokenid="ooxml:paratrackchange"/>
+ <action name="start" 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="rtf:IBKL"/>
+ </resource>
+ <resource name="CT_BookmarkRange" resource="Properties">
+ <type name="Bookmark"/>
+ <attribute name="colFirst" tokenid="ooxml:CT_BookmarkRange_colFirst"/>
+ <attribute name="colLast" tokenid="ooxml:CT_BookmarkRange_colLast"/>
+ </resource>
+ <resource name="CT_Bookmark" resource="Properties">
+ <type name="Bookmark"/>
+ <attribute name="name" tokenid="rtf:BOOKMARKNAME"/>
+ </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="propagateCharacterPropertiesAsSet" sendtokenid="ooxml:trackchange"/>
+ <action name="start" action="clearProps"/>
+ <action name="end" action="mark" sendtokenid="ooxml:endtrackchange"/>
+ </resource>
+ <resource name="CT_NumPr" resource="Properties">
+ <kind name="paragraph"/>
+ <element name="ilvl" tokenid="sprm:PIlvl"/>
+ <element name="numId" tokenid="sprm:PIlfo"/>
+ <element name="numberingChange" tokenid="ooxml:CT_NumPr_numberingChange"/>
+ <element name="ins" tokenid="ooxml:CT_NumPr_ins"/>
+ </resource>
+ <resource name="CT_PBdr" resource="Properties">
+ <kind name="paragraph"/>
+ <element name="top" tokenid="sprm:PBrcTop"/>
+ <element name="left" tokenid="sprm:PBrcLeft"/>
+ <element name="bottom" tokenid="sprm:PBrcBottom"/>
+ <element name="right" tokenid="sprm:PBrcRight"/>
+ <element name="between" tokenid="sprm:PBrcBetween"/>
+ <element name="bar" tokenid="sprm:PBrcBar"/>
+ </resource>
+ <resource name="CT_Tabs" resource="Properties">
+ <element name="tab" tokenid="ooxml:CT_Tabs_tab"/>
+ </resource>
+ <resource name="ST_TextboxTightWrap" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_wordprocessingml_ST_TextboxTightWrap_none">none</value>
+ <value name="allLines" tokenid="ooxml:Value_wordprocessingml_ST_TextboxTightWrap_allLines">allLines</value>
+ <value name="firstAndLastLine" tokenid="ooxml:Value_wordprocessingml_ST_TextboxTightWrap_firstAndLastLine">firstAndLastLine</value>
+ <value name="firstLineOnly" tokenid="ooxml:Value_wordprocessingml_ST_TextboxTightWrap_firstLineOnly">firstLineOnly</value>
+ <value name="lastLineOnly" tokenid="ooxml:Value_wordprocessingml_ST_TextboxTightWrap_lastLineOnly">lastLineOnly</value>
+ </resource>
+ <resource name="CT_TextboxTightWrap" resource="StringValue" generated="yes"/>
+ <resource name="CT_PPrBase" resource="Properties">
+ <kind name="paragraph"/>
+ <element name="pStyle" tokenid="ooxml:CT_PPrBase_pStyle"/>
+ <element name="keepNext" tokenid="sprm:PFKeepFollow"/>
+ <element name="keepLines" tokenid="sprm:PFKeep"/>
+ <element name="pageBreakBefore" tokenid="sprm:PFPageBreakBefore"/>
+ <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="sprm:PFNoLineNumb"/>
+ <element name="pBdr" tokenid="ooxml:CT_PrBase_pBdr"/>
+ <element name="shd" tokenid="sprm:PShd"/>
+ <element name="tabs" tokenid="ooxml:CT_PPrBase_tabs"/>
+ <element name="suppressAutoHyphens" tokenid="sprm:PFNoAutoHyph"/>
+ <element name="kinsoku" tokenid="ooxml:CT_PPrBase_kinsoku"/>
+ <element name="wordWrap" tokenid="ooxml:CT_PPrBase_wordWrap"/>
+ <element name="overflowPunct" tokenid="sprm:PFOverflowPunct"/>
+ <element name="topLinePunct" tokenid="sprm:PFTopLinePunct"/>
+ <element name="autoSpaceDE" tokenid="sprm:PFAutoSpaceDE"/>
+ <element name="autoSpaceDN" tokenid="sprm:PFAutoSpaceDN"/>
+ <element name="bidi" tokenid="sprm:PFBiDi"/>
+ <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="0x246d"/>
+ <element name="mirrorIndents" tokenid="0x2470"/>
+ <element name="suppressOverlap" tokenid="0x2462"/>
+ <element name="jc" tokenid="sprm:PJc"/>
+ <element name="textDirection" tokenid="sprm:PFrameTextFlow"/>
+ <element name="textAlignment" tokenid="sprm:PWAlignFont"/>
+ <element name="textboxTightWrap" tokenid="sprm:PTightWrap"/>
+ <element name="outlineLvl" tokenid="sprm:POutLvl"/>
+ <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 xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" name="CT_Control" resource="Properties">
+ <attribute name="name" tokenid="ooxml:CT_Control_name"/>
+ <attribute name="shapeid" tokenid="ooxml:CT_Control_shapeid"/>
+ <attribute name="r:id" tokenid="ooxml:CT_Control_r_id"/>
+ </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"/>
+ </resource>
+ <resource xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" 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">
+ <element name="control" tokenid="ooxml:CT_Object_control"/>
+ <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"/>
+ <element name="control" tokenid="ooxml:CT_Picture_control"/>
+ <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 name="begin" tokenid="ooxml:Value_ST_FldCharType_begin">begin</value>
+ <value name="separate" tokenid="ooxml:Value_ST_FldCharType_separate">separate</value>
+ <value name="end" tokenid="ooxml:Value_ST_FldCharType_end">end</value>
+ </resource>
+ <resource name="ST_InfoTextType" resource="List" generated="yes">
+ <value name="text" tokenid="ooxml:Value_wordprocessingml_ST_InfoTextType_text">text</value>
+ <value name="autoText" tokenid="ooxml:Value_wordprocessingml_ST_InfoTextType_autoText">autoText</value>
+ </resource>
+ <resource name="ST_FFHelpTextVal" resource="String" generated="yes"/>
+ <resource name="ST_FFStatusTextVal" resource="String" generated="yes"/>
+ <resource name="ST_FFName" resource="String" generated="yes"/>
+ <resource name="ST_FFTextType" resource="List" generated="yes">
+ <value name="regular" tokenid="ooxml:Value_wordprocessingml_ST_FFTextType_regular">regular</value>
+ <value name="number" tokenid="ooxml:Value_wordprocessingml_ST_FFTextType_number">number</value>
+ <value name="date" tokenid="ooxml:Value_wordprocessingml_ST_FFTextType_date">date</value>
+ <value name="currentTime" tokenid="ooxml:Value_wordprocessingml_ST_FFTextType_currentTime">currentTime</value>
+ <value name="currentDate" tokenid="ooxml:Value_wordprocessingml_ST_FFTextType_currentDate">currentDate</value>
+ <value name="calculated" tokenid="ooxml:Value_wordprocessingml_ST_FFTextType_calculated">calculated</value>
+ </resource>
+ <resource name="CT_FFTextType" resource="StringValue" generated="yes"/>
+ <resource name="CT_FFName" resource="StringValue" generated="yes"/>
+ <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>
+ </resource>
+ <resource xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" 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_FFHelpText" resource="StringValue" generated="yes"/>
+ <resource name="CT_FFStatusText" resource="StringValue" generated="yes"/>
+ <resource name="ST_SectionMark" resource="List">
+ <value tokenid="0">continuous</value>
+ <value tokenid="1">nextColumn</value>
+ <value tokenid="2">nextPage</value>
+ <value tokenid="3">evenPage</value>
+ <value tokenid="4">oddPage</value>
+ </resource>
+ <resource name="CT_SectType" resource="ListValue"/>
+ <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>
+ </resource>
+ <resource name="ST_PageOrientation" resource="List">
+ <value tokenid="0">portrait</value>
+ <value tokenid="1">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" generated="yes">
+ <value name="front" tokenid="ooxml:Value_wordprocessingml_ST_PageBorderZOrder_front">front</value>
+ <value name="back" tokenid="ooxml:Value_wordprocessingml_ST_PageBorderZOrder_back">back</value>
+ </resource>
+ <resource name="ST_PageBorderDisplay" resource="List" generated="yes">
+ <value name="allPages" tokenid="ooxml:Value_wordprocessingml_ST_PageBorderDisplay_allPages">allPages</value>
+ <value name="firstPage" tokenid="ooxml:Value_wordprocessingml_ST_PageBorderDisplay_firstPage">firstPage</value>
+ <value name="notFirstPage" tokenid="ooxml:Value_wordprocessingml_ST_PageBorderDisplay_notFirstPage">notFirstPage</value>
+ </resource>
+ <resource name="ST_PageBorderOffset" resource="List" generated="yes">
+ <value name="page" tokenid="ooxml:Value_wordprocessingml_ST_PageBorderOffset_page">page</value>
+ <value name="text" tokenid="ooxml:Value_wordprocessingml_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="0">newPage</value>
+ <value tokenid="1">newSection</value>
+ <value tokenid="2">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="0">top</value>
+ <value tokenid="1">center</value>
+ <value tokenid="2">both</value>
+ <value tokenid="3">bottom</value>
+ </resource>
+ <resource name="CT_VerticalJc" resource="ListValue"/>
+ <resource name="ST_DocGrid" resource="List" generated="yes">
+ <value name="default" tokenid="ooxml:Value_wordprocessingml_ST_DocGrid_default">default</value>
+ <value name="lines" tokenid="ooxml:Value_wordprocessingml_ST_DocGrid_lines">lines</value>
+ <value name="linesAndChars" tokenid="ooxml:Value_wordprocessingml_ST_DocGrid_linesAndChars">linesAndChars</value>
+ <value name="snapToChars" tokenid="ooxml:Value_wordprocessingml_ST_DocGrid_snapToChars">snapToChars</value>
+ </resource>
+ <resource name="ST_HdrFtr" resource="List">
+ <value tokenid="ooxml:Value_ST_HrdFtr_even">even</value>
+ <value tokenid="ooxml:Value_ST_HrdFtr_default">default</value>
+ <value tokenid="ooxml:Value_ST_HrdFtr_first">first</value>
+ </resource>
+ <resource name="ST_FtnEdn" resource="List" generated="yes">
+ <value name="normal" tokenid="ooxml:Value_wordprocessingml_ST_FtnEdn_normal">normal</value>
+ <value name="separator" tokenid="ooxml:Value_wordprocessingml_ST_FtnEdn_separator">separator</value>
+ <value name="continuationSeparator" tokenid="ooxml:Value_wordprocessingml_ST_FtnEdn_continuationSeparator">continuationSeparator</value>
+ <value name="continuationNotice" tokenid="ooxml:Value_wordprocessingml_ST_FtnEdn_continuationNotice">continuationNotice</value>
+ </resource>
+ <resource xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" 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="endCharacterGroup"/>
+ <action name="end" action="endParagraphGroup"/>
+ <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="start" action="startSectionGroup"/>
+ <action name="end" action="endSectionGroup"/>
+ </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="sprm:SBkc"/>
+ <element name="vAlign" tokenid="ooxml:EG_SectPrContents_vAlign"/>
+ </resource>
+ <resource name="CT_SectPrBase" resource="Properties"/>
+ <resource name="CT_SectPr" resource="Properties">
+ <element name="sectPrChange" tokenid="ooxml:CT_SectPr_sectPrChange"/>
+ <action name="start" action="setLastParagraphInSection"/>
+ </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="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="Stream">
+ <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"/>
+ </resource>
+ <resource name="ST_ProofErr" resource="List" generated="yes">
+ <value name="spellStart" tokenid="ooxml:Value_wordprocessingml_ST_ProofErr_spellStart">spellStart</value>
+ <value name="spellEnd" tokenid="ooxml:Value_wordprocessingml_ST_ProofErr_spellEnd">spellEnd</value>
+ <value name="gramStart" tokenid="ooxml:Value_wordprocessingml_ST_ProofErr_gramStart">gramStart</value>
+ <value name="gramEnd" tokenid="ooxml:Value_wordprocessingml_ST_ProofErr_gramEnd">gramEnd</value>
+ </resource>
+ <resource name="ST_EdGrp" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_wordprocessingml_ST_EdGrp_none">none</value>
+ <value name="everyone" tokenid="ooxml:Value_wordprocessingml_ST_EdGrp_everyone">everyone</value>
+ <value name="administrators" tokenid="ooxml:Value_wordprocessingml_ST_EdGrp_administrators">administrators</value>
+ <value name="contributors" tokenid="ooxml:Value_wordprocessingml_ST_EdGrp_contributors">contributors</value>
+ <value name="editors" tokenid="ooxml:Value_wordprocessingml_ST_EdGrp_editors">editors</value>
+ <value name="owners" tokenid="ooxml:Value_wordprocessingml_ST_EdGrp_owners">owners</value>
+ <value name="current" tokenid="ooxml:Value_wordprocessingml_ST_EdGrp_current">current</value>
+ </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="Stream">
+ <action name="end" action="endOfParagraph"/>
+ </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"/>
+ </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">
+ <kind name="paragraph"/>
+ <element name="rStyle" tokenid="ooxml:EG_RPrBase_rStyle"/>
+ <element name="rFonts" tokenid="ooxml:EG_RPrBase_rFonts"/>
+ <element name="b" tokenid="sprm:CFBold"/>
+ <element name="bCs" tokenid="sprm:CFBoldBi"/>
+ <element name="i" tokenid="sprm:CFItalic"/>
+ <element name="iCs" tokenid="sprm:CFItalicBi"/>
+ <element name="caps" tokenid="sprm:CFCaps"/>
+ <element name="smallCaps" tokenid="sprm:CFSmallCaps"/>
+ <element name="strike" tokenid="sprm:CFStrike"/>
+ <element name="dstrike" tokenid="sprm:CFDStrike"/>
+ <element name="outline" tokenid="sprm:CFOutline"/>
+ <element name="shadow" tokenid="sprm:CFShadow"/>
+ <element name="emboss" tokenid="sprm:CFEmboss"/>
+ <element name="imprint" tokenid="sprm:CFImprint"/>
+ <element name="noProof" tokenid="sprm:CFNoProof"/>
+ <element name="snapToGrid" tokenid="ooxml:EG_RPrBase_snapToGrid"/>
+ <element name="vanish" tokenid="sprm:CFVanish"/>
+ <element name="webHidden" tokenid="sprm:CFVanish"/>
+ <element name="color" tokenid="ooxml:EG_RPrBase_color"/>
+ <element name="spacing" tokenid="sprm:CDxaSpace"/>
+ <element name="w" tokenid="sprm:CCharScale"/>
+ <element name="kern" tokenid="sprm:CHpsKern"/>
+ <element name="position" tokenid="sprm:CHpsPos"/>
+ <element name="sz" tokenid="sprm:CHps"/>
+ <element name="szCs" tokenid="sprm:CHpsBi"/>
+ <element name="highlight" tokenid="sprm:CHighlight"/>
+ <element name="u" tokenid="ooxml:EG_RPrBase_u"/>
+ <element name="effect" tokenid="sprm:CSfxText"/>
+ <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="sprm:CComplexScript"/>
+ <element name="em" tokenid="sprm:CKcd"/>
+ <element name="lang" tokenid="ooxml:EG_RPrBase_lang"/>
+ <element name="eastAsianLayout" tokenid="ooxml:EG_RPrBase_eastAsianLayout"/>
+ <element name="specVanish" tokenid="0x818"/>
+ <element name="oMath" tokenid="ooxml:EG_RPrBase_oMath"/>
+ </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="ST_RubyAlign" resource="List" generated="yes">
+ <value name="center" tokenid="ooxml:Value_wordprocessingml_ST_RubyAlign_center">center</value>
+ <value name="distributeLetter" tokenid="ooxml:Value_wordprocessingml_ST_RubyAlign_distributeLetter">distributeLetter</value>
+ <value name="distributeSpace" tokenid="ooxml:Value_wordprocessingml_ST_RubyAlign_distributeSpace">distributeSpace</value>
+ <value name="left" tokenid="ooxml:Value_wordprocessingml_ST_RubyAlign_left">left</value>
+ <value name="right" tokenid="ooxml:Value_wordprocessingml_ST_RubyAlign_right">right</value>
+ <value name="rightVertical" tokenid="ooxml:Value_wordprocessingml_ST_RubyAlign_rightVertical">rightVertical</value>
+ </resource>
+ <resource name="CT_RubyAlign" resource="StringValue" generated="yes"/>
+ <resource name="ST_Lock" resource="List" generated="yes">
+ <value name="sdtLocked" tokenid="ooxml:Value_wordprocessingml_ST_Lock_sdtLocked">sdtLocked</value>
+ <value name="contentLocked" tokenid="ooxml:Value_wordprocessingml_ST_Lock_contentLocked">contentLocked</value>
+ <value name="unlocked" tokenid="ooxml:Value_wordprocessingml_ST_Lock_unlocked">unlocked</value>
+ <value name="sdtContentLocked" tokenid="ooxml:Value_wordprocessingml_ST_Lock_sdtContentLocked">sdtContentLocked</value>
+ </resource>
+ <resource name="CT_Lock" resource="StringValue" generated="yes"/>
+ <resource name="ST_SdtDateMappingType" resource="List" generated="yes">
+ <value name="text" tokenid="ooxml:Value_wordprocessingml_ST_SdtDateMappingType_text">text</value>
+ <value name="date" tokenid="ooxml:Value_wordprocessingml_ST_SdtDateMappingType_date">date</value>
+ <value name="dateTime" tokenid="ooxml:Value_wordprocessingml_ST_SdtDateMappingType_dateTime">dateTime</value>
+ </resource>
+ <resource name="CT_SdtDateMappingType" resource="StringValue" generated="yes"/>
+ <resource name="ST_CalendarType" resource="List" generated="yes">
+ <value name="gregorian" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_gregorian">gregorian</value>
+ <value name="hijri" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_hijri">hijri</value>
+ <value name="hebrew" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_hebrew">hebrew</value>
+ <value name="taiwan" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_taiwan">taiwan</value>
+ <value name="japan" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_japan">japan</value>
+ <value name="thai" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_thai">thai</value>
+ <value name="korea" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_korea">korea</value>
+ <value name="saka" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_saka">saka</value>
+ <value name="gregorianXlitEnglish" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_gregorianXlitEnglish">gregorianXlitEnglish</value>
+ <value name="gregorianXlitFrench" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_gregorianXlitFrench">gregorianXlitFrench</value>
+ </resource>
+ <resource name="CT_CalendarType" resource="StringValue" generated="yes"/>
+ <resource name="CT_SdtContentRun" resource="Properties"/>
+ <resource name="CT_Attr" resource="StringValue" generated="yes"/>
+ <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_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="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_TblGridCol" resource="IntegerValue"/>
+ <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="propagateCharacterProperties"/>
+ <action name="end" action="clearProps"/>
+ </resource>
+ <resource name="CT_TcBorders" resource="Properties">
+ <kind name="table"/>
+ <element name="top" tokenid="ooxml:CT_TcBorders_top"/>
+ <element name="left" tokenid="ooxml:CT_TcBorders_left"/>
+ <element name="bottom" tokenid="ooxml:CT_TcBorders_bottom"/>
+ <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">
+ <kind name="table"/>
+ <element name="top" tokenid="ooxml:CT_TcMar_top"/>
+ <element name="left" tokenid="ooxml:CT_TcMar_left"/>
+ <element name="bottom" tokenid="ooxml:CT_TcMar_bottom"/>
+ <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>
+ <default tokenid="ooxml:Value_ST_Merge_continue"/>
+ </resource>
+ <resource name="CT_VMerge" resource="ListValue">
+ <default tokenid="ooxml:Value_ST_Merge_continue"/>
+ </resource>
+ <resource name="CT_HMerge" resource="ListValue">
+ <default tokenid="ooxml:Value_ST_Merge_continue"/>
+ </resource>
+ <resource name="CT_TcPrBase" resource="Properties">
+ <kind name="table"/>
+ <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"/>
+ </resource>
+ <resource name="CT_TcPr" resource="Properties">
+ <element name="tcPrChange" tokenid="ooxml:CT_TcPr_tcPrChange"/>
+ <action name="end" action="propagateCharacterProperties"/>
+ <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="endParagraphGroup"/>
+ </resource>
+ <resource name="ST_Cnf" resource="String" generated="yes"/>
+ <resource name="CT_Cnf" resource="StringValue" generated="yes"/>
+ <resource name="CT_TrPrBase" resource="Properties">
+ <kind name="table"/>
+ <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="sprm:TCantSplit"/>
+ <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_TrPr" resource="Properties">
+ <kind name="table"/>
+ <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="propagateTableProperties"/>
+ </resource>
+ <resource name="CT_Row" resource="TextTableRow"/>
+ <resource name="ST_TblLayoutType" resource="List" generated="yes">
+ <value name="fixed" tokenid="ooxml:Value_wordprocessingml_ST_TblLayoutType_fixed">fixed</value>
+ <value name="autofit" tokenid="ooxml:Value_wordprocessingml_ST_TblLayoutType_autofit">autofit</value>
+ </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="ListValue"/>
+ <resource name="CT_TblCellMar" resource="Properties">
+ <element name="top" tokenid="ooxml:CT_TblCellMar_top"/>
+ <element name="left" tokenid="ooxml:CT_TblCellMar_left"/>
+ <element name="bottom" tokenid="ooxml:CT_TblCellMar_bottom"/>
+ <element name="right" tokenid="ooxml:CT_TblCellMar_right"/>
+ </resource>
+ <resource name="CT_TblBorders" resource="Properties">
+ <kind name="table"/>
+ <element name="top" tokenid="ooxml:CT_TblBorders_top"/>
+ <element name="left" tokenid="ooxml:CT_TblBorders_left"/>
+ <element name="bottom" tokenid="ooxml:CT_TblBorders_bottom"/>
+ <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">
+ <kind name="table"/>
+ <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"/>
+ </resource>
+ <resource name="CT_TblPr" resource="Properties">
+ <kind name="table"/>
+ <element name="tblPrChange" tokenid="ooxml:CT_TblPr_tblPrChange"/>
+ <action name="end" action="propagateCharacterProperties"/>
+ <action name="end" action="clearProps"/>
+ </resource>
+ <resource name="CT_Tbl" resource="TextTable"/>
+ <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="ListValue">
+ <attribute name="val" tokenid="ooxml:CT_FtnPos_val"/>
+ </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="ListValue">
+ <attribute name="val" tokenid="ooxml:CT_EdnPos_val"/>
+ </resource>
+ <resource name="CT_NumFmt" resource="ListValue">
+ <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="ListValue">
+ <attribute name="val" tokenid="ooxml:CT_NumRestart_val"/>
+ </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_FtnEdn" resource="XNote">
+ <attribute name="type" tokenid="ooxml:CT_FtnEdn_type" action="checkXNoteType"/>
+ <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="ST_MailMergeSourceType" resource="List" generated="yes">
+ <value name="database" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeSourceType_database">database</value>
+ <value name="addressBook" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeSourceType_addressBook">addressBook</value>
+ <value name="document1" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeSourceType_document1">document1</value>
+ <value name="document2" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeSourceType_document2">document2</value>
+ <value name="text" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeSourceType_text">text</value>
+ <value name="email" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeSourceType_email">email</value>
+ <value name="native" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeSourceType_native">native</value>
+ <value name="legacy" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeSourceType_legacy">legacy</value>
+ <value name="master" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeSourceType_master">master</value>
+ </resource>
+ <resource name="CT_MailMergeSourceType" resource="StringValue" generated="yes"/>
+ <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="ST_TargetScreenSz" resource="List" generated="yes">
+ <value name="544x376" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_544x376">544x376</value>
+ <value name="640x480" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_640x480">640x480</value>
+ <value name="720x512" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_720x512">720x512</value>
+ <value name="800x600" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_800x600">800x600</value>
+ <value name="1024x768" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_1024x768">1024x768</value>
+ <value name="1152x882" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_1152x882">1152x882</value>
+ <value name="1152x900" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_1152x900">1152x900</value>
+ <value name="1280x1024" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_1280x1024">1280x1024</value>
+ <value name="1600x1200" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_1600x1200">1600x1200</value>
+ <value name="1800x1440" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_1800x1440">1800x1440</value>
+ <value name="1920x1200" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_1920x1200">1920x1200</value>
+ </resource>
+ <resource name="CT_TargetScreenSz" resource="StringValue" generated="yes"/>
+ <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"/>
+ </resource>
+ <resource name="CT_DocVar" resource="StringValue" generated="yes"/>
+ <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="ST_CharacterSpacing" resource="List" generated="yes">
+ <value name="doNotCompress" tokenid="ooxml:Value_wordprocessingml_ST_CharacterSpacing_doNotCompress">doNotCompress</value>
+ <value name="compressPunctuation" tokenid="ooxml:Value_wordprocessingml_ST_CharacterSpacing_compressPunctuation">compressPunctuation</value>
+ <value name="compressPunctuationAndJapaneseKana" tokenid="ooxml:Value_wordprocessingml_ST_CharacterSpacing_compressPunctuationAndJapaneseKana">compressPunctuationAndJapaneseKana</value>
+ </resource>
+ <resource name="CT_CharacterSpacing" resource="StringValue" generated="yes"/>
+ <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="ST_ColorSchemeIndex" resource="List" generated="yes">
+ <value name="dark1" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_dark1">dark1</value>
+ <value name="light1" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_light1">light1</value>
+ <value name="dark2" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_dark2">dark2</value>
+ <value name="light2" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_light2">light2</value>
+ <value name="accent1" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_accent1">accent1</value>
+ <value name="accent2" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_accent2">accent2</value>
+ <value name="accent3" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_accent3">accent3</value>
+ <value name="accent4" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_accent4">accent4</value>
+ <value name="accent5" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_accent5">accent5</value>
+ <value name="accent6" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_accent6">accent6</value>
+ <value name="hyperlink" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_hyperlink">hyperlink</value>
+ <value name="followedHyperlink" tokenid="ooxml:Value_wordprocessingml_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="ST_FrameScrollbar" resource="List" generated="yes">
+ <value name="on" tokenid="ooxml:Value_wordprocessingml_ST_FrameScrollbar_on">on</value>
+ <value name="off" tokenid="ooxml:Value_wordprocessingml_ST_FrameScrollbar_off">off</value>
+ <value name="auto" tokenid="ooxml:Value_wordprocessingml_ST_FrameScrollbar_auto">auto</value>
+ </resource>
+ <resource name="CT_FrameScrollbar" resource="StringValue" generated="yes"/>
+ <resource name="ST_FrameLayout" resource="List" generated="yes">
+ <value name="rows" tokenid="ooxml:Value_wordprocessingml_ST_FrameLayout_rows">rows</value>
+ <value name="cols" tokenid="ooxml:Value_wordprocessingml_ST_FrameLayout_cols">cols</value>
+ <value name="none" tokenid="ooxml:Value_wordprocessingml_ST_FrameLayout_none">none</value>
+ </resource>
+ <resource name="CT_FrameLayout" resource="StringValue" generated="yes"/>
+ <resource name="ST_LevelSuffix" resource="List" generated="yes">
+ <value name="tab" tokenid="ooxml:Value_wordprocessingml_ST_LevelSuffix_tab">tab</value>
+ <value name="space" tokenid="ooxml:Value_wordprocessingml_ST_LevelSuffix_space">space</value>
+ <value name="nothing" tokenid="ooxml:Value_wordprocessingml_ST_LevelSuffix_nothing">nothing</value>
+ </resource>
+ <resource name="CT_LevelSuffix" resource="StringValue" generated="yes"/>
+ <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">
+ <kind name="paragraph"/>
+ <element name="start" tokenid="rtf:ISTARTAT"/>
+ <element name="numFmt" tokenid="rtf:NFC"/>
+ <element name="lvlRestart" tokenid="ooxml:CT_Lvl_lvlRestart"/>
+ <element name="pStyle" tokenid="ooxml:CT_Lvl_pStyle"/>
+ <element name="isLgl" tokenid="rtf:FLEGAL"/>
+ <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="rtf:FWORD6"/>
+ <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="ListValue"/>
+ <resource name="CT_AbstractNum" resource="Properties">
+ <kind name="paragraph"/>
+ <element name="nsid" tokenid="rtf:LSID"/>
+ <element name="multiLevelType" tokenid="ooxml:CT_AbstractNum_multiLevelType"/>
+ <element name="tmpl" tokenid="rtf:TPLC"/>
+ <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">
+ <kind name="paragraph"/>
+ <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">
+ <kind name="paragraph"/>
+ <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">
+ <kind name="paragraph"/>
+ <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="1">wholeTable</value>
+ <value tokenid="2">firstRow</value>
+ <value tokenid="3">lastRow</value>
+ <value tokenid="4">firstCol</value>
+ <value tokenid="5">lastCol</value>
+ <value tokenid="6">band1Vert</value>
+ <value tokenid="7">band2Vert</value>
+ <value tokenid="8">band1Horz</value>
+ <value tokenid="9">band2Horz</value>
+ <value tokenid="10">neCell</value>
+ <value tokenid="11">nwCell</value>
+ <value tokenid="12">seCell</value>
+ <value tokenid="13">swCell</value>
+ </resource>
+ <resource name="ST_StyleType" resource="List">
+ <value tokenid="1">paragraph</value>
+ <value tokenid="2">character</value>
+ <value tokenid="3">table</value>
+ <value tokenid="4">numbering</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="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="rtf:STYLESHEET"/>
+ <resource name="ST_Panose" resource="Hex"/>
+ <resource name="CT_Panose" resource="HexValue"/>
+ <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="ListValue"/>
+ <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="ListValue"/>
+ <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"/>
+ </resource>
+ <resource name="CT_Font" resource="Properties">
+ <kind name="character"/>
+ <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="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="rtf:FONTTABLE"/>
+ <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">
+ <action name="newProperty" id="ooxml:ins" value="1"/>
+ </element>
+ <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="endSectionGroup"/>
+ </resource>
+ <resource xmlns:v="urn:schemas-microsoft-com:vml" 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_ShapeDefaults" resource="Properties">
+ <element name="" tokenid="ooxml:CT_ShapeDefaults_"/>
+ </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_ShapeDefaults" resource="Properties">
+ <element name="" tokenid="ooxml:CT_ShapeDefaults_"/>
+ </resource>
+ <resource name="CT_Comments" resource="Stream">
+ <action name="start" action="startSectionGroup"/>
+ <action name="end" action="endSectionGroup"/>
+ </resource>
+ <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="ST_DocPartBehavior" resource="List" generated="yes">
+ <value name="content" tokenid="ooxml:Value_wordprocessingml_ST_DocPartBehavior_content">content</value>
+ <value name="p" tokenid="ooxml:Value_wordprocessingml_ST_DocPartBehavior_p">p</value>
+ <value name="pg" tokenid="ooxml:Value_wordprocessingml_ST_DocPartBehavior_pg">pg</value>
+ </resource>
+ <resource name="CT_DocPartBehavior" resource="StringValue" generated="yes"/>
+ <resource name="ST_DocPartType" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_wordprocessingml_ST_DocPartType_none">none</value>
+ <value name="normal" tokenid="ooxml:Value_wordprocessingml_ST_DocPartType_normal">normal</value>
+ <value name="autoExp" tokenid="ooxml:Value_wordprocessingml_ST_DocPartType_autoExp">autoExp</value>
+ <value name="toolbar" tokenid="ooxml:Value_wordprocessingml_ST_DocPartType_toolbar">toolbar</value>
+ <value name="speller" tokenid="ooxml:Value_wordprocessingml_ST_DocPartType_speller">speller</value>
+ <value name="formFld" tokenid="ooxml:Value_wordprocessingml_ST_DocPartType_formFld">formFld</value>
+ <value name="bbPlcHdr" tokenid="ooxml:Value_wordprocessingml_ST_DocPartType_bbPlcHdr">bbPlcHdr</value>
+ </resource>
+ <resource name="CT_DocPartType" resource="StringValue" generated="yes"/>
+ <resource name="ST_DocPartGallery" resource="List" generated="yes">
+ <value name="placeholder" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_placeholder">placeholder</value>
+ <value name="any" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_any">any</value>
+ <value name="default" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_default">default</value>
+ <value name="docParts" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_docParts">docParts</value>
+ <value name="coverPg" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_coverPg">coverPg</value>
+ <value name="eq" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_eq">eq</value>
+ <value name="ftrs" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_ftrs">ftrs</value>
+ <value name="hdrs" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_hdrs">hdrs</value>
+ <value name="pgNum" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_pgNum">pgNum</value>
+ <value name="tbls" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_tbls">tbls</value>
+ <value name="watermarks" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_watermarks">watermarks</value>
+ <value name="autoTxt" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_autoTxt">autoTxt</value>
+ <value name="txtBox" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_txtBox">txtBox</value>
+ <value name="pgNumT" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_pgNumT">pgNumT</value>
+ <value name="pgNumB" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_pgNumB">pgNumB</value>
+ <value name="pgNumMargins" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_pgNumMargins">pgNumMargins</value>
+ <value name="tblOfContents" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_tblOfContents">tblOfContents</value>
+ <value name="bib" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_bib">bib</value>
+ <value name="custQuickParts" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custQuickParts">custQuickParts</value>
+ <value name="custCoverPg" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custCoverPg">custCoverPg</value>
+ <value name="custEq" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custEq">custEq</value>
+ <value name="custFtrs" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custFtrs">custFtrs</value>
+ <value name="custHdrs" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custHdrs">custHdrs</value>
+ <value name="custPgNum" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custPgNum">custPgNum</value>
+ <value name="custTbls" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custTbls">custTbls</value>
+ <value name="custWatermarks" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custWatermarks">custWatermarks</value>
+ <value name="custAutoTxt" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custAutoTxt">custAutoTxt</value>
+ <value name="custTxtBox" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custTxtBox">custTxtBox</value>
+ <value name="custPgNumT" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custPgNumT">custPgNumT</value>
+ <value name="custPgNumB" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custPgNumB">custPgNumB</value>
+ <value name="custPgNumMargins" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custPgNumMargins">custPgNumMargins</value>
+ <value name="custTblOfContents" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custTblOfContents">custTblOfContents</value>
+ <value name="custBib" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custBib">custBib</value>
+ <value name="custom1" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custom1">custom1</value>
+ <value name="custom2" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custom2">custom2</value>
+ <value name="custom3" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custom3">custom3</value>
+ <value name="custom4" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custom4">custom4</value>
+ <value name="custom5" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custom5">custom5</value>
+ </resource>
+ <resource name="CT_DocPartGallery" resource="StringValue" generated="yes"/>
+ <resource name="CT_DocPartName" resource="StringValue" generated="yes"/>
+ <resource name="settings" resource="Stream">
+ <element name="settings" tokenid="ooxml:settings_settings"/>
+ </resource>
+ <resource name="numbering" resource="Stream"/>
+ <resource name="ST_CaptionPos" resource="List" generated="yes">
+ <value name="above" tokenid="ooxml:Value_wordprocessingml_ST_CaptionPos_above">above</value>
+ <value name="below" tokenid="ooxml:Value_wordprocessingml_ST_CaptionPos_below">below</value>
+ <value name="left" tokenid="ooxml:Value_wordprocessingml_ST_CaptionPos_left">left</value>
+ <value name="right" tokenid="ooxml:Value_wordprocessingml_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="document" resource="Stream"/>
+ <resource name="glossaryDocument" resource="Stream"/>
+ </namespace>
+</model>
diff --git a/writerfilter/source/ooxml/modelcleanup b/writerfilter/source/ooxml/modelcleanup
new file mode 100755
index 000000000000..25651aa343a2
--- /dev/null
+++ b/writerfilter/source/ooxml/modelcleanup
@@ -0,0 +1,3 @@
+#!/bin/sh
+(xsltproc modelcleanup.xsl model.xml | xmllint --format - > model.xml.tmp) && \
+mv model.xml.tmp model.xml
diff --git a/writerfilter/source/ooxml/modelcleanup.xsl b/writerfilter/source/ooxml/modelcleanup.xsl
new file mode 100644
index 000000000000..364d41a6bc9c
--- /dev/null
+++ b/writerfilter/source/ooxml/modelcleanup.xsl
@@ -0,0 +1,196 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:xalan="http://xml.apache.org/xalan"
+ exclude-result-prefixes = "xalan"
+ xml:indent="true">
+ <xsl:output method="xml" />
+
+
+ <xsl:key name="resources"
+ match="resource[not(@generated)]" use="@name" />
+
+ <xsl:template name="generateresource">
+ <xsl:param name="resource"/>
+ <xsl:element name="resource">
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="resource">
+ <xsl:value-of select="$resource"/>
+ </xsl:attribute>
+ <xsl:attribute name="generated">
+ <xsl:text>yes</xsl:text>
+ </xsl:attribute>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:key name="nsaliases" match="//namespace-alias" use="@name"/>
+
+ <xsl:template name="resourcevalues">
+ <xsl:variable name="definename" select="@name"/>
+ <xsl:variable name="namespace" select="key('nsaliases', ancestor::namespace/rng:grammar/@ns)/@alias"/>
+ <xsl:element name="resource">
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="resource">List</xsl:attribute>
+ <xsl:attribute name="generated">yes</xsl:attribute>
+ <xsl:for-each select=".//rng:value">
+ <xsl:element name="value">
+ <xsl:attribute name="name">
+ <xsl:value-of select="translate(., '-+ ,', 'mp__')"/>
+ </xsl:attribute>
+ <xsl:attribute name="tokenid">
+ <xsl:text>ooxml:Value_</xsl:text>
+ <xsl:value-of select="translate($namespace, '-', '_')"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="$definename"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="translate(., '-+ ,', 'mp__')"/>
+ </xsl:attribute>
+ <xsl:value-of select="."/>
+ </xsl:element>
+ </xsl:for-each>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template match="namespace">
+ <xsl:variable name="nsid" select="generate-id(.)"/>
+ <xsl:element name="namespace">
+ <xsl:copy-of select="@*"/>
+ <xsl:copy-of select=".//start"/>
+ <xsl:copy-of select="./rng:grammar"/>
+
+ <xsl:for-each select=".//rng:define">
+ <xsl:variable name="resources" select="key('resources', @name)[generate-id(ancestor::namespace) = $nsid]"/>
+ <xsl:copy-of select="$resources"/>
+ <xsl:if test="count($resources) = 0">
+ <xsl:if test="substring(@name, 1, 3) = 'CT_'">
+ <xsl:if test="./rng:attribute[@name='val']/rng:text">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">StringValue</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:if>
+ <xsl:if test="substring(@name, 1, 3) = 'ST_'">
+ <xsl:if test="./rng:data[@type='int']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">Integer</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:data[@type='integer']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">Integer</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:data[@type='long']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">Integer</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:data[@type='unsignedInt']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">Integer</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:data[@type='unsignedLong']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">Integer</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:data[@type='boolean']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">Boolean</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:data[@type='token']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">String</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:data[@type='string']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">String</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:data[@type='dateTime']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">String</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:data[@type='hexBinary']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">Hex</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:list">
+ <xsl:call-template name="resourcevalues"/>
+ </xsl:if>
+ </xsl:if>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template match="namespace-alias">
+ <namespace-alias>
+ <xsl:for-each select="@*">
+ <xsl:copy-of select="."/>
+ </xsl:for-each>
+ </namespace-alias>
+ </xsl:template>
+
+ <xsl:template match="token">
+ <token>
+ <xsl:for-each select="@*">
+ <xsl:copy-of select="."/>
+ </xsl:for-each>
+ </token>
+ </xsl:template>
+
+ <xsl:template match="fasttoken">
+ <xsl:copy-of select="."/>
+ </xsl:template>
+
+ <xsl:template match="/">
+ <model>
+ <xsl:apply-templates select=".//namespace-alias">
+ <xsl:sort select="@id" data-type="number"/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select=".//token"/>
+ <xsl:apply-templates select=".//fasttoken"/>
+ <xsl:apply-templates select=".//namespace"/>
+ </model>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/modelpreprocess.xsl b/writerfilter/source/ooxml/modelpreprocess.xsl
new file mode 100644
index 000000000000..2a78f8e748a6
--- /dev/null
+++ b/writerfilter/source/ooxml/modelpreprocess.xsl
@@ -0,0 +1,224 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="xml" />
+
+ <!--<xsl:include href="resourcestools.xsl"/>-->
+
+ <xsl:key name="namespace-aliases" match="//namespace-alias" use="@name"/>
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template name="prefixfromurl">
+ <xsl:param name="url"/>
+ <xsl:variable name="prefix" select="key('namespace-aliases', $url)/@alias"/>
+ <xsl:choose>
+ <xsl:when test="string-length($prefix) > 0">
+ <xsl:value-of select="$prefix"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="translate(substring-after($url, 'http://'), '/.', '__')"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="prefixforgrammar">
+ <xsl:variable name="ns" select="ancestor::namespace/rng:grammar/@ns"/>
+ <xsl:variable name="prefix" select="key('namespace-aliases', $ns)/@alias"/>
+ <xsl:choose>
+ <xsl:when test="string-length($prefix) > 0">
+ <xsl:value-of select="$prefix"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="prefixfromurl">
+ <xsl:with-param name="url" select="$ns"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="nsforgrammar">
+ <xsl:value-of select="ancestor::namespace/rng:grammar/@ns"/>
+ </xsl:template>
+
+ <xsl:template match="rng:element[@name] | rng:attribute[@name] | element | attribute">
+ <xsl:variable name="prefix">
+ <xsl:choose>
+ <xsl:when test="contains(@name, ':')">
+ <xsl:variable name="myname" select="@name"/>
+ <xsl:call-template name="prefixfromurl">
+ <xsl:with-param name="url" select="string(namespace::*[local-name(.) = substring-before($myname, ':')])"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="name(.)='attribute'">
+ <xsl:if test="ancestor::rng:grammar/@attributeFormDefault='qualified'">
+ <xsl:call-template name="prefixforgrammar"/>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="prefixforgrammar"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="ns">
+ <xsl:choose>
+ <xsl:when test="contains(@name, ':')">
+ <xsl:variable name="myname" select="@name"/>
+ <xsl:value-of select="string(namespace::*[local-name(.) = substring-before($myname, ':')])"/>
+ </xsl:when>
+ <xsl:when test="name(.)='attribute'">
+ <xsl:if test="ancestor::rng:grammar/@attributeFormDefault='qualified'">
+ <xsl:call-template name="nsforgrammar"/>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="nsforgrammar"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="localname">
+ <xsl:choose>
+ <xsl:when test="contains(@name, ':')">
+ <xsl:value-of select="substring-after(@name, ':')"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:copy>
+ <xsl:apply-templates select="@*"/>
+ <xsl:attribute name="enumname">
+ <xsl:if test="string-length($prefix) > 0">
+ <xsl:value-of select="$prefix"/>
+ <xsl:text>:</xsl:text>
+ </xsl:if>
+ <xsl:value-of select="$localname"/>
+ </xsl:attribute>
+ <xsl:attribute name="qname">
+ <xsl:if test="string-length($ns) > 0">
+ <xsl:value-of select="$ns"/>
+ <xsl:text>:</xsl:text>
+ </xsl:if>
+ <xsl:value-of select="$localname"/>
+ </xsl:attribute>
+ <xsl:attribute name="prefix">
+ <xsl:value-of select="$prefix"/>
+ </xsl:attribute>
+ <xsl:attribute name="localname">
+ <xsl:value-of select="$localname"/>
+ </xsl:attribute>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="rng:grammar">
+ <xsl:copy>
+ <xsl:apply-templates select="@*"/>
+ <xsl:attribute name="application">
+ <xsl:value-of select="substring-before(substring-after(@ns, 'http://schemas.openxmlformats.org/'), '/')"/>
+ </xsl:attribute>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="node()|@*">
+ <xsl:copy>
+ <xsl:apply-templates select="@*"/>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="model">
+ <xsl:copy>
+ <xsl:apply-templates select="@*"/>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="rng:define|rng:ref">
+ <xsl:copy>
+ <xsl:apply-templates select="@*"/>
+ <xsl:attribute name="classfordefine">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:choose>
+ <xsl:when test="(starts-with(@name, 'CT_') or starts-with(@name, 'EG_') or starts-with(@name, 'AG_'))">1</xsl:when>
+ <xsl:when test="ancestor::namespace//start[@name=$name]">1</xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="namespace">
+ <xsl:variable name="ns" select=".//rng:grammar/@ns"/>
+ <xsl:copy>
+ <xsl:apply-templates select="@*"/>
+ <xsl:attribute name="namespacealias">
+ <xsl:value-of select="key('namespace-aliases', $ns)/@alias"/>
+ </xsl:attribute>
+ <xsl:attribute name="prefix"><xsl:value-of select="translate(substring-after($ns, 'http://schemas.openxmlformats.org/'), '/-', '__')"/></xsl:attribute>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/namespace_preprocess.pl b/writerfilter/source/ooxml/namespace_preprocess.pl
new file mode 100644
index 000000000000..22c172329f61
--- /dev/null
+++ b/writerfilter/source/ooxml/namespace_preprocess.pl
@@ -0,0 +1,65 @@
+$ARGV0 = shift @ARGV;
+
+print <<EOF;
+<?xml version="1.0"?>
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:output method="xml"/>
+
+ <xsl:include href="./modelpreprocess.xsl"/>
+
+ <xsl:template match="namespace-alias[\@id]">
+ <xsl:variable name="value">
+ <xsl:call-template name="getnamespaceid">
+ <xsl:with-param name="id" select="\@id" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:copy>
+ <xsl:apply-templates select="@*"/>
+ <xsl:attribute name="id">
+ <xsl:value-of select="\$value"/>
+ </xsl:attribute>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template name="getnamespaceid">
+ <xsl:param name='id'/>
+ <xsl:choose>
+EOF
+
+
+# print the mapping
+open ( NAMESPACES, $ARGV0 ) || die "can't open namespace file: $!";
+$group = 0;
+$i = 1;
+while ( <NAMESPACES> )
+{
+ chomp( $_ );
+ $_ =~ s/\s*//g;
+ if ( $_ =~ m/^$/ )
+ {
+ # Start a new group
+ $i = 0;
+ $group++;
+ }
+ elsif ( $_ =~ m/^[^#]/ )
+ {
+ # Neither an empty line nor a comment
+ $_ =~ /^[a-zA-Z0-9-_]+$/ or die "Invalid namespace token $_";
+ $_ =~ s/-/_/g;
+ $no = $group*10 + $i;
+ print <<EOF;
+ <xsl:when test="\$id = '$_'">
+ <xsl:text>$no</xsl:text>
+ </xsl:when>
+EOF
+ ++$i;
+ }
+}
+
+print <<EOF;
+ </xsl:choose>
+ </xsl:template>
+
+</xsl:stylesheet>
+EOF
diff --git a/writerfilter/source/ooxml/namespaceids.xsl b/writerfilter/source/ooxml/namespaceids.xsl
new file mode 100644
index 000000000000..318155c47fdc
--- /dev/null
+++ b/writerfilter/source/ooxml/namespaceids.xsl
@@ -0,0 +1,89 @@
+<!--
+
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_NAMESPACESIDS_HXX
+#define INCLUDED_OOXML_NAMESPACESIDS_HXX
+
+#include &lt;map&gt;
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+</xsl:text>
+<xsl:call-template name="namespaceids"/>
+<xsl:text>
+
+}}
+#endif //INCLUDED_OOXML_NAMESPACESIDS_HXX&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/ooxmlLoggers.hxx b/writerfilter/source/ooxml/ooxmlLoggers.hxx
new file mode 100644
index 000000000000..b58a41bdabcd
--- /dev/null
+++ b/writerfilter/source/ooxml/ooxmlLoggers.hxx
@@ -0,0 +1,38 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_OOXML_LOGGERS_HXX
+#define INCLUDED_OOXML_LOGGERS_HXX
+
+#include <resourcemodel/TagLogger.hxx>
+
+namespace writerfilter {
+ namespace ooxml {
+ extern TagLogger::Pointer_t debug_logger;
+ }
+}
+#endif // INCLUDED_OOXML_LOGGERS_HXX
diff --git a/writerfilter/source/ooxml/qnametostr.xsl b/writerfilter/source/ooxml/qnametostr.xsl
new file mode 100644
index 000000000000..888eb36325e8
--- /dev/null
+++ b/writerfilter/source/ooxml/qnametostr.xsl
@@ -0,0 +1,73 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:xalan="http://xml.apache.org/xalan"
+ xmlns:UML = 'org.omg.xmi.namespace.UML'
+ exclude-result-prefixes = "xalan"
+ xml:space="default">
+ <xsl:output method="text" />
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:call-template name="qnametostr"/>
+ <xsl:call-template name="ooxmlidstoxml"/>
+ </xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/resourceids.xsl b/writerfilter/source/ooxml/resourceids.xsl
new file mode 100644
index 000000000000..33eea88691ac
--- /dev/null
+++ b/writerfilter/source/ooxml/resourceids.xsl
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:xalan="http://xml.apache.org/xalan"
+ xmlns:UML = 'org.omg.xmi.namespace.UML'
+ exclude-result-prefixes = "xalan"
+ xml:space="default">
+ <xsl:output method="text" />
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out>
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_RESOURCEIDS_HXX
+#define INCLUDED_OOXML_RESOURCEIDS_HXX
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+
+namespace writerfilter {
+ </xsl:text>
+ <xsl:call-template name="defineooxmlids"/>
+ <xsl:text>
+
+}
+#endif // INCLUDED_OOXML_RESOURCEIDS_HXX&#xa;</xsl:text></out></xsl:template>
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/resourcestools.xsl b/writerfilter/source/ooxml/resourcestools.xsl
new file mode 100644
index 000000000000..f7039aca5321
--- /dev/null
+++ b/writerfilter/source/ooxml/resourcestools.xsl
@@ -0,0 +1,2338 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:xalan="http://xml.apache.org/xalan"
+ xmlns:UML = 'org.omg.xmi.namespace.UML'
+ exclude-result-prefixes = "xalan"
+ xml:space="default">
+ <xsl:output method="text" />
+
+ <xsl:key name="same-attribute"
+ match="rng:attribute" use="@name" />
+
+ <xsl:key name="same-element"
+ match="rng:element" use="@name" />
+
+ <xsl:key name="defines-with-name"
+ match="rng:define" use="@name" />
+
+ <xsl:key name="same-element-enum"
+ match="rng:element" use="@enumname"/>
+
+ <xsl:key name="same-attribute-enum"
+ match="rng:attribute" use="@enumname"/>
+
+ <xsl:key name="same-element-or-attribute-enum"
+ match="rng:attribute|rng:element" use="@enumname"/>
+
+ <xsl:key name="context-resource"
+ match="resource" use="@name"/>
+
+ <xsl:key name="defines-with-application"
+ match="rng:define" use="ancestor::rng:grammar/@application"/>
+
+ <xsl:key name="namespace-aliases" match="//namespace-alias" use="@name"/>
+
+ <!-- Tiny template helping devs to debug -->
+ <xsl:template name="dbg_path">
+ <xsl:text>/*</xsl:text>
+ <xsl:for-each select="ancestor::*">
+ <xsl:value-of select="name(.)"/>
+ <xsl:text>/</xsl:text>
+ </xsl:for-each>
+ <xsl:value-of select="name(.)"/>
+ <xsl:text>[@name=</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>]</xsl:text>
+ <xsl:text>*/</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="licenseheader">
+ <xsl:text>
+/*
+
+ THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT!
+
+*/
+&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="hasrefs">
+ <xsl:choose>
+ <xsl:when test=".//rng:ref[not(ancestor::rng:element or ancestor::rng:attribute)]">
+ <xsl:text>1</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>0</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!--
+ Returns <define> for the current <ref>.
+
+ The current node must be a <ref>!
+ -->
+ <xsl:template name="defineforref">
+ <xsl:variable name="mygrammarid" select="generate-id(ancestor::rng:grammar)"/>
+ <xsl:value-of select="key('defines-with-name', @name)[generate-id(ancestor::rng:grammar) = $mygrammarid]"/>
+ </xsl:template>
+
+ <!--
+ Create name with prefix.
+
+ The result is <prefix>:<name>.
+
+ Exception: If <name> contains a ':' the prefix is ignored.
+
+ @param prefix the prefix
+ @param name the name
+ -->
+ <xsl:template name="prefixname">
+ <xsl:param name="prefix"/>
+ <xsl:param name="name"/>
+ <xsl:choose>
+ <xsl:when test="contains($name, ':')">
+ <xsl:value-of select="$name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$prefix"/>
+ <xsl:text>:</xsl:text>
+ <xsl:value-of select="$name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="fastnamespace">
+ <xsl:if test="string-length(@prefix) > 0">
+ <xsl:text>NS_</xsl:text>
+ <xsl:value-of select="@prefix"/>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="fastlocalname">
+ <xsl:text>OOXML_</xsl:text>
+ <xsl:value-of select="@localname"/>
+ </xsl:template>
+
+ <!--
+ Create entries in enum definition for fast tokens.
+
+ For each occurrence of rng:element an entry
+
+ OOXML_<name>
+
+ is generated, but only if the element is the first named <name>.
+ -->
+ <xsl:template name="enumfasttokens">
+ <xsl:param name="prefix"/>
+ <xsl:for-each select=".//rng:element|.//rng:attribute">
+ <xsl:if test="generate-id(.) = generate-id(key('same-token-name', @localname)[1])">
+ <xsl:call-template name="fastlocalname"/>
+ <xsl:text>, &#xa; </xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="fasttokens">
+ <xsl:text>
+typedef sal_Int32 Token_t;
+ </xsl:text>
+ <xsl:for-each select="/model/fasttoken">
+ <xsl:text>
+const Token_t OOXML_</xsl:text>
+<xsl:value-of select="translate(., '-', '_')"/>
+<xsl:text> = </xsl:text>
+<xsl:value-of select="position() - 1"/>
+<xsl:text>;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+const Token_t OOXML_FAST_TOKENS_END =</xsl:text>
+<xsl:value-of select="count(/model/fasttoken)"/>
+<xsl:text>;&#xa;</xsl:text>
+ </xsl:template>
+
+ <!--
+ Returns prefix for the rng:grammar of the current node.
+ -->
+ <xsl:template name="prefixforgrammar">
+ <xsl:variable name="ns" select="ancestor::rng:grammar/@ns"/>
+ <xsl:variable name="nsalias"><xsl:value-of select="key('namespace-aliases', $ns)/@alias"/></xsl:variable>
+ <!--<xsl:variable name="nsalias">test</xsl:variable>-->
+ <xsl:choose>
+ <xsl:when test="string-length($nsalias) > 0">
+ <xsl:value-of select="$nsalias"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="translate(substring-after($ns, 'http://'), '/.', '__')"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!--
+ Returns prefix for the rng:grammar of the matching nodes.
+ -->
+ <xsl:template match="*" mode="grammar-prefix">
+ <xsl:call-template name="prefixforgrammar"/>
+ </xsl:template>
+
+ <!--
+ Generates name for fast context class for this <define>
+ -->
+ <xsl:template name="fastcontextname">
+ <xsl:variable name="do">
+ <xsl:call-template name="classfordefine"/>
+ </xsl:variable>
+ <xsl:if test="$do = '1'">
+ <xsl:variable name="definename">
+ <xsl:call-template name="searchdefinenamespace">
+ <xsl:with-param name="name" select="@name"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:for-each select="/model/namespace[@name=substring-before($definename, ':')]">
+ <xsl:text>OOXMLFastContextHandler_</xsl:text>
+ <xsl:value-of select="@namespacealias"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="substring-after($definename, ':')"/>
+ </xsl:for-each>
+ </xsl:if>
+ </xsl:template>
+
+ <!--
+ Returns the value of the @resource attribute of the <resource>
+ node according to the current <define>.
+ -->
+ <xsl:template name="contextresource">
+ <xsl:variable name="mynsid" select="generate-id(ancestor::namespace)"/>
+ <xsl:choose>
+ <xsl:when test="count(key('context-resource', @name)) = 1">
+ <xsl:value-of select="key('context-resource', @name)/@resource"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="key('context-resource', @name)[generate-id(ancestor::namespace)=$mynsid]/@resource"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!--
+ Returns a value name.
+
+ The resulting value name is
+
+ OOXMLValue_$prefix_$name
+
+ @prefix the prefix
+ @name the name
+ -->
+ <xsl:template name="valuename">
+ <xsl:param name="prefix"/>
+ <xsl:param name="name"/>
+ <xsl:text>OOXMLValue_</xsl:text>
+ <xsl:value-of select="$prefix"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="$name"/>
+ </xsl:template>
+
+ <!--
+ Returns the value name for the current <define>.
+ -->
+ <xsl:template name="valuenamefordefine">
+ <xsl:call-template name="valuename">
+ <xsl:with-param name="prefix" select="key('namespace-aliases', ancestor::namespace/rng:grammar/@ns)/@alias"/>
+ <xsl:with-param name="name" select="translate(@name, '-', '_')"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <!--
+ Returns the name of the parent class of the class for the
+ current <define>.
+
+ Precondition: The class for the current <define> is derived
+ indirectly from OOXMLValue.
+
+ -->
+ <xsl:template name="valueparent">
+ <xsl:variable name="resource">
+ <xsl:call-template name="contextresource"/>
+ </xsl:variable>
+ <xsl:text>OOXML</xsl:text>
+ <xsl:value-of select="$resource"/>
+ <xsl:text>Value</xsl:text>
+ </xsl:template>
+
+ <!--
+ Generates declaration for a value class.
+
+ Precondition: <resource> for current <define> indicates that the
+ class is derived directly or indirectly from OOXMLValue.
+ -->
+ <xsl:template name="valuedecl">
+ <xsl:variable name="classname">
+ <xsl:call-template name="valuenamefordefine"/>
+ </xsl:variable>
+ <xsl:variable name="resource">
+ <xsl:call-template name="contextresource"/>
+ </xsl:variable>
+ <xsl:text>
+class </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text> : public </xsl:text>
+ <xsl:call-template name="valueparent"/>
+ <xsl:text>
+{
+public:
+ </xsl:text>
+ <xsl:choose>
+ <xsl:when test="$resource='List'">
+ <xsl:value-of select="$classname"/>
+ <xsl:text>(</xsl:text>
+ <xsl:text>const rtl::OUString &amp; rValue</xsl:text>
+ <xsl:text>);</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>(const rtl::OUString &amp; rValue) : </xsl:text>
+ <xsl:call-template name="valueparent"/>
+ <xsl:text>(rValue) {}</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>
+ virtual ~</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>() {}
+};
+</xsl:text>
+ </xsl:template>
+
+ <!--
+ Checks if a class derived from OOXMLContex shall be defined for
+ the current <define>.
+
+ @retval 1 the class shall be defined.
+ @retval 0 otherwise
+ -->
+ <xsl:template name="classfordefine">
+ <!--
+ <xsl:variable name="name" select="@name"/>
+ <xsl:choose>
+ <xsl:when test="(starts-with(@name, 'CT_') or starts-with(@name, 'EG_') or starts-with(@name, 'AG_'))">1</xsl:when>
+ <xsl:when test="ancestor::namespace//start[@name=$name]">1</xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ -->
+ <xsl:value-of select="@classfordefine"/>
+ </xsl:template>
+
+ <!--
+ Checks if a class derived from OOXMLValue shall be defined for
+ the current <define>.
+
+ @retval 1 the class shall be defined
+ @retval 0 otherwise
+ -->
+ <xsl:template name="valuefordefine">
+ <xsl:choose>
+ <xsl:when test="starts-with(@name, 'ST_')">1</xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="valuedecls">
+ <xsl:for-each select=".//rng:grammar/rng:define">
+ <xsl:variable name="dovalue">
+ <xsl:call-template name="valuefordefine"/>
+ </xsl:variable>
+ <xsl:if test="$dovalue = '1'">
+ <xsl:call-template name="valuedecl"/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
+
+ <!--
+ Generate switch body for createFastChildContext
+ -->
+ <xsl:template name="switchbodycreatechildcontext">
+ <xsl:for-each select=".//rng:element[@name]">
+ <xsl:call-template name="caselabelfasttoken"/>
+ <xsl:variable name="createstatement">
+ <xsl:call-template name="fastelementcreatestatement"/>
+ </xsl:variable>
+ <xsl:if test="string-length($createstatement) > 0">
+ <xsl:text>
+ xContextHandler.set(</xsl:text>
+ <xsl:value-of select="$createstatement"/>
+ <xsl:text>);
+ </xsl:text>
+ </xsl:if>
+ <xsl:text>
+ break;
+ </xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="fastelementcreatefromrefstatement">
+ <xsl:variable name="definename">
+ <xsl:call-template name="searchdefinenamespace">
+ <xsl:with-param name="name" select="@name"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:for-each select="/model/namespace[@name=substring-before($definename, ':')]">
+ <xsl:for-each select="./rng:grammar/rng:define[@name=substring-after($definename, ':')]">
+ <xsl:variable name="do">
+ <xsl:call-template name="classfordefine"/>
+ </xsl:variable>
+ <xsl:if test="$do = '1'">
+ <xsl:text>OOXMLFastHelper &lt;</xsl:text>
+ <xsl:call-template name="fastcontextname"/>
+ <xsl:text>&gt;::createAndSetParentRef(this, Element, Attribs)</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="switchbodycreatechildcontextrefs">
+ <xsl:for-each select=".//rng:ref[not (ancestor::rng:element or ancestor::rng:attribute)]">
+ <xsl:variable name="createstatement">
+ <xsl:call-template name="fastelementcreatefromrefstatement"/>
+ </xsl:variable>
+ <xsl:if test="string-length($createstatement) > 0">
+ <xsl:text>
+ if (! xContextHandler.is() || dynamic_cast&lt;OOXMLFastContextHandler *&gt;(xContextHandler.get())->isFallback())
+ {
+ xContextHandler.set(</xsl:text>
+ <xsl:value-of select="$createstatement"/>
+ <xsl:text>);
+ }
+ </xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:for-each select=".//rng:element[rng:anyName]">
+ <xsl:variable name="createstatement">
+ <xsl:call-template name="fastelementcreatestatement"/>
+ </xsl:variable>
+ <xsl:if test="string-length($createstatement) > 0">
+ <xsl:text>
+ if (! xContextHandler.is() || dynamic_cast&lt;OOXMLFastContextHandler *&gt;(xContextHandler.get())->isFallback())
+ {
+ xContextHandler.set(</xsl:text>
+ <xsl:value-of select="$createstatement"/>
+ <xsl:text>);
+ }
+ </xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
+
+ <!--
+ Generates definition of method createFastChildContext for current <define>
+ -->
+ <xsl:template name="createfastchildcontext">
+ <xsl:variable name="resource">
+ <xsl:call-template name="contextresource"/>
+ </xsl:variable>
+ <xsl:if test="not($resource='Shape')">
+ <xsl:variable name="switchbody">
+ <xsl:call-template name="switchbodycreatechildcontext"/>
+ </xsl:variable>
+ <xsl:variable name="switchbodyrefs">
+ <xsl:call-template name="switchbodycreatechildcontextrefs"/>
+ </xsl:variable>
+ <xsl:if test="string-length($switchbody) > 0 or string-length($switchbodyrefs) > 0">
+ <xsl:text>
+uno::Reference &lt; xml::sax::XFastContextHandler &gt;
+</xsl:text>
+<xsl:call-template name="fastcontextname"/>
+<xsl:text>::lcl_createFastChildContext
+(::sal_Int32 Element,
+ const uno::Reference &lt; xml::sax::XFastAttributeList &gt; &amp;</xsl:text>
+<xsl:if test="contains($switchbody, 'Attribs') or contains($switchbodyrefs, 'Attribs')">
+ <xsl:text> Attribs</xsl:text>
+</xsl:if>
+<xsl:text>)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ uno::Reference &lt; xml::sax::XFastContextHandler &gt; xContextHandler;
+</xsl:text>
+<xsl:if test="string-length($switchbody) > 0">
+ <xsl:text>
+ switch (Element)
+ {
+ </xsl:text>
+ <xsl:value-of select="$switchbody"/>
+ <xsl:text>
+ default:
+ break;
+ }
+ </xsl:text>
+</xsl:if>
+<xsl:if test="string-length($switchbodyrefs) > 0">
+ <xsl:value-of select="$switchbodyrefs"/>
+</xsl:if>
+<xsl:text>
+
+ return xContextHandler;
+}
+</xsl:text>
+ </xsl:if>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="idforattr">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:for-each select="ancestor::rng:define">
+ <xsl:variable name="definename" select="@name"/>
+ <xsl:for-each select="ancestor::namespace/resource[@name=$definename]">
+ <xsl:for-each select="./attribute[@name=$name]">
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@tokenid"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="idforelement">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:for-each select="ancestor::rng:define">
+ <xsl:variable name="definename" select="@name"/>
+ <xsl:for-each select="ancestor::namespace/resource[@name=$definename]">
+ <xsl:for-each select="./element[@name=$name]">
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@tokenid"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:template>
+
+ <!--
+ Processes token id given in <resource> elements.
+
+ The result is the identifier for the tokenid.
+ -->
+ <xsl:template name="processtokenid">
+ <xsl:choose>
+ <xsl:when test="contains(@tokenid, ':')">
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@tokenid"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@tokenid"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="getidcaseimpl">
+ <xsl:for-each select="attribute|element">
+ <xsl:text>
+ </xsl:text>
+ <xsl:call-template name="caselabelfasttoken"/>
+ <xsl:text>
+ nResult = </xsl:text>
+ <xsl:call-template name="processtokenid"/>
+ <xsl:text>;
+ break;</xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="attributeproptype">
+ <xsl:variable name="mynsid" select="generate-id(ancestor::namespace)"/>
+ <xsl:variable name="name" select="@name"/>
+ <xsl:variable name="resource" select="key('context-resource', @name)[generate-id(ancestor::namespace)=$mynsid]"/>
+ <xsl:choose>
+ <xsl:when test="$resource/element[@name=$name]">
+ <xsl:text>OOXMLPropertyImpl::SPRM</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>OOXMLPropertyImpl::ATTRIBUTE</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!--
+ Check if a default is defined for a define.
+
+ Returns if the <resource> for the current <define> has a
+ <default> child.
+
+ @retval 0 there is no default
+ @retval 1 there is a default
+ -->
+ <xsl:template name="contexthasdefault">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:choose>
+ <xsl:when test="ancestor::namespace/resource[@name=$name]//default">1</xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!--
+ Chooses the action for the current <action> element.
+ -->
+ <xsl:template name="chooseaction">
+ <xsl:if test="@tokenid">
+ <xsl:text>
+ if (sal::static_int_cast&lt;Id&gt;(getId()) == </xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@tokenid"/>
+ </xsl:call-template>
+ <xsl:text>)
+ {</xsl:text>
+ </xsl:if>
+ <xsl:for-each select="./cond">
+ <xsl:text>
+ {
+ OOXMLPropertySetEntryToInteger aHandler(</xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@tokenid"/>
+ </xsl:call-template>
+ <xsl:text>);
+ getPropertySetAttrs()->resolve(aHandler);
+
+ if (sal::static_int_cast&lt;Id&gt;(aHandler.getValue()) == </xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@value"/>
+ </xsl:call-template>
+ <xsl:text>)
+ {</xsl:text>
+ </xsl:for-each>
+ <xsl:choose>
+ <xsl:when test="@action='sendTableDepth'">
+ <xsl:text>
+ sendTableDepth();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='startCell'">
+ <xsl:text>
+ startCell();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='startParagraphGroup'">
+ <xsl:text>
+ startParagraphGroup();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='startCharacterGroup'">
+ <xsl:text>
+ startCharacterGroup();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='startSectionGroup'">
+ <xsl:text>
+ startSectionGroup();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='fieldstart'">
+ <xsl:text>
+ startField();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='fieldsep'">
+ <xsl:text>
+ fieldSeparator();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='fieldend'">
+ <xsl:text>
+ endField();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='ftnednref'">
+ <xsl:text>
+ ftnednref();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='ftnednsep'">
+ <xsl:text>
+ ftnednsep();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='ftnedncont'">
+ <xsl:text>
+ ftnedncont();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='pgNum'">
+ <xsl:text>
+ pgNum();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='tab'">
+ <xsl:text>
+ tab();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='cr'">
+ <xsl:text>
+ cr();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='noBreakHyphen'">
+ <xsl:text>
+ noBreakHyphen();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='softHyphen'">
+ <xsl:text>
+ softHyphen();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='endOfParagraph'">
+ <xsl:text>
+ endOfParagraph();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='handleLastParagraphInSection'">
+ <xsl:text>
+ handleLastParagraphInSection();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='setLastParagraphInSection'">
+ <xsl:text>
+ setLastParagraphInSection();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='endCell'">
+ <xsl:text>
+ endCell();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='endParagraphGroup'">
+ <xsl:text>
+ endParagraphGroup();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='endCharacterGroup'">
+ <xsl:text>
+ endCharacterGroup();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='endSectionGroup'">
+ <xsl:text>
+ endSectionGroup();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='handleXNotes'">
+ handleXNotes();</xsl:when>
+ <xsl:when test="@action='handleHdrFtr'">
+ handleHdrFtr();</xsl:when>
+ <xsl:when test="@action='handleComment'">
+ handleComment();</xsl:when>
+ <xsl:when test="@action='handlePicture'">
+ handlePicture();</xsl:when>
+ <xsl:when test="@action='handleHyperlink'">
+ handleHyperlink();</xsl:when>
+ <xsl:when test="@action='handleBreak'">
+ handleBreak();</xsl:when>
+ <xsl:when test="@action='handleOLE'">
+ handleOLE();</xsl:when>
+ <xsl:when test="@action='printproperty'">
+ <xsl:text>
+ sendProperty(</xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@sendtokenid"/>
+ </xsl:call-template>
+ <xsl:text>);</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='propagateCharacterProperties'">
+ propagateCharacterProperties();
+ </xsl:when>
+ <xsl:when test="@action='propagateCharacterPropertiesAsSet'">
+ <xsl:text>
+ propagateCharacterPropertiesAsSet(</xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@sendtokenid"/>
+ </xsl:call-template>
+ <xsl:text>);</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='propagateTableProperties'">
+ propagateTableProperties();
+ </xsl:when>
+ <xsl:when test="@action='sendPropertiesWithId'">
+ <xsl:text>
+ sendPropertiesWithId(</xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@sendtokenid"/>
+ </xsl:call-template>
+ <xsl:text>);</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='clearProps'">
+ clearProps();
+ </xsl:when>
+ <xsl:when test="@action='text'">
+ text(sText);
+ </xsl:when>
+ <xsl:when test="@action='setHandle'">
+ setHandle();
+ </xsl:when>
+
+ <xsl:when test="@action='footnoteSeparator'">
+ footnoteSeparator();
+ </xsl:when>
+ <xsl:when test="@action='footnoteCont'">
+ footnoteCont();
+ </xsl:when>
+ <xsl:when test="@action='endnoteSeparator'">
+ endnoteSeparator();
+ </xsl:when>
+ <xsl:when test="@action='endnoteCont'">
+ endnoteCont();
+ </xsl:when>
+ <xsl:when test="@action='newProperty'">
+ <xsl:text>
+ OOXMLFastHelper&lt;OOXMLIntegerValue&gt;::newProperty(this, </xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@tokenid"/>
+ </xsl:call-template>
+ <xsl:text>, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("</xsl:text>
+ <xsl:value-of select="@value"/>
+ <xsl:text>")));</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='mark'">
+ <xsl:text>
+ OOXMLFastHelper&lt;OOXMLIntegerValue&gt;::mark(this, </xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@sendtokenid"/>
+ </xsl:call-template>
+ <xsl:text>, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("</xsl:text>
+ <xsl:value-of select="@value"/>
+ <xsl:text>")));</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='tokenproperty'">
+ <xsl:text>
+ OOXMLFastHelper&lt;OOXMLIntegerValue&gt;::newProperty(this, </xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id">ooxml:token</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>, getToken());</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:for-each select="./cond">
+ <xsl:text>
+ }
+ }</xsl:text>
+ </xsl:for-each>
+ <xsl:if test="@tokenid">
+ <xsl:text>
+ }</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <!--
+ Generates the definitions of the methods of the fast context class
+ for the current <define>.
+ -->
+ <xsl:template name="fastcontextimpls">
+ <xsl:param name="ns"/>
+ <xsl:for-each select=".//namespace[@name=$ns]">
+ <xsl:text>
+</xsl:text>
+ <xsl:for-each select="./rng:grammar/rng:define">
+ <xsl:variable name="do">
+ <xsl:call-template name="classfordefine"/>
+ </xsl:variable>
+ <xsl:if test="$do = '1'">
+ <xsl:variable name="classname">
+ <xsl:call-template name="fastcontextname"/>
+ </xsl:variable>
+ <xsl:text>
+/*
+ class: </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>
+*/
+</xsl:text>
+<xsl:call-template name="fastcontextconstructor"/>
+<xsl:call-template name="fastcontextdestructor"/>
+<xsl:call-template name="faststartaction"/>
+<xsl:call-template name="fastendaction"/>
+<xsl:call-template name="createfastchildcontext"/>
+<xsl:call-template name="fastattribute"/>
+<xsl:call-template name="fastcharacters"/>
+<xsl:call-template name="propagatesproperties"/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:key name="value-with-content" match="//rng:value"
+ use="text()"/>
+
+ <!--
+ Generates name for a value string.
+
+ Value strings are possible values for attributes in OOXML.
+
+ @param string the string as present in the according <rng:value>
+ -->
+ <xsl:template name="valuestringname">
+ <xsl:param name="string"/>
+ <xsl:text>OOXMLValueString_</xsl:text>
+ <xsl:value-of select="translate($string, '-+ ,', 'mp__')"/>
+ </xsl:template>
+
+ <!--
+ Generates constant definitions for attribute values.
+ -->
+ <xsl:template name="valueconstants">
+ <xsl:text>
+rtl::OUString </xsl:text>
+<xsl:call-template name="valuestringname">
+ <xsl:with-param name="string"></xsl:with-param>
+</xsl:call-template>
+<xsl:text>(RTL_CONSTASCII_USTRINGPARAM(""));</xsl:text>
+<xsl:for-each select="//rng:value[generate-id(key('value-with-content', text())[1]) = generate-id(.)]">
+ <xsl:text>
+rtl::OUString </xsl:text>
+<xsl:call-template name="valuestringname">
+ <xsl:with-param name="string" select="."/>
+</xsl:call-template>
+<xsl:text>(RTL_CONSTASCII_USTRINGPARAM("</xsl:text>
+<xsl:value-of select="."/>
+<xsl:text>"));</xsl:text>
+</xsl:for-each>
+ </xsl:template>
+
+ <!--
+ Generates constant declarations for attribute values.
+ -->
+ <xsl:template name="valueconstantdecls">
+ <xsl:text>
+extern rtl::OUString
+ </xsl:text>
+ <xsl:call-template name="valuestringname">
+ <xsl:with-param name="string"></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>;</xsl:text>
+ <xsl:for-each select="//rng:value[generate-id(key('value-with-content', text())[1]) = generate-id(.)]">
+ <xsl:text>
+extern rtl::OUString </xsl:text>
+ <xsl:call-template name="valuestringname">
+ <xsl:with-param name="string" select="."/>
+ </xsl:call-template>
+ <xsl:text>;</xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+
+ <!--
+ Generates definition of constructor for attribute value class
+ for current <define>.
+ -->
+ <xsl:template name="valueconstructorimpl">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:variable name="resource">
+ <xsl:call-template name="contextresource"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$resource = 'List'">
+ <xsl:variable name="classname">
+ <xsl:call-template name="valuenamefordefine"/>
+ </xsl:variable>
+ <xsl:text>&#xa;</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>::</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>(const rtl::OUString &amp; </xsl:text>
+ <xsl:choose>
+ <xsl:when test="count(ancestor::namespace/resource[@name=$name]/value) > 0">
+ <xsl:text>rValue</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>/* rValue */</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>)
+: OOXMLListValue()
+{</xsl:text>
+ <xsl:for-each select="ancestor::namespace/resource[@name=$name]">
+ <xsl:for-each select="./default">
+ <xsl:text>
+ mnValue = </xsl:text>
+ <xsl:choose>
+ <xsl:when test="@tokenid">
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@tokenid"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>;</xsl:text>
+ </xsl:for-each>
+ <xsl:for-each select="./value">
+ <xsl:text>
+ if (rValue.compareTo(</xsl:text>
+ <xsl:call-template name="valuestringname">
+ <xsl:with-param name="string" select="text()"/>
+ </xsl:call-template>
+ <xsl:text>) == 0)
+ {
+ mnValue = </xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@tokenid"/>
+ </xsl:call-template>
+ <xsl:text>;
+ return;
+ }</xsl:text>
+ </xsl:for-each>
+ </xsl:for-each>
+ <xsl:text>
+}
+</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <!--
+ Generates definition of destructor of attribute value class for
+ current <define>.
+ -->
+ <xsl:template name="valuedestructorimpl">
+ <xsl:variable name="classname">
+ <xsl:call-template name="valuenamefordefine"/>
+ </xsl:variable>
+ <xsl:text>&#xa;</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>::~</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>()
+{
+}
+ </xsl:text>
+ </xsl:template>
+
+ <!--
+ Generates definitions for attribute value class for current
+ <define>.
+ -->
+ <xsl:template name="valueimpls">
+ <xsl:for-each select=".//rng:grammar/rng:define">
+ <xsl:variable name="do">
+ <xsl:call-template name="valuefordefine"/>
+ </xsl:variable>
+ <xsl:if test="$do = 1">
+ <xsl:variable name="classname">
+ <xsl:call-template name="valuenamefordefine"/>
+ </xsl:variable>
+ <xsl:text>
+/*
+ class: </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>
+*/
+ </xsl:text>
+ <xsl:call-template name="valueconstructorimpl"/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:key name="tokenids" match="@tokenid|@sendtokenid" use="."/>
+
+ <!--
+ Generates contant definitions for tokenids.
+ -->
+ <xsl:template name="defineooxmlids">
+ <xsl:text>
+namespace NS_ooxml
+{</xsl:text>
+<xsl:for-each select="//@tokenid|//@sendtokenid">
+ <xsl:if test="contains(., 'ooxml:') and generate-id(.) = generate-id(key('tokenids', .)[1])">
+ <xsl:text>
+ const Id LN_</xsl:text>
+ <xsl:value-of select="substring-after(., 'ooxml:')"/>
+ <xsl:text> = </xsl:text>
+ <xsl:value-of select="90000 + position()"/>
+ <xsl:text>;</xsl:text>
+ </xsl:if>
+</xsl:for-each>
+}
+ </xsl:template>
+
+ <xsl:template name="ooxmlidstoxml">
+ <xsl:text>
+void ooxmlsprmidsToXML(::std::ostream &amp; out)
+{</xsl:text>
+ <xsl:for-each select="//@tokenid">
+ <xsl:if test="contains(., 'ooxml:') and generate-id(.) = generate-id(key('tokenids', .)[1]) and ancestor::element">
+ <xsl:text>
+ out &lt;&lt; "&lt;theid name=\"</xsl:text>
+ <xsl:value-of select="."/>
+ <xsl:text>\"&gt;</xsl:text>
+ <xsl:value-of select="90000 + position()"/>
+ <xsl:text>&lt;/theid&gt;" &lt;&lt; endl; </xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>
+}</xsl:text>
+ <xsl:text>
+void ooxmlidsToXML(::std::ostream &amp; out)
+{</xsl:text>
+ <xsl:for-each select="//@tokenid">
+ <xsl:if test="contains(., 'ooxml:') and generate-id(.) = generate-id(key('tokenids', .)[1]) and ancestor::attribute">
+ <xsl:text>
+ out &lt;&lt; "&lt;theid name=\"</xsl:text>
+ <xsl:value-of select="."/>
+ <xsl:text>\"&gt;</xsl:text>
+ <xsl:value-of select="90000 + position()"/>
+ <xsl:text>&lt;/theid&gt;" &lt;&lt; endl; </xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>
+}</xsl:text>
+ </xsl:template>
+
+ <!--
+ Generates mapping from tokenids to strings. (DEBUG)
+ -->
+ <xsl:template name="qnametostr">
+ <xsl:text>
+void QNameToString::init_ooxml()
+{
+ /* ooxml */
+ </xsl:text>
+ <xsl:for-each select="//@tokenid">
+ <xsl:if test="generate-id(.) = generate-id(key('tokenids', .)[1]) and contains(., 'ooxml:')">
+ <xsl:text>
+ mMap[</xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="."/>
+ </xsl:call-template>
+ <xsl:text>] = "</xsl:text>
+ <xsl:value-of select="."/>
+ <xsl:text>";</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>
+}
+ </xsl:text>
+ </xsl:template>
+
+ <xsl:template name="qnametostrfunc">
+ <xsl:text>
+string qnameToString(sal_uInt32 nToken)
+{
+ string sResult;
+
+ switch (nToken)
+ {</xsl:text>
+ <xsl:for-each select="//resource">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:for-each select="attribute|element">
+ <xsl:if test="contains(@tokenid, 'ooxml:')">
+ <xsl:text>
+ case </xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@tokenid"/>
+ </xsl:call-template>
+ <xsl:text>:
+ sResult = "</xsl:text>
+ <xsl:value-of select="@token"/>
+ <xsl:text>";
+ break;</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:for-each>
+ <xsl:text>
+ default:
+ ;
+ }
+
+ return sResult;
+}</xsl:text>
+ </xsl:template>
+
+ <xsl:key name="resources-with-kind" match="resource[.//kind]"
+ use=".//kind/@name"/>
+
+ <xsl:key name="sprms-with-code" match="element" use="@tokenid"/>
+
+ <!--
+ Generates case labels for mapping from token ids to a single kind
+ of sprm.
+
+ @param kind the sprm kind for which to generate the case labels
+ -->
+ <xsl:template name="sprmkindcase">
+ <xsl:param name="kind"/>
+ <xsl:for-each select="key('resources-with-kind', $kind)/element">
+ <xsl:if test="generate-id(.) = generate-id(key('sprms-with-code', @tokenid))">
+ <xsl:text>
+ case </xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@tokenid"/>
+ </xsl:call-template>
+ <xsl:text>: //</xsl:text>
+ <xsl:value-of select="ancestor::resource/@name"/>
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="@name"/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
+
+ <!--
+ Generates SprmKind.
+ -->
+ <xsl:template name="sprmkind">
+ <xsl:text>
+Sprm::Kind SprmKind(sal_uInt32 nSprmCode)
+{
+ Sprm::Kind nResult = Sprm::UNKNOWN;
+
+ switch (nSprmCode)
+ {</xsl:text>
+ <xsl:call-template name="sprmkindcase">
+ <xsl:with-param name="kind">paragraph</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+ nResult = Sprm::PARAGRAPH;
+ break;</xsl:text>
+ <xsl:call-template name="sprmkindcase">
+ <xsl:with-param name="kind">character</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+ nResult = Sprm::CHARACTER;
+ break;</xsl:text>
+ <xsl:call-template name="sprmkindcase">
+ <xsl:with-param name="kind">table</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+ nResult = Sprm::TABLE;
+ break;</xsl:text>
+ <xsl:text>
+ default:
+ break;
+ }
+
+ return nResult;
+}</xsl:text>
+ </xsl:template>
+
+ <!--
+ Generates qname for id.
+
+ @param id the id to generate qname for
+
+ If id is of format <prefix>:<localname> the result is
+
+ NS_<prefix>::LN_<localname>
+
+ If id does not contain ":" the result is just id.
+ -->
+ <xsl:template name='idtoqname'>
+ <xsl:param name='id'/>
+ <xsl:choose>
+ <xsl:when test="contains($id, ':')">
+ <xsl:text>NS_</xsl:text>
+ <xsl:value-of select='substring-before($id, ":")'/>
+ <xsl:text>::LN_</xsl:text>
+ <xsl:value-of select='substring-after($id, ":")'/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$id"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:key name="same-token-name" match="rng:element|rng:attribute" use="@localname"/>
+
+ <!--
+ Generates input for gperf to genreate hash map for OOXMLFastTokenHandler
+ -->
+ <xsl:template name="gperfinputfasttokenhandler">
+ <xsl:text>
+%{
+#include "OOXMLFastTokens.hxx"
+
+namespace writerfilter { namespace ooxml { namespace tokenmap {
+%}
+struct token { const char * name; Token_t nToken; };
+%%</xsl:text>
+ <xsl:for-each select=".//rng:element|.//rng:attribute">
+ <xsl:if test="generate-id(.) = generate-id(key('same-token-name', @localname)[1])">
+ <xsl:text>&#xa;</xsl:text>
+ <xsl:value-of select="@localname"/>
+ <xsl:text>, </xsl:text>
+ <xsl:call-template name="fastlocalname"/>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>
+%%&#xa;</xsl:text>
+}}}&#xa;</xsl:template>
+
+<xsl:template name="namespaceid">
+ <xsl:text>NS_</xsl:text>
+ <xsl:value-of select="@alias"/>
+</xsl:template>
+
+<xsl:template name="namespaceids">
+ <xsl:for-each select="//namespace-alias">
+ <xsl:text>
+const sal_uInt32 </xsl:text>
+<xsl:call-template name="namespaceid"/>
+<xsl:text> = </xsl:text>
+<xsl:value-of select="@id"/>
+<xsl:text> &lt;&lt; 16;</xsl:text>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="fasttoken">
+ <xsl:variable name="ns">
+ <xsl:call-template name="fastnamespace"/>
+ </xsl:variable>
+ <xsl:if test="string-length($ns) > 0">
+ <xsl:value-of select="$ns"/>
+ <xsl:text>|</xsl:text>
+ </xsl:if>
+ <xsl:call-template name="fastlocalname"/>
+</xsl:template>
+
+<xsl:template name="fasttokenwithattr">
+ <xsl:if test="local-name(.)='attribute'">
+ <xsl:text>F_Attribute|</xsl:text>
+ </xsl:if>
+ <xsl:call-template name="fasttoken"/>
+</xsl:template>
+
+<xsl:template name="caselabelfasttoken">
+ <xsl:text>case </xsl:text>
+ <xsl:call-template name="fasttokenwithattr"/>
+ <xsl:text>:</xsl:text>
+</xsl:template>
+
+<xsl:key name="elementsattrsbynamespace"
+ match="rng:element[@name]|rng:attribute[@name]" use="ancestor::rng:grammar/@ns"/>
+
+<xsl:template name="fasttokentoid">
+ <xsl:text>
+namespace tokenmap {
+struct token { const char * name; Token_t nToken; };
+class Perfect_Hash
+{
+private:
+ static inline unsigned int hash (const char *str, unsigned int len);
+public:
+ static struct token *in_word_set (const char *str, unsigned int len);
+};
+}
+
+string fastTokenToId(sal_uInt32 nToken)
+{
+ </xsl:text>
+ <xsl:text>
+ string sResult;
+
+ switch (nToken &amp; 0xffff0000)
+ {</xsl:text>
+ <xsl:for-each select="//namespace-alias">
+ <xsl:text>
+ case NS_</xsl:text>
+ <xsl:value-of select="@alias"/>
+ <xsl:text>:
+ sResult += "</xsl:text>
+ <xsl:value-of select="@alias"/>
+ <xsl:text>:";
+ break;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+ }
+
+ switch (nToken &amp; 0xffff)
+ {</xsl:text>
+ <xsl:for-each select=".//rng:element[@localname]|.//rng:attribute[@localname]">
+ <xsl:variable name="localname" select="@localname"/>
+ <xsl:if test="generate-id(.) = generate-id(key('same-token-name', $localname)[1])">
+ <xsl:text>
+ case </xsl:text>
+ <xsl:call-template name="fastlocalname"/>
+ <xsl:text>:
+ sResult += "</xsl:text>
+ <xsl:value-of select="$localname"/>
+ <xsl:text>";
+ break;</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+<xsl:text>
+ }
+
+ return sResult;
+}
+ </xsl:text>
+</xsl:template>
+
+<xsl:template name="getfastparser">
+<xsl:text>
+uno::Reference &lt; xml::sax::XFastParser &gt; OOXMLStreamImpl::getFastParser()
+{
+ if (! mxFastParser.is())
+ {
+ uno::Reference &lt; lang::XMultiComponentFactory &gt; xFactory =
+ uno::Reference &lt; lang::XMultiComponentFactory &gt;
+ (mxContext->getServiceManager());
+
+ mxFastParser.set(xFactory->createInstanceWithContext
+ ( ::rtl::OUString::createFromAscii
+ ( "com.sun.star.xml.sax.FastParser" ),
+ mxContext ), uno::UNO_QUERY_THROW);
+</xsl:text>
+<xsl:for-each select="//namespace-alias">
+ <xsl:text>
+ mxFastParser->registerNamespace(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>")), </xsl:text>
+ <xsl:call-template name="namespaceid"/>
+ <xsl:text>);</xsl:text>
+</xsl:for-each>
+<xsl:text>
+ }
+
+ return mxFastParser;
+}
+</xsl:text>
+</xsl:template>
+
+<xsl:template name="searchdefinenamespace">
+ <xsl:param name="name"/>
+ <xsl:variable name="tmp">
+ <xsl:for-each select="ancestor::namespace">
+ <xsl:call-template name="searchdefinenamespacerec">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="string-length($tmp) > 0">
+ <xsl:value-of select="$tmp"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:for-each select="key('defines-with-name', $name)[1]">
+ <xsl:value-of select="ancestor::namespace/@name"/>
+ <xsl:text>:</xsl:text>
+ <xsl:value-of select="@name"/>
+ </xsl:for-each>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="searchdefinenamespacerec">
+ <xsl:param name="name"/>
+ <xsl:variable name="nsname" select="@name"/>
+ <xsl:variable name="nsid" select="generate-id(.)"/>
+ <xsl:variable name="tmp">
+ <xsl:for-each select="key('defines-with-name', $name)">
+ <xsl:if test="generate-id(ancestor::namespace)=$nsid">
+ <xsl:value-of select="$nsname"/>
+ <xsl:text>:</xsl:text>
+ <xsl:value-of select="$name"/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="string-length($tmp) > 0">
+ <xsl:value-of select="$tmp"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:for-each select="./rng:include">
+ <xsl:for-each select="/model/namespace[@file=@href]">
+ <xsl:call-template name="searchdefinenamespacerec">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+ <xsl:template name="fastattributescheckattr">
+ <xsl:text>if (Attribs->hasAttribute(</xsl:text>
+ <xsl:call-template name="fastlocalname"/>
+ <xsl:text>))</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="fastattributescheckattrwithns">
+ <xsl:text>if (Attribs->hasAttribute(</xsl:text>
+ <xsl:call-template name="fasttoken"/>
+ <xsl:text>))</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="fastcontextnameforattribute">
+ <xsl:choose>
+ <xsl:when test="./rng:ref">
+ <xsl:for-each select="./rng:ref">
+ <xsl:call-template name="valuenameforref"/>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:when test="./rng:data/@type = 'boolean'">
+ <xsl:text>OOXMLBooleanValue</xsl:text>
+ </xsl:when>
+ <xsl:when test="./rng:data/@type = 'unsignedInt'">
+ <xsl:text>OOXMLIntegerValue</xsl:text>
+ </xsl:when>
+ <xsl:when test="./rng:text or ./rng:data/@type = 'string' or ./rng:data/@type = 'token'">
+ <xsl:text>OOXMLStringValue</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="fastattributesproperties">
+ <xsl:variable name="definename" select="@name"/>
+ <xsl:for-each select=".//rng:attribute">
+ <xsl:variable name="attrname" select="@name"/>
+ <xsl:variable name="contextname">
+ <xsl:call-template name="fastcontextnameforattribute"/>
+ </xsl:variable>
+ <xsl:variable name="attrid">
+ <xsl:call-template name="idforattr"/>
+ </xsl:variable>
+ <xsl:if test="string-length($contextname) > 0 and string-length($attrid) > 0">
+ <xsl:text>
+ </xsl:text>
+ <xsl:call-template name="fastattributescheckattrwithns"/>
+ <xsl:text>
+ {
+ ::rtl::OUString aValue(Attribs->getValue(</xsl:text>
+ <xsl:call-template name="fasttoken"/>
+ <xsl:text>));
+ OOXMLFastHelper &lt; </xsl:text>
+ <xsl:value-of select="$contextname"/>
+ <xsl:text> &gt;::newProperty(this, </xsl:text>
+ <xsl:value-of select="$attrid"/>
+ <xsl:text>, aValue);</xsl:text>
+ <xsl:for-each select="ancestor::namespace/resource[@name=$definename]">
+ <xsl:for-each select="./attribute[@name=$attrname]">
+ <xsl:choose>
+ <xsl:when test="@action='checkId'">
+ <xsl:text>
+ checkId(aValue);</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='checkXNoteType'">
+ </xsl:when>
+ <xsl:when test="@action='setXNoteId'">
+ <xsl:text>
+ setXNoteId(aValue);</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:for-each>
+ <xsl:text>
+ }</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="fastcharactersstringvalue">
+ <xsl:text>
+
+ msValue = sText;</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="fastattributesstringvalue">
+ <xsl:for-each select=".//rng:attribute">
+ <xsl:text>
+ </xsl:text>
+ <xsl:call-template name="fastattributescheckattrwithns"/>
+ <xsl:text>
+ msValue = Attribs->getValue(</xsl:text>
+ <xsl:call-template name="fasttoken"/>
+ <xsl:text>);</xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="fastcharactersintvalue">
+ <xsl:text>
+
+ mnValue = sText.toInt32();</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="fastattributesintvalue">
+ <xsl:for-each select=".//rng:attribute">
+ <xsl:text>
+ </xsl:text>
+ <xsl:call-template name="fastattributescheckattrwithns"/>
+ <xsl:text>
+ mnValue = Attribs->getValue(</xsl:text>
+ <xsl:call-template name="fasttoken"/>
+ <xsl:text>).toInt32();</xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="fastcharactershexvalue">
+ <xsl:text>
+
+ mnValue = sText.toInt32(16);</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="fastattributeshexvalue">
+ <xsl:for-each select=".//rng:attribute">
+ <xsl:text>
+ </xsl:text>
+ <xsl:call-template name="fastattributescheckattrwithns"/>
+ <xsl:text>
+ mnValue = Attribs->getValue(</xsl:text>
+ <xsl:call-template name="fasttoken"/>
+ <xsl:text>).toInt32(16);</xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="fastcharactersboolvalue">
+ <xsl:text>
+
+ setValue( sText );</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="fastattributesboolvalue">
+ <xsl:for-each select=".//rng:attribute">
+ <xsl:text>
+ </xsl:text>
+ <xsl:call-template name="fastattributescheckattrwithns"/>
+ <xsl:text>
+ setValue(Attribs->getValue(</xsl:text>
+ <xsl:call-template name="fasttoken"/>
+ <xsl:text>));</xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="fastcharacterslistvalue">
+ <xsl:variable name="bodywithns">
+ <xsl:for-each select="rng:ref">
+ <xsl:variable name="refname" select="@name"/>
+ <xsl:variable name="refns">
+ <xsl:call-template name="searchdefinenamespace">
+ <xsl:with-param name="name" select="@name"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="valname">
+ <xsl:for-each select="/model/namespace[@name=substring-before($refns, ':')]">
+ <xsl:for-each select="./rng:grammar/rng:define[@name=substring-after($refns, ':')]">
+ <xsl:call-template name="valuenamefordefine"/>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:text>
+ mpValue = OOXMLValue::Pointer_t (new </xsl:text>
+ <xsl:value-of select="$valname"/>
+ <xsl:text>( sText ) );</xsl:text>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:if test="string-length($bodywithns) > 0">
+ <xsl:text>
+ </xsl:text>
+ <xsl:value-of select="$bodywithns"/>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="fastattributeslistvalue">
+ <xsl:for-each select=".//rng:attribute">
+ <xsl:variable name="myfasttoken">
+ <xsl:call-template name="fastlocalname"/>
+ </xsl:variable>
+ <xsl:variable name="myfasttokenwithns">
+ <xsl:call-template name="fasttoken"/>
+ </xsl:variable>
+ <xsl:variable name="bodywithns">
+ <xsl:for-each select="rng:ref">
+ <xsl:variable name="refname" select="@name"/>
+ <xsl:variable name="refns">
+ <xsl:call-template name="searchdefinenamespace">
+ <xsl:with-param name="name" select="@name"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="valname">
+ <xsl:for-each select="/model/namespace[@name=substring-before($refns, ':')]">
+ <xsl:for-each select="./rng:grammar/rng:define[@name=substring-after($refns, ':')]">
+ <xsl:call-template name="valuenamefordefine"/>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:text>
+ mpValue = OOXMLValue::Pointer_t (new </xsl:text>
+ <xsl:value-of select="$valname"/>
+ <xsl:text>(Attribs->getValue(</xsl:text>
+ <xsl:value-of select="$myfasttokenwithns"/>
+ <xsl:text>)));</xsl:text>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:if test="string-length($bodywithns) > 0">
+ <xsl:text>
+ </xsl:text>
+ <xsl:call-template name="fastattributescheckattrwithns"/>
+ <xsl:value-of select="$bodywithns"/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="fastattributebody">
+ <xsl:variable name="resource">
+ <xsl:call-template name="contextresource"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$resource = 'Properties' or $resource = 'Stream' or $resource='XNote' or $resource='Shape'" >
+ <xsl:call-template name="fastattributesproperties"/>
+ </xsl:when>
+ <xsl:when test="$resource = 'StringValue'">
+ <xsl:call-template name="fastattributesstringvalue"/>
+ </xsl:when>
+ <xsl:when test="$resource = 'IntegerValue'">
+ <xsl:call-template name="fastattributesintvalue"/>
+ </xsl:when>
+ <xsl:when test="$resource = 'HexValue'">
+ <xsl:call-template name="fastattributeshexvalue"/>
+ </xsl:when>
+ <xsl:when test="$resource = 'BooleanValue'">
+ <xsl:call-template name="fastattributesboolvalue"/>
+ </xsl:when>
+ <xsl:when test="$resource = 'ListValue'">
+ <xsl:call-template name="fastattributeslistvalue"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="valuenameforref">
+ <xsl:variable name="definename">
+ <xsl:call-template name="searchdefinenamespace">
+ <xsl:with-param name="name" select="@name"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:for-each select="/model/namespace[@name=substring-before($definename, ':')]">
+ <xsl:for-each select="./rng:grammar/rng:define[@name=substring-after($definename, ':')]">
+ <xsl:call-template name="valuenamefordefine"/>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="fastcontextnameforref">
+ <xsl:variable name="definename">
+ <xsl:call-template name="searchdefinenamespace">
+ <xsl:with-param name="name" select="@name"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <!--
+ <xsl:text>/* </xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="$definename"/>
+ <xsl:text> */</xsl:text>
+ -->
+ <xsl:for-each select="/model/namespace[@name=substring-before($definename, ':')]">
+ <xsl:for-each select="./rng:grammar/rng:define[@name=substring-after($definename, ':')]">
+ <xsl:call-template name="fastcontextname"/>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="fastattributebodyrefs">
+ <xsl:for-each select=".//rng:ref[not(ancestor::rng:element or ancestor::rng:attribute)]">
+ <xsl:variable name="contextname">
+ <xsl:call-template name="fastcontextnameforref"/>
+ </xsl:variable>
+ <xsl:if test="string-length($contextname) > 0">
+ <xsl:text>
+ OOXMLFastHelper &lt;</xsl:text>
+ <xsl:value-of select="$contextname"/>
+ <xsl:text>&gt;::attributes(this, Attribs);</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
+
+ <!--
+ Generates definition of method attributes for current <define>
+ -->
+ <xsl:template name="fastattribute">
+ <xsl:variable name="resource">
+ <xsl:call-template name="contextresource"/>
+ </xsl:variable>
+ <!--<xsl:if test="not($resource='Shape')"> -->
+ <xsl:variable name="body">
+ <xsl:call-template name="fastattributebody"/>
+ </xsl:variable>
+ <xsl:variable name="bodyrefs">
+ <xsl:call-template name="fastattributebodyrefs"/>
+ </xsl:variable>
+ <xsl:if test="string-length($body) > 0 or string-length($bodyrefs) > 0">
+ <xsl:text>
+void </xsl:text>
+<xsl:call-template name="fastcontextname"/>
+<xsl:text>::attributes
+(const uno::Reference &lt; xml::sax::XFastAttributeList &gt; &amp; Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_DUMP_ATTRIBUTES
+ dumpAttribs(Attribs);
+#endif
+</xsl:text>
+<xsl:value-of select="$body"/>
+<xsl:value-of select="$bodyrefs"/>
+<xsl:text>
+}
+</xsl:text>
+ </xsl:if>
+ <!-- </xsl:if> -->
+ </xsl:template>
+
+ <xsl:template name="fastelementcreatestatement">
+ <xsl:for-each select=".//rng:ref">
+ <xsl:choose>
+ <xsl:when test="@name='BUILT_IN_ANY_TYPE'">
+ <xsl:text>createFromStart(Element, Attribs)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="classname">
+ <xsl:call-template name="fastcontextname"/>
+ </xsl:variable>
+ <xsl:if test="string-length($classname) > 0">
+ <xsl:text>OOXMLFastHelper &lt;</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>&gt;::createAndSetParent(this, Element, </xsl:text>
+ <xsl:for-each select="ancestor::rng:element">
+ <xsl:variable name="id">
+ <xsl:call-template name="idforelement"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="string-length($id) > 0">
+ <xsl:value-of select="$id"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>0</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>)</xsl:text>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:template>
+
+ <!--
+ Generates name for parent class of fast context.
+ -->
+ <xsl:template name="fastresourceclass">
+ <xsl:text>OOXMLFastContextHandler</xsl:text>
+ <xsl:call-template name="contextresource"/>
+ </xsl:template>
+
+ <!--
+ Generates the declaration of the fast context for the current <define>
+ -->
+ <xsl:template name="fastcontextdecl">
+ <xsl:variable name="classname">
+ <xsl:call-template name="fastcontextname"/>
+ </xsl:variable>
+ <xsl:text>
+class WRITERFILTER_DLLPRIVATE </xsl:text>
+<xsl:value-of select="$classname"/>
+<xsl:text>: public </xsl:text>
+<xsl:call-template name="fastresourceclass"/>
+<xsl:text>
+{
+public:
+ explicit </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>
+ (OOXMLFastContextHandler * context);
+ virtual ~</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>();
+ </xsl:text>
+ <xsl:variable name="createchildcontextbody">
+ <xsl:call-template name="createfastchildcontext"/>
+ </xsl:variable>
+ <xsl:if test="string-length($createchildcontextbody) > 0">
+ virtual uno::Reference &lt; xml::sax::XFastContextHandler &gt;
+ lcl_createFastChildContext
+ (::sal_Int32 Element,
+ const uno::Reference &lt; xml::sax::XFastAttributeList &gt; &amp; Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ </xsl:if>
+ <xsl:variable name="fastattributebody">
+ <xsl:call-template name="fastattribute"/>
+ </xsl:variable>
+ <xsl:if test="string-length($fastattributebody) > 0">
+ virtual void attributes
+ (const uno::Reference &lt; xml::sax::XFastAttributeList &gt; &amp; Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ </xsl:if>
+ <xsl:variable name="faststartactionbody">
+ <xsl:call-template name="faststartaction"/>
+ </xsl:variable>
+ <xsl:if test="string-length($faststartactionbody)">
+ virtual void lcl_startAction(Token_t nElement);
+ </xsl:if>
+ <xsl:variable name="fastendactionbody">
+ <xsl:call-template name="fastendaction"/>
+ </xsl:variable>
+ <xsl:if test="string-length($fastendactionbody)">
+ virtual void lcl_endAction(Token_t nElement);
+ </xsl:if>
+ <xsl:variable name="fastcharactersbody">
+ <xsl:call-template name="fastcharacters"/>
+ </xsl:variable>
+ <xsl:if test="string-length($fastcharactersbody)">
+ virtual void lcl_characters(const ::rtl::OUString &amp; aChars)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ </xsl:if>
+ <xsl:text>
+ virtual string getType() const { return "</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>"; }</xsl:text>
+ <xsl:variable name="propagatespropsbody">
+ <xsl:call-template name="propagatesproperties"/>
+ </xsl:variable>
+ <xsl:if test="string-length($propagatespropsbody)">
+ <xsl:text>
+ virtual bool propagatesProperties() const;</xsl:text>
+ </xsl:if>
+ <xsl:text>
+};
+ </xsl:text>
+ </xsl:template>
+
+ <xsl:template name="fastcontextdecls">
+ <xsl:param name="namespace"/>
+ <xsl:for-each select="/model/namespace[@name=$namespace]">
+ <xsl:for-each select="./rng:grammar/rng:define">
+ <xsl:variable name="do">
+ <xsl:call-template name="classfordefine"/>
+ </xsl:variable>
+ <xsl:text>
+/*
+ </xsl:text>
+ <xsl:value-of select="ancestor::namespace/@name"/>
+ <xsl:text>:</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>
+*/</xsl:text>
+<xsl:if test="$do = '1'">
+ <xsl:call-template name="fastcontextdecl"/>
+</xsl:if>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="fastcontextconstructor">
+ <xsl:variable name="classname">
+ <xsl:call-template name="fastcontextname"/>
+ </xsl:variable>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>::</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>
+(OOXMLFastContextHandler * pContext)
+: </xsl:text>
+<xsl:call-template name="fastresourceclass"/>
+<xsl:text>(pContext)
+{}
+</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="fastcontextdestructor">
+ <xsl:variable name="classname">
+ <xsl:call-template name="fastcontextname"/>
+ </xsl:variable>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>::~</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>
+()
+{}
+</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="faststartactionbodysetid">
+ <xsl:if test="@resource = 'Table' or @resource='PropertyTable'">
+ <xsl:text>
+ setId(</xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@tokenid"/>
+ </xsl:call-template>
+ <xsl:text>);</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="faststartactionbodychooseaction">
+ <xsl:for-each select="./action[@name='start']">
+ <xsl:call-template name="chooseaction"/>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="faststartactionbody">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:for-each select="ancestor::namespace/resource[@name = $name]">
+ <xsl:call-template name="faststartactionbodysetid"/>
+ <xsl:call-template name="faststartactionbodychooseaction"/>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="faststartaction">
+ <xsl:variable name="body">
+ <xsl:call-template name="faststartactionbody"/>
+ </xsl:variable>
+ <xsl:variable name="name" select="@name"/>
+ <xsl:if test="string-length($body) > 0">
+ <xsl:variable name="classname">
+ <xsl:call-template name="fastcontextname"/>
+ </xsl:variable>
+ <xsl:text>
+void </xsl:text>
+<xsl:value-of select="$classname"/>
+<xsl:text>::lcl_startAction(Token_t</xsl:text>
+<xsl:for-each select="ancestor::namespace/resource[@name=$name]">
+ <xsl:if test="./element/action[@name='start']">
+ <xsl_text> nElement</xsl_text>
+ </xsl:if>
+</xsl:for-each>
+<xsl:text>)
+{</xsl:text>
+<xsl:value-of select="$body"/>
+<xsl:text>
+}
+</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="fastendactionbody">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:for-each select="ancestor::namespace/resource[@name = $name]">
+ <xsl:for-each select="./action[@name='end']">
+ <xsl:call-template name="chooseaction"/>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="fastendaction">
+ <xsl:variable name="body">
+ <xsl:call-template name="fastendactionbody"/>
+ </xsl:variable>
+ <xsl:variable name="name" select="@name"/>
+ <xsl:if test="string-length($body) > 0">
+ <xsl:variable name="classname">
+ <xsl:call-template name="fastcontextname"/>
+ </xsl:variable>
+ <xsl:text>
+void </xsl:text>
+<xsl:value-of select="$classname"/>
+<xsl:text>::lcl_endAction(Token_t</xsl:text>
+<xsl:for-each select="ancestor::namespace/resource[@name=$name]">
+ <xsl:if test="./element/action[@name='end']">
+ <xsl_text> nElement</xsl_text>
+ </xsl:if>
+</xsl:for-each>
+<xsl:text>)
+{</xsl:text>
+<xsl:value-of select="$body"/>
+<xsl:text>
+}
+</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="fastcharactersbody">
+ <xsl:variable name="name" select="@name"/>
+ <!-- ST values as text -->
+ <xsl:variable name="resource">
+ <xsl:call-template name="contextresource"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$resource = 'StringValue'">
+ <xsl:call-template name="fastcharactersstringvalue"/>
+ </xsl:when>
+ <xsl:when test="$resource = 'IntegerValue'">
+ <xsl:call-template name="fastcharactersintvalue"/>
+ </xsl:when>
+ <xsl:when test="$resource = 'HexValue'">
+ <xsl:call-template name="fastcharactershexvalue"/>
+ </xsl:when>
+ <xsl:when test="$resource = 'BooleanValue'">
+ <xsl:call-template name="fastcharactersboolvalue"/>
+ </xsl:when>
+ <xsl:when test="$resource = 'ListValue'">
+ <xsl:call-template name="fastcharacterslistvalue"/>
+ </xsl:when>
+ </xsl:choose>
+
+ <!-- characters action -->
+ <xsl:for-each select="ancestor::namespace/resource[@name = $name]//action[@name='characters']">
+ <xsl:call-template name="chooseaction"/>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="fastcharacters">
+ <xsl:variable name="body">
+ <xsl:call-template name="fastcharactersbody"/>
+ </xsl:variable>
+ <xsl:if test="string-length($body) > 0">
+ <xsl:variable name="classname">
+ <xsl:call-template name="fastcontextname"/>
+ </xsl:variable>
+ <xsl:text>
+void </xsl:text>
+<xsl:value-of select="$classname"/>
+<xsl:text>::lcl_characters(const ::rtl::OUString &amp; sText)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{</xsl:text>
+<xsl:value-of select="$body"/>
+<xsl:text>
+}
+</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="propagatespropertiesbody">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:for-each select="ancestor::namespace/resource[@name=$name]">
+ <xsl:for-each select=".//action">
+ <xsl:choose>
+ <xsl:when test="@name='propagateCharacterProperties'">
+ <xsl:text>
+ return true;</xsl:text>
+ </xsl:when>
+ <xsl:when test="@name='propagateTableProperties'">
+ <xsl:text>
+ return true;</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="propagatesproperties">
+ <xsl:variable name="body">
+ <xsl:call-template name="propagatespropertiesbody"/>
+ </xsl:variable>
+ <xsl:if test="string-length($body) > 0">
+ <xsl:variable name="classname">
+ <xsl:call-template name="fastcontextname"/>
+ </xsl:variable>
+ <xsl:text>
+bool </xsl:text>
+<xsl:value-of select="$classname"/>
+<xsl:text>::propagatesProperties() const
+{</xsl:text>
+ <xsl:value-of select="$body"/>
+ <xsl:text>
+}
+ </xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="fastcontextcreatefromstart">
+ <xsl:text>
+uno::Reference &lt; xml::sax::XFastContextHandler &gt;
+OOXMLFastContextHandler::createFromStart
+(::sal_Int32 Element,
+ const uno::Reference &lt; xml::sax::XFastAttributeList &gt; &amp; Attribs)
+{
+#ifdef DEBUG_CREATE
+ debug_logger-&gt;startElement("createfromstart");
+ debug_logger-&gt;attribute("element", fastTokenToId(Element));
+#endif
+ uno::Reference &lt; xml::sax::XFastContextHandler &gt; xResult;</xsl:text>
+
+ <xsl:for-each select="//namespace/start">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$name]">
+ <xsl:text>
+ if (! xResult.is() || dynamic_cast&lt;OOXMLFastContextHandler *&gt;(xResult.get())->isFallback())
+ {
+ xResult = OOXMLFastHelper &lt; </xsl:text>
+ <xsl:call-template name="fastcontextname"/>
+ <xsl:text> &gt;::createAndSetParentRef(this, Element, Attribs);
+ }</xsl:text>
+ </xsl:for-each>
+ </xsl:for-each>
+ <xsl:text>
+
+#ifdef DEBUG_CREATE
+ debug_logger-&gt;endElement("createfromstart");
+#endif
+
+ return xResult;
+}
+ </xsl:text>
+ </xsl:template>
+
+ <xsl:key name="attribs-qnames" match="rng:attribute" use="@qname"/>
+
+ <xsl:template name="dumpattribs">
+ <xsl:text>
+void dumpAttrib(const char * sToken, sal_uInt32 nToken,
+ const uno::Reference &lt; xml::sax::XFastAttributeList
+ &gt; &amp; Attribs)
+{
+ try
+ {
+ if (Attribs->hasAttribute(nToken))
+ {
+ debug_logger-&gt;startElement("attrib");
+ debug_logger-&gt;attribute("id", sToken);
+ debug_logger-&gt;chars(Attribs->getValue(nToken));
+ debug_logger-&gt;endElement("attrib");
+ }
+ }
+ catch (...)
+ {
+ debug_logger-&gt;startElement("error");
+ debug_logger-&gt;chars(sToken);
+ debug_logger-&gt;endElement("error");
+ }
+}
+
+void dumpAttribs
+(const uno::Reference &lt; xml::sax::XFastAttributeList &gt; &amp; Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ debug_logger-&gt;startElement("attribs");
+ </xsl:text>
+ <xsl:for-each select="//rng:attribute[@name]">
+ <xsl:if test="generate-id(.) = generate-id(key('attribs-qnames', @qname)[1]
+)">
+ <xsl:text>
+ dumpAttrib("</xsl:text>
+ <xsl:call-template name="fastlocalname"/>
+ <xsl:text>", </xsl:text>
+ <xsl:call-template name="fastlocalname"/>
+ <xsl:text>, Attribs);</xsl:text>
+ <xsl:text>
+ dumpAttrib("</xsl:text>
+ <xsl:call-template name="fasttoken"/>
+ <xsl:text>", </xsl:text>
+ <xsl:call-template name="fasttoken"/>
+ <xsl:text>, Attribs);</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>
+ debug_logger-&gt;endElement("attribs");
+}</xsl:text>
+ </xsl:template>
+
+<xsl:template name="createfastchildcontextname">
+ <xsl:text>createFastContextHandler_</xsl:text>
+ <xsl:value-of select="@name"/>
+</xsl:template>
+
+<xsl:template name="caselabeldefine">
+ <xsl:text>case CLASS_</xsl:text>
+ <xsl:value-of select="translate(ancestor::namespace/@name, '-', '_')"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>:</xsl:text>
+</xsl:template>
+
+<xsl:template name="createfastchildcontextswitchbodyref">
+ <xsl:variable name="definename">
+ <xsl:call-template name="searchdefinenamespace">
+ <xsl:with-param name="name" select="@name"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:for-each select="/model/namespace[@name=substring-before($definename, ':')]">
+ <xsl:for-each select="./rng:grammar/rng:define[@name=substring-after($definename, ':')]">
+ <xsl:call-template name="createfastchildcontextswitchbody"/>
+ </xsl:for-each>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="createfastchildcontextswitchbody">
+ <xsl:for-each select=".//rng:element">
+ <xsl:text>
+ </xsl:text>
+ <xsl:call-template name="caselabelfasttoken"/>
+ <xsl:text>
+ xResult.set(</xsl:text>
+ <xsl:call-template name="fastelementcreatestatement"/>
+ <xsl:text>);
+ break;</xsl:text>
+ </xsl:for-each>
+ <xsl:for-each
+ select=".//rng:ref[not(ancestor::rng:element or ancestor::rng:attribute)]">
+ <xsl:call-template name="createfastchildcontextswitchbodyref"/>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="createfastchildcontextswitch">
+ <xsl:variable name="body">
+ <xsl:call-template name="createfastchildcontextswitchbody"/>
+ </xsl:variable>
+ <xsl:if test="string-length($body) > 0">
+ <xsl:text>
+ switch(Element)
+ {</xsl:text>
+ <xsl:value-of select="$body"/>
+ <xsl:text>
+ default:
+ ;
+ }</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template name="createfastchildcontextlookup">
+ <xsl:text>
+uno::Reference&lt;XFastContextHandler&gt; </xsl:text>
+<xsl:call-template name="createfastchildcontextname"/>
+<xsl:text>(Id parent, Token_t Element)
+{
+ uno::Reference&lt;XFastContextHandler&gt; xResult;
+ switch (parent)
+ {</xsl:text>
+<xsl:for-each select="./rng:grammar/rng:define">
+ <xsl:variable name="do">
+ <xsl:call-template name="classfordefine"/>
+ </xsl:variable>
+ <xsl:if test="$do='1'">
+ <xsl:variable name="casebody">
+ <xsl:call-template name="createfastchildcontextswitch"/>
+ </xsl:variable>
+ <xsl:if test="string-length($casebody) > 0">
+ <xsl:text>
+ </xsl:text>
+ <xsl:call-template name="caselabeldefine"/>
+ <xsl:value-of select="$casebody"/>
+ <xsl:text>
+ break;</xsl:text>
+ </xsl:if>
+ </xsl:if>
+</xsl:for-each>
+<xsl:text>
+ default:
+ ;
+ }
+
+ return xResult;
+}
+</xsl:text>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/rngtocxx b/writerfilter/source/ooxml/rngtocxx
new file mode 100755
index 000000000000..8b75d658f981
--- /dev/null
+++ b/writerfilter/source/ooxml/rngtocxx
@@ -0,0 +1,32 @@
+#!/bin/sh
+xalan -xsl modelpreprocess.xsl -in model.xml > model_processed.xml
+xalan -xsl resourcestokens.xsl -in model_processed.xml > OOXMLtokens.hxx
+xalan -xsl resources.xsl -in model_processed.xml > OOXMLresources.hxx
+xalan -xsl resourcesimpl.xsl -in model_processed.xml > OOXMLresources.cxx
+xalan -xsl resourcesimpl_dml-baseStylesheet.xsl -in model_processed.xml > OOXMLresources_dml-baseStylesheet.cxx
+xalan -xsl resourcesimpl_dml-baseTypes.xsl -in model_processed.xml > OOXMLresources_dml-baseTypes.cxx
+xalan -xsl resourcesimpl_dml-chartDrawing.xsl -in model_processed.xml > OOXMLresources_dml-chartDrawing.cxx
+xalan -xsl resourcesimpl_dml-documentProperties.xsl -in model_processed.xml > OOXMLresources_dml-documentProperties.cxx
+xalan -xsl resourcesimpl_dml-graphicalObject.xsl -in model_processed.xml > OOXMLresources_dml-graphicalObject.cxx
+xalan -xsl resourcesimpl_dml-shape3DCamera.xsl -in model_processed.xml > OOXMLresources_dml-shape3DCamera.cxx
+xalan -xsl resourcesimpl_dml-shape3DLighting.xsl -in model_processed.xml > OOXMLresources_dml-shape3DLighting.cxx
+xalan -xsl resourcesimpl_dml-shape3DScene.xsl -in model_processed.xml > OOXMLresources_dml-shape3DScene.cxx
+xalan -xsl resourcesimpl_dml-shape3DStyles.xsl -in model_processed.xml > OOXMLresources_dml-shape3DStyles.cxx
+xalan -xsl resourcesimpl_dml-shapeEffects.xsl -in model_processed.xml > OOXMLresources_dml-shapeEffects.cxx
+xalan -xsl resourcesimpl_dml-shapeGeometry.xsl -in model_processed.xml > OOXMLresources_dml-shapeGeometry.cxx
+xalan -xsl resourcesimpl_dml-shapeLineProperties.xsl -in model_processed.xml > OOXMLresources_dml-shapeLineProperties.cxx
+xalan -xsl resourcesimpl_dml-shapeProperties.xsl -in model_processed.xml > OOXMLresources_dml-shapeProperties.cxx
+xalan -xsl resourcesimpl_dml-styleDefaults.xsl -in model_processed.xml > OOXMLresources_dml-styleDefaults.cxx
+xalan -xsl resourcesimpl_dml-stylesheet.xsl -in model_processed.xml > OOXMLresources_dml-stylesheet.cxx
+xalan -xsl resourcesimpl_dml-textCharacter.xsl -in model_processed.xml > OOXMLresources_dml-textCharacter.cxx
+xalan -xsl resourcesimpl_dml-wordprocessingDrawing.xsl -in model_processed.xml > OOXMLresources_dml-wordprocessingDrawing.cxx
+xalan -xsl resourcesimpl_shared-math.xsl -in model_processed.xml > OOXMLresources_shared-math.cxx
+xalan -xsl resourcesimpl_shared-relationshipReference.xsl -in model_processed.xml > OOXMLresources_shared-relationshipReference.cxx
+xalan -xsl resourcesimpl_sml-customXmlMappings.xsl -in model_processed.xml > OOXMLresources_sml-customXmlMappings.cxx
+xalan -xsl resourcesimpl_wml.xsl -in model_processed.xml > OOXMLresources_wml.cxx
+xalan -xsl tokenmapinit.xsl -in model_processed.xml > TokenMapInit.cxx
+xalan -xsl valuesimpl.xsl -in model_processed.xml > OOXMLvalues.cxx
+xalan -xsl qnametostr.xsl -in model_processed.xml > qnametostr.tmp
+xalan -xsl resourceids.xsl -in model_processed.xml > ../../inc/ooxml/resourceids.hxx
+xalan -xsl gperfattributes.xsl -in model_processed.xml | gperf -t -E -S1 -LC++ > gperfattributes.hxx
+xalan -xsl gperfelements.xsl -in model_processed.xml | gperf -t -E -S1 -LC++ > gperfelements.hxx
diff --git a/writerfilter/source/ooxml/tokenxmlfooter b/writerfilter/source/ooxml/tokenxmlfooter
new file mode 100644
index 000000000000..6f664070c0dd
--- /dev/null
+++ b/writerfilter/source/ooxml/tokenxmlfooter
@@ -0,0 +1 @@
+</model>
diff --git a/writerfilter/source/ooxml/tokenxmlheader b/writerfilter/source/ooxml/tokenxmlheader
new file mode 100644
index 000000000000..25a92439af63
--- /dev/null
+++ b/writerfilter/source/ooxml/tokenxmlheader
@@ -0,0 +1 @@
+<model>
diff --git a/writerfilter/source/ooxml/values.xsl b/writerfilter/source/ooxml/values.xsl
new file mode 100644
index 000000000000..cee50f39ff61
--- /dev/null
+++ b/writerfilter/source/ooxml/values.xsl
@@ -0,0 +1,88 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_VALUES_HXX
+#define INCLUDED_OOXML_VALUES_HXX
+
+#include &lt;rtl/ustring.hxx&gt;
+#include "OOXMLPropertySetImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="valuedecls"/>
+ <xsl:text>
+/// @endcond
+}}
+#endif //INCLUDED_OOXML_VALUES_HXX&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/valuesimpl.xsl b/writerfilter/source/ooxml/valuesimpl.xsl
new file mode 100644
index 000000000000..64be68700ad5
--- /dev/null
+++ b/writerfilter/source/ooxml/valuesimpl.xsl
@@ -0,0 +1,85 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="resourcestools.xsl"/>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;iostream&gt;
+#include &lt;doctok/resourceids.hxx&gt;
+#include &lt;ooxml/resourceids.hxx&gt;
+#include "OOXMLvalues.hxx"
+#include "OOXMLPropertySetImpl.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+ </xsl:text>
+ <xsl:call-template name="valueconstants"/>
+ <xsl:call-template name="valueimpls"/>
+ <xsl:text>
+}}&#xa;</xsl:text></out></xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/resourcemodel/TagLogger.cxx b/writerfilter/source/resourcemodel/TagLogger.cxx
new file mode 100644
index 000000000000..a4baf718a5d7
--- /dev/null
+++ b/writerfilter/source/resourcemodel/TagLogger.cxx
@@ -0,0 +1,331 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <fstream>
+#include <string.h>
+#include <resourcemodel/TagLogger.hxx>
+#include <resourcemodel/util.hxx>
+#include <resourcemodel/QNameToString.hxx>
+
+namespace writerfilter
+{
+ XMLTag::Pointer_t XMLTag::NIL(new XMLTag("NIL"));
+
+ void XMLTag::addAttr(string sName, string sValue)
+ {
+ XMLAttribute aAttr(sName, sValue);
+
+ mAttrs.push_back(aAttr);
+ }
+
+ void XMLTag::addTag(XMLTag::Pointer_t pTag)
+ {
+ if (pTag != XMLTag::Pointer_t())
+ mTags.push_back(pTag);
+ }
+
+ void XMLTag::chars(const string & rChars)
+ {
+ mChars = rChars;
+ }
+
+ const string & XMLTag::getTag() const
+ {
+ return mTag;
+ }
+
+ string XMLTag::toString() const
+ {
+ if (mChars.length() > 0)
+ return mChars;
+
+ string sResult;
+
+ if (mMode == START || mMode == COMPLETE)
+ {
+ sResult += "<" + mTag;
+
+ XMLAttributes_t::const_iterator aIt = mAttrs.begin();
+ while (aIt != mAttrs.end())
+ {
+ sResult += " ";
+ sResult += aIt->mName;
+ sResult += "=\"";
+ sResult += xmlify(aIt->mValue);
+ sResult += "\"";
+
+ aIt++;
+ }
+
+ sResult +=">";
+
+ if (mTags.size() > 0)
+ {
+ XMLTags_t::const_iterator aItTags = mTags.begin();
+ while (aItTags != mTags.end())
+ {
+ if ((*aItTags).get() != NULL)
+ sResult += (*aItTags)->toString();
+
+ aItTags++;
+ }
+ }
+ }
+
+ if (mMode == END || mMode == COMPLETE)
+ sResult += "</" + mTag + ">";
+
+ return sResult;
+ }
+
+ ostream & XMLTag::output(ostream & o) const
+ {
+ if (mMode == START || mMode == COMPLETE)
+ {
+ o << "<" << mTag;
+
+ XMLAttributes_t::const_iterator aItAttrs(mAttrs.begin());
+ while (aItAttrs != mAttrs.end())
+ {
+ o << " " << aItAttrs->mName << "=\""
+ << xmlify(aItAttrs->mValue)
+ << "\"";
+
+ aItAttrs++;
+ }
+
+ o << ">";
+
+ XMLTags_t::const_iterator aItTags(mTags.begin());
+ while (aItTags != mTags.end())
+ {
+ (*aItTags)->output(o);
+ aItTags++;
+ }
+
+ o << mChars;
+ }
+
+ if (mMode == END || mMode == COMPLETE)
+ o << "</" << mTag << ">";
+
+ return o;
+ }
+
+ struct eqstr
+ {
+ bool operator()(const char* s1, const char* s2) const
+ {
+ return strcmp(s1, s2) == 0;
+ }
+ };
+
+ typedef hash_map<const char *, TagLogger::Pointer_t, hash<const char *>, eqstr> TagLoggerHashMap_t;
+ static TagLoggerHashMap_t * tagLoggers = NULL;
+
+ TagLogger::TagLogger()
+ {
+ }
+
+ TagLogger::~TagLogger()
+ {
+ }
+
+ TagLogger::Pointer_t TagLogger::getInstance(const char * name)
+ {
+ if (tagLoggers == NULL)
+ tagLoggers = new TagLoggerHashMap_t();
+
+ TagLoggerHashMap_t::iterator aIt = tagLoggers->end();
+
+ if (! tagLoggers->empty())
+ aIt = tagLoggers->find(name);
+
+ if (aIt == tagLoggers->end())
+ {
+ TagLogger::Pointer_t pTagLogger(new TagLogger());
+ pair<const char *, TagLogger::Pointer_t> entry(name, pTagLogger);
+ aIt = tagLoggers->insert(entry).first;
+ }
+
+ return aIt->second;
+ }
+
+ XMLTag::Pointer_t TagLogger::currentTag() const
+ {
+ bool bEmpty=mTags.empty();
+ if (!bEmpty)
+ return mTags.top();
+
+ return XMLTag::NIL;
+ }
+
+ void TagLogger::startDocument()
+ {
+ XMLTag::Pointer_t pTag(new XMLTag("root"));
+ mTags.push(pTag);
+ }
+
+ void TagLogger::element(const string & name)
+ {
+ startElement(name);
+ endElement(name);
+ }
+
+ void TagLogger::startElement(const string & name)
+ {
+ XMLTag::Pointer_t pTag(new XMLTag(name));
+ currentTag()->addTag(pTag);
+ mTags.push(pTag);
+ }
+
+ void TagLogger::attribute(const string & name, const string & value)
+ {
+ currentTag()->addAttr(name, value);
+ }
+
+ void TagLogger::attribute(const string & name, const ::rtl::OUString & value)
+ {
+ attribute(name, OUStringToOString(value, RTL_TEXTENCODING_ASCII_US).getStr());
+ }
+
+ void TagLogger::addTag(XMLTag::Pointer_t pTag)
+ {
+ currentTag()->addTag(pTag);
+ }
+
+ void TagLogger::chars(const string & rChars)
+ {
+ currentTag()->chars(xmlify(rChars));
+ }
+
+ void TagLogger::chars(const ::rtl::OUString & rChars)
+ {
+ chars(OUStringToOString(rChars, RTL_TEXTENCODING_ASCII_US).getStr());
+ }
+
+ void TagLogger::endElement(const string & name)
+ {
+ string nameRemoved;
+ bool found = false;
+ do
+ {
+ nameRemoved = currentTag()->getTag();
+ mTags.pop();
+
+ if (name == nameRemoved)
+ found = true;
+ else
+ found = false; // for debugging
+ }
+ while (! found && ! mTags.empty());
+ }
+
+ void TagLogger::endDocument()
+ {
+ mTags.pop();
+ }
+
+ ostream & TagLogger::output(ostream & o) const
+ {
+ return currentTag()->output(o);
+ }
+
+ void TagLogger::dump(const char * name)
+ {
+ TagLoggerHashMap_t::iterator aIt(tagLoggers->find(name));
+ if (aIt != tagLoggers->end())
+ {
+ string fileName;
+ char * temp = getenv("TAGLOGGERTMP");
+
+ if (temp != NULL)
+ fileName += temp;
+ else
+ fileName += "/tmp";
+
+ fileName += "/writerfilter.";
+ fileName += name;
+ fileName += ".tmp";
+
+ ofstream dumpStream(fileName.c_str());
+ aIt->second->output(dumpStream);
+ }
+ }
+
+ PropertySetToTagHandler::~PropertySetToTagHandler()
+ {
+ }
+
+ void PropertySetToTagHandler::resolve
+ (XMLTag & rTag, writerfilter::Reference<Properties>::Pointer_t pProps)
+ {
+ if (pProps.get() != NULL)
+ {
+ PropertySetToTagHandler aHandler(mpIdToString);
+ pProps->resolve(aHandler);
+ rTag.addTag(aHandler.getTag());
+ }
+ }
+
+ void PropertySetToTagHandler::attribute(Id name, Value & val)
+ {
+ XMLTag::Pointer_t pTag(new XMLTag("attribute"));
+
+ pTag->addAttr("name", (*QNameToString::Instance())(name));
+ pTag->addAttr("value", val.toString());
+
+ resolve(*pTag, val.getProperties());
+
+ mpTag->addTag(pTag);
+ }
+
+ void PropertySetToTagHandler::sprm(Sprm & rSprm)
+ {
+ XMLTag::Pointer_t pTag(new XMLTag("sprm"));
+
+ string sName;
+
+ if (mpIdToString != IdToString::Pointer_t())
+ sName = mpIdToString->toString(rSprm.getId());
+
+ pTag->addAttr("name", sName);
+
+ static char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer),
+ "0x%" SAL_PRIxUINT32 "x, %" SAL_PRIxUINT32 "d", rSprm.getId(),
+ rSprm.getId());
+ pTag->addAttr("id", sBuffer);
+ pTag->addAttr("value", rSprm.getValue()->toString());
+
+ resolve(*pTag, rSprm.getProps());
+
+ mpTag->addTag(pTag);
+ }
+
+
+}
diff --git a/writerfilter/source/resourcemodel/WW8Analyzer.cxx b/writerfilter/source/resourcemodel/WW8Analyzer.cxx
new file mode 100644
index 000000000000..75691b5f1483
--- /dev/null
+++ b/writerfilter/source/resourcemodel/WW8Analyzer.cxx
@@ -0,0 +1,216 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <WW8Analyzer.hxx>
+#include <doctok/resourceids.hxx>
+#include <resourcemodel/QNameToString.hxx>
+
+namespace writerfilter
+{
+bool eqSalUInt32::operator () (sal_uInt32 n1, sal_uInt32 n2) const
+{
+ return n1 == n2;
+}
+
+WW8Analyzer::WW8Analyzer()
+{
+}
+
+WW8Analyzer::~WW8Analyzer()
+{
+ dumpStats(cout);
+}
+
+void WW8Analyzer::attribute(Id name, Value & val)
+{
+ string aAttrName = (*QNameToString::Instance())(name);
+ string aStr;
+
+ if (aAttrName.length() > 6)
+ aStr = aAttrName.substr(4, 2);
+ else
+ logger("DEBUG", "WW8Analyzer::attribute:" + aAttrName);
+
+ bool bAdd = false;
+ if (aStr.compare("LC") == 0 || aStr.compare("FC") == 0)
+ {
+ if (val.getInt() != 0)
+ {
+ bAdd = true;
+ }
+ }
+ else
+ {
+ bAdd = true;
+ }
+
+ if (bAdd)
+ {
+ if (mAttributeMap.count(name) > 0)
+ {
+ sal_uInt32 nCount = mAttributeMap[name] + 1;
+ mAttributeMap[name] = nCount;
+ }
+ else
+ mAttributeMap[name] = 1;
+
+ mAttributeIdSet.insert(name);
+ }
+}
+
+void WW8Analyzer::sprm(Sprm & sprm_)
+{
+ if (mSprmMap.count(sprm_.getId()) > 0)
+ {
+ sal_uInt32 nCount = mSprmMap[sprm_.getId()] + 1;
+ mSprmMap[sprm_.getId()] = nCount;
+ }
+ else
+ mSprmMap[sprm_.getId()] = 1;
+
+ mSprmIdSet.insert(sprm_.getId());
+
+ writerfilter::Reference<Properties>::Pointer_t pProps = sprm_.getProps();
+
+ if (pProps.get() != NULL)
+ {
+ pProps->resolve(*this);
+ }
+
+}
+
+void WW8Analyzer::entry(int /*pos*/, ::writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ ref->resolve(*this);
+}
+
+void WW8Analyzer::data(const sal_uInt8 * /*buf*/, size_t /*len*/,
+ ::writerfilter::Reference<Properties>::Pointer_t /*ref*/)
+{
+}
+
+void WW8Analyzer::startSectionGroup()
+{
+}
+
+void WW8Analyzer::endSectionGroup()
+{
+}
+
+void WW8Analyzer::startParagraphGroup()
+{
+}
+
+void WW8Analyzer::endParagraphGroup()
+{
+}
+
+void WW8Analyzer::startCharacterGroup()
+{
+}
+
+void WW8Analyzer::endCharacterGroup()
+{
+}
+
+void WW8Analyzer::text(const sal_uInt8 * /*data*/, size_t /*len*/)
+{
+}
+
+void WW8Analyzer::utext(const sal_uInt8 * /*data*/, size_t /*len*/)
+{
+}
+
+void WW8Analyzer::props(writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ ref->resolve(*this);
+}
+
+void WW8Analyzer::table(Id /*id*/, writerfilter::Reference<Table>::Pointer_t ref)
+{
+ ref->resolve(*this);
+}
+
+void WW8Analyzer::substream(Id /*name*/,
+ writerfilter::Reference<Stream>::Pointer_t ref)
+{
+ ref->resolve(*this);
+}
+
+void WW8Analyzer::info(const string & /*info*/)
+{
+}
+
+void WW8Analyzer::startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > /*xShape*/ )
+{
+}
+
+void WW8Analyzer::endShape( )
+{
+}
+
+void WW8Analyzer::dumpStats(ostream & o) const
+{
+ {
+ for (IdSet::const_iterator aIt = mSprmIdSet.begin();
+ aIt != mSprmIdSet.end(); aIt++)
+ {
+ sal_uInt32 aId = *aIt;
+
+ o << "<sprm>" << endl
+ << "<id>" << hex << aId << "</id>" << endl
+ << "<name>" << (*SprmIdToString::Instance())(aId)
+ << "</name>" << endl
+ << "<count>" << dec << mSprmMap[aId] << "</count>"
+ << endl
+ << "</sprm>" << endl;
+ }
+ }
+
+ {
+ for (IdSet::const_iterator aIt = mAttributeIdSet.begin();
+ aIt != mAttributeIdSet.end(); aIt++)
+ {
+ sal_uInt32 aId = *aIt;
+
+ o << "<attribute>" << endl
+ << "<name>" << (*QNameToString::Instance())(aId) << "</name>"
+ << endl
+ << "<count>" << dec << mAttributeMap[aId] << "</count>"
+ << endl
+ << "</attribute>" << endl;
+ }
+ }
+
+}
+
+Stream::Pointer_t createAnalyzer()
+{
+ return Stream::Pointer_t(new WW8Analyzer());
+}
+
+}
diff --git a/writerfilter/source/resourcemodel/WW8Analyzer.hxx b/writerfilter/source/resourcemodel/WW8Analyzer.hxx
new file mode 100644
index 000000000000..a2fc9e4d4b3d
--- /dev/null
+++ b/writerfilter/source/resourcemodel/WW8Analyzer.hxx
@@ -0,0 +1,99 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_ANALYZER_HXX
+#define INCLUDED_WW8_ANALYZER_HXX
+
+#include <resourcemodel/WW8ResourceModel.hxx>
+
+#include <hash_set>
+#include <map>
+
+namespace writerfilter
+{
+using namespace std;
+
+struct eqSalUInt32
+{
+ bool operator () (sal_uInt32 n1, sal_uInt32 n2) const;
+};
+
+class WW8Analyzer : public Properties, public Table,
+ public BinaryObj, public Stream
+{
+ typedef map<sal_uInt32, sal_uInt32> SprmMap;
+
+ typedef hash_set<sal_uInt32, hash<sal_uInt32>, eqSalUInt32> IdSet;
+ typedef map<Id, sal_uInt32> AttributeMap;
+
+ mutable SprmMap mSprmMap;
+ IdSet mSprmIdSet;
+ mutable AttributeMap mAttributeMap;
+ IdSet mAttributeIdSet;
+
+public:
+ WW8Analyzer();
+ virtual ~WW8Analyzer();
+
+ // Properties
+
+ virtual void attribute(Id Name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ // Table
+
+ virtual void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
+ // BinaryObj
+
+ virtual void data(const sal_uInt8* buf, size_t len,
+ writerfilter::Reference<Properties>::Pointer_t ref);
+
+ // Stream
+
+ virtual void startSectionGroup();
+ virtual void endSectionGroup();
+ virtual void startParagraphGroup();
+ virtual void endParagraphGroup();
+ virtual void startCharacterGroup();
+ virtual void endCharacterGroup();
+ virtual void text(const sal_uInt8 * data, size_t len);
+ virtual void utext(const sal_uInt8 * data, size_t len);
+ virtual void props(writerfilter::Reference<Properties>::Pointer_t ref);
+ virtual void table(Id name,
+ writerfilter::Reference<Table>::Pointer_t ref);
+ virtual void substream(Id name,
+ writerfilter::Reference<Stream>::Pointer_t ref);
+ virtual void info(const string & info);
+ virtual void startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
+ virtual void endShape( );
+
+ void dumpStats(ostream & o) const;
+};
+}
+
+#endif // INCLUDED_WW8_ANALYZER_HXX
diff --git a/writerfilter/source/resourcemodel/analyzerfooter b/writerfilter/source/resourcemodel/analyzerfooter
new file mode 100644
index 000000000000..b24a23641b2f
--- /dev/null
+++ b/writerfilter/source/resourcemodel/analyzerfooter
@@ -0,0 +1,4 @@
+ out << "</ids>" << endl;
+}
+
+}
diff --git a/writerfilter/source/resourcemodel/analyzerheader b/writerfilter/source/resourcemodel/analyzerheader
new file mode 100644
index 000000000000..1b4e2674ffab
--- /dev/null
+++ b/writerfilter/source/resourcemodel/analyzerheader
@@ -0,0 +1,36 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#include <resourcemodel/QNameToString.hxx>
+
+namespace writerfilter
+{
+void analyzerIds(::std::iostream & out)
+{
+ out << "<ids>" << endl;
diff --git a/writerfilter/source/resourcemodel/genqnametostr b/writerfilter/source/resourcemodel/genqnametostr
new file mode 100755
index 000000000000..12bad07b9b85
--- /dev/null
+++ b/writerfilter/source/resourcemodel/genqnametostr
@@ -0,0 +1,35 @@
+#!/bin/tcsh
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+
+cat qnametostrheader > qnametostr.cxx
+cat ../doctok/qnametostr.tmp >> qnametostr.cxx
+cat ../ooxml/qnametostr.tmp >> qnametostr.cxx
+cat qnametostrfooter >> qnametostr.cxx
+cat sprmcodetostrheader > sprmcodetostr.cxx
+cat ../doctok/sprmcodetostr.tmp >> sprmcodetostr.cxx
+echo "}" >> sprmcodetostr.cxx
diff --git a/writerfilter/source/resourcemodel/makefile.mk b/writerfilter/source/resourcemodel/makefile.mk
new file mode 100644
index 000000000000..52f89cf2dc7f
--- /dev/null
+++ b/writerfilter/source/resourcemodel/makefile.mk
@@ -0,0 +1,189 @@
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+
+PRJ=..$/..
+PRJNAME=writerfilter
+TARGET=resourcemodel
+#LIBTARGET=NO
+#USE_DEFFILE=TRUE
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/inc$/writerfilter.mk
+
+#CFLAGS+=-DISOLATION_AWARE_ENABLED -DWIN32_LEAN_AND_MEAN -DXML_UNICODE -D_NTSDK -DUNICODE -D_UNICODE -D_WIN32_WINNT=0x0501
+#CFLAGS+=-wd4710 -wd4711 -wd4514 -wd4619 -wd4217 -wd4820
+CDEFS+=-DWRITERFILTER_DLLIMPLEMENTATION
+
+
+# --- Files --------------------------------------------------------
+
+# work around gcc taking hours and/or OOM'ing on this file
+NOOPTFILES= \
+ $(SLO)$/qnametostr.obj
+
+SLOFILES= \
+ $(SLO)$/qnametostr.obj \
+ $(SLO)$/sprmcodetostr.obj \
+ $(SLO)$/resourcemodel.obj \
+ $(SLO)$/util.obj \
+ $(SLO)$/TagLogger.obj \
+ $(SLO)$/WW8Analyzer.obj
+
+# linux 64 bit: compiler (gcc 4.2.3) fails with 'out of memory'
+.IF "$(OUTPATH)"=="unxlngx6"
+NOOPTFILES= \
+ $(SLO)$/qnametostr.obj
+.ENDIF
+
+SHL1TARGET=$(TARGET)
+
+.IF "$(GUI)"=="UNX" || "$(GUI)"=="MAC"
+RTFTOKLIB=-lrtftok
+DOCTOKLIB=-ldoctok
+OOXMLLIB=-looxml
+.ELIF "$(GUI)"=="WNT"
+RTFTOKLIB=$(LB)$/irtftok.lib
+DOCTOKLIB=$(LB)$/idoctok.lib
+OOXMLLIB=$(LB)$/iooxml.lib
+.ENDIF
+
+SHL1STDLIBS=$(SALLIB)\
+ $(CPPULIB)\
+ $(CPPUHELPERLIB) \
+ $(COMPHELPERLIB)
+
+SHL1IMPLIB=i$(SHL1TARGET)
+SHL1USE_EXPORTS=name
+
+SHL1OBJS=$(SLOFILES)
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+DEF1NAME=$(SHL1TARGET)
+DEFLIB1NAME=$(TARGET)
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+RESOURCEMODELCXXOUTDIR=$(MISC)
+DOCTOKHXXOUTDIR=$(INCCOM)$/doctok
+OOXMLHXXOUTDIR=$(INCCOM)$/ooxml
+
+DOCTOKHXXOUTDIRCREATED=$(DOCTOKHXXOUTDIR)$/created
+OOXMLHXXOUTDIRCREATED=$(OOXMLHXXOUTDIR)$/created
+
+OOXMLMODEL=..$/ooxml$/model.xml
+OOXMLPREPROCESSXSL=..$/ooxml$/modelpreprocess.xsl
+OOXMLQNAMETOSTRXSL=..$/ooxml$/qnametostr.xsl
+OOXMLANALYZERXSL=..$/ooxml$/analyzer.xsl
+OOXMLRESOURCEIDSXSL=..$/ooxml$/resourceids.xsl
+OOXMLRESOURCESTOOLSXSL=..$/ooxml$/resourcestools.xsl
+DOCTOKMODEL=..$/doctok$/resources.xmi
+DOCTOKQNAMETOSTRXSL=..$/doctok$/qnametostr.xsl
+DOCTOKANALYZERXSL=..$/doctok$/analyzer.xsl
+DOCTOKSPRMCODETOSTRXSL=..$/doctok$/sprmcodetostr.xsl
+DOCTOKRESOURCEIDSXSL=..$/doctok$/resourceids.xsl
+DOCTOKSPRMIDSXSL=..$/doctok$/sprmids.xsl
+DOCTOKRESOURCETOOLS=..$/doctok$/resourcetools.xsl
+
+MODELPROCESSED=$(MISC)$/model_preprocessed.xml
+
+QNAMETOSTRCXX=$(RESOURCEMODELCXXOUTDIR)$/qnametostr.cxx
+OOXMLQNAMETOSTRTMP=$(RESOURCEMODELCXXOUTDIR)$/OOXMLqnameToStr.tmp
+DOCTOKQNAMETOSTRTMP=$(RESOURCEMODELCXXOUTDIR)$/DOCTOKqnameToStr.tmp
+SPRMCODETOSTRCXX=$(RESOURCEMODELCXXOUTDIR)$/sprmcodetostr.cxx
+SPRMCODETOSTRTMP=$(RESOURCEMODELCXXOUTDIR)$/sprmcodetostr.tmp
+DOCTOKRESOURCEIDSHXX=$(DOCTOKHXXOUTDIR)$/resourceids.hxx
+SPRMIDSHXX=$(DOCTOKHXXOUTDIR)$/sprmids.hxx
+OOXMLRESOURCEIDSHXX=$(OOXMLHXXOUTDIR)$/resourceids.hxx
+
+GENERATEDHEADERS=$(DOCTOKRESOURCEIDSHXX) $(OOXMLRESOURCEIDSHXX) $(SPRMIDSHXX)
+GENERATEDFILES= \
+ $(GENERATEDHEADERS) \
+ $(QNAMETOSTRCXX) \
+ $(SPRMCODETOSTRCXX) \
+ $(MODELPROCESSED) \
+ $(OOXMLQNAMETOSTRTMP) \
+ $(DOCTOKQNAMETOSTRTMP) \
+ $(SPRMCODETOSTRTMP)
+
+$(OOXMLQNAMETOSTRTMP): $(OOXMLQNAMETOSTRXSL) $(MODELPROCESSED)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(OOXMLQNAMETOSTRXSL:s!\!/!) $(MODELPROCESSED) > $@
+
+$(DOCTOKQNAMETOSTRTMP): $(DOCTOKQNAMETOSTRXSL) $(DOCTOKMODEL)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(DOCTOKQNAMETOSTRXSL:s!\!/!) $(DOCTOKMODEL) > $@
+
+$(QNAMETOSTRCXX): $(OOXMLQNAMETOSTRTMP) $(DOCTOKQNAMETOSTRTMP) qnametostrheader qnametostrfooter $(OOXMLRESOURCESTOOLSXSL) $(DOCTOKRESOURCETOOLS)
+ @$(TYPE) qnametostrheader $(OOXMLQNAMETOSTRTMP) $(DOCTOKQNAMETOSTRTMP) qnametostrfooter > $@
+$(SPRMCODETOSTRTMP): $(DOCTOKSPRMCODETOSTRXSL) $(DOCTOKMODEL)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(DOCTOKSPRMCODETOSTRXSL:s!\!/!) $(DOCTOKMODEL) > $@
+
+$(SPRMCODETOSTRCXX): sprmcodetostrheader $(SPRMCODETOSTRTMP) sprmcodetostrfooter
+ @$(TYPE) $< > $@
+
+$(SLO)$/sprmcodetostr.obj: $(SPRMCODETOSTRCXX)
+$(SLO)$/qnametostr.obj: $(QNAMETOSTRCXX)
+
+$(SLOFILES): $(GENERATEDHEADERS)
+
+$(DOCTOKHXXOUTDIRCREATED):
+ @$(MKDIRHIER) $(DOCTOKHXXOUTDIR)
+ @$(TOUCH) $@
+
+$(DOCTOKRESOURCEIDSHXX): $(DOCTOKHXXOUTDIRCREATED) $(DOCTOKRESOURCETOOLS) $(DOCTOKRESOURCEIDSXSL)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(DOCTOKRESOURCEIDSXSL:s!\!/!) $(DOCTOKMODEL) > $@
+
+$(OOXMLHXXOUTDIRCREATED):
+ @$(MKDIRHIER) $(OOXMLHXXOUTDIR)
+ @$(TOUCH) $@
+
+$(MODELPROCESSED): $(OOXMLMODEL) $(OOXMLRESOURCESTOOLSXSL) $(OOXMLPREPROCESSXSL)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(OOXMLPREPROCESSXSL:s!\!/!) $(OOXMLMODEL) > $@
+
+$(OOXMLRESOURCEIDSHXX): $(OOXMLHXXOUTDIRCREATED) $(OOXMLRESOURCESTOOLSXSL) $(OOXMLRESOURCEIDSXSL) $(MODELPROCESSED)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(OOXMLRESOURCEIDSXSL:s!\!/!) $(MODELPROCESSED) > $@
+
+$(SPRMIDSHXX): $(DOCTOKHXXOUTDIRCREATED) $(DOCTOKSPRMIDSXSL) $(DOCTOKMODEL)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(DOCTOKSPRMIDSXSL:s!\!/!) $(DOCTOKMODEL) > $@
+
+.PHONY: genclean genmake gendirs
+
+genclean:
+ @rm -f $(GENERATEDFILES)
+
+genmake: $(GENERATEDFILES)
+
diff --git a/writerfilter/source/resourcemodel/qnametostrfooter b/writerfilter/source/resourcemodel/qnametostrfooter
new file mode 100644
index 000000000000..d0af0f6fa30f
--- /dev/null
+++ b/writerfilter/source/resourcemodel/qnametostrfooter
@@ -0,0 +1,24 @@
+QNameToString::QNameToString()
+{
+ init_doctok();
+ init_ooxml();
+}
+
+void WRITERFILTER_DLLPUBLIC analyzerIds()
+{
+ cout << "<ids type=\"sprm\">" << endl;
+
+ sprmidsToXML(cout);
+ ooxmlsprmidsToXML(cout);
+
+ cout << "</ids>" << endl;
+
+ cout << "<ids type=\"attribute\">" << endl;
+
+ doctokidsToXML(cout);
+ ooxmlidsToXML(cout);
+
+ cout << "</ids>" << endl;
+}
+
+}
diff --git a/writerfilter/source/resourcemodel/qnametostrheader b/writerfilter/source/resourcemodel/qnametostrheader
new file mode 100644
index 000000000000..6cbd0b3fec10
--- /dev/null
+++ b/writerfilter/source/resourcemodel/qnametostrheader
@@ -0,0 +1,57 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#include <resourcemodel/QNameToString.hxx>
+#include <stdio.h>
+
+namespace writerfilter
+{
+
+QNameToString::Pointer_t QNameToString::pInstance;
+
+QNameToString::Pointer_t WRITERFILTER_DLLPUBLIC QNameToString::Instance()
+{
+ if (pInstance.get() == NULL)
+ pInstance = QNameToString::Pointer_t(new QNameToString());
+
+ return pInstance;
+}
+
+string WRITERFILTER_DLLPUBLIC QNameToString::operator()(Id qName)
+{
+ string sResult;
+
+ Map::const_iterator aIt = mMap.find(qName);
+
+ if (aIt != mMap.end())
+ sResult = aIt->second;
+
+ return mMap[qName];
+}
+
diff --git a/writerfilter/source/resourcemodel/resourcemodel.cxx b/writerfilter/source/resourcemodel/resourcemodel.cxx
new file mode 100644
index 000000000000..9b45834c5ce3
--- /dev/null
+++ b/writerfilter/source/resourcemodel/resourcemodel.cxx
@@ -0,0 +1,569 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <stdio.h>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/TableManager.hxx>
+#include <resourcemodel/QNameToString.hxx>
+#include <resourcemodel/exceptions.hxx>
+#include <resourcemodel/SubSequence.hxx>
+#include <resourcemodel/util.hxx>
+#include <resourcemodel.hxx>
+
+namespace writerfilter {
+
+class ResourceModelOutputWithDepth : public OutputWithDepth<string>
+{
+public:
+ ResourceModelOutputWithDepth()
+ : OutputWithDepth<string>("<tablegroup>", "</tablegroup>") {}
+
+ ~ResourceModelOutputWithDepth() {outputGroup();}
+
+ void output(const string & str) const { cout << str << endl; }
+};
+
+ResourceModelOutputWithDepth output;
+
+Stream::Pointer_t createStreamHandler()
+{
+ return Stream::Pointer_t(new WW8StreamHandler());
+}
+
+void dump(OutputWithDepth<string> & /*o*/, const char * /*name*/,
+ writerfilter::Reference<Properties>::Pointer_t /*props*/)
+{
+}
+
+void dump(OutputWithDepth<string> & o, const char * name, sal_uInt32 n)
+{
+ char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), "%" SAL_PRIuUINT32, n);
+ string tmpStr = name;
+ tmpStr += "=";
+ tmpStr += sBuffer;
+
+ o.addItem(tmpStr);
+}
+
+void dump(OutputWithDepth<string> & /*o*/, const char * /*name*/,
+ const rtl::OUString & /*str*/)
+{
+}
+
+void dump(OutputWithDepth<string> & /*o*/, const char * /*name*/,
+ writerfilter::Reference<BinaryObj>::Pointer_t /*binary*/)
+{
+}
+
+string gInfo = "";
+// ------- WW8TableDataHandler ---------
+
+class TablePropsRef : public writerfilter::Reference<Properties>
+{
+public:
+ typedef boost::shared_ptr<TablePropsRef> Pointer_t;
+
+ TablePropsRef() {}
+ virtual ~TablePropsRef() {}
+
+ virtual void resolve(Properties & /*rHandler*/) {}
+
+ virtual string getType() const { return "TableProps"; }
+ void reset() {}
+ void insert(Pointer_t /* pTablePropsRef */) {}
+};
+
+typedef TablePropsRef::Pointer_t TablePropsRef_t;
+
+class WW8TableDataHandler : public TableDataHandler<string,
+ TablePropsRef_t>
+{
+public:
+ typedef boost::shared_ptr<WW8TableDataHandler> Pointer_t;
+ virtual void startTable(unsigned int nRows, unsigned int nDepth,
+ TablePropsRef_t pProps);
+ virtual void endTable();
+ virtual void startRow(unsigned int nCols,
+ TablePropsRef_t pProps);
+ virtual void endRow();
+ virtual void startCell(const string & start, TablePropsRef_t pProps);
+ virtual void endCell(const string & end);
+};
+
+void WW8TableDataHandler::startTable(unsigned int nRows, unsigned int nDepth,
+ TablePropsRef_t /*pProps*/)
+{
+ char sBuffer[256];
+
+ string tmpStr = "<tabledata.table rows=\"";
+ snprintf(sBuffer, sizeof(sBuffer), "%d", nRows);
+ tmpStr += sBuffer;
+ tmpStr += "\" depth=\"";
+ snprintf(sBuffer, sizeof(sBuffer), "%d", nDepth);
+ tmpStr += sBuffer;
+ tmpStr += "\">";
+
+ output.addItem(tmpStr);
+}
+
+void WW8TableDataHandler::endTable()
+{
+ output.addItem("</tabledata.table>");
+}
+
+void WW8TableDataHandler::startRow
+(unsigned int nCols, TablePropsRef_t /*pProps*/)
+{
+ char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer), "%d", nCols);
+ string tmpStr = "<tabledata.row cells=\"";
+ tmpStr += sBuffer;
+ tmpStr += "\">";
+ output.addItem(tmpStr);
+}
+
+void WW8TableDataHandler::endRow()
+{
+ output.addItem("</tabledata.row>");
+}
+
+void WW8TableDataHandler::startCell(const string & start,
+ TablePropsRef_t /*pProps*/)
+{
+ output.addItem("<tabledata.cell>");
+ output.addItem(start);
+ output.addItem(", ");
+}
+
+void WW8TableDataHandler::endCell(const string & end)
+{
+ output.addItem(end);
+ output.addItem("</tabledata.cell>");
+}
+
+// ----- WW8TableDataManager -------------------------------
+
+class WW8TableManager :
+ public TableManager<string, TablePropsRef_t>
+{
+ typedef TableDataHandler<string, TablePropsRef_t>
+ TableDataHandlerPointer_t;
+
+public:
+ WW8TableManager();
+ virtual ~WW8TableManager() {}
+ virtual void endParagraphGroup();
+ virtual bool sprm(Sprm & rSprm);
+};
+
+WW8TableManager::WW8TableManager()
+{
+ TableDataHandler<string, TablePropsRef_t>::Pointer_t pHandler(new WW8TableDataHandler());
+ setHandler(pHandler);
+}
+
+bool WW8TableManager::sprm(Sprm & rSprm)
+{
+ TableManager<string, TablePropsRef_t>::sprm(rSprm);
+ output.setDepth(getTableDepthNew());
+ return true;
+}
+
+void WW8TableManager::endParagraphGroup()
+{
+ string tmpStr = "<tabledepth depth=\"";
+ char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), "%" SAL_PRIuUINT32, getTableDepthNew());
+ tmpStr += sBuffer;
+ tmpStr += "\"/>";
+ output.addItem(tmpStr);
+ TableManager<string, TablePropsRef_t>::endParagraphGroup();
+}
+
+WW8TableManager gTableManager;
+
+/* WW8StreamHandler */
+
+WW8StreamHandler::WW8StreamHandler()
+: mnUTextCount(0)
+{
+ output.closeGroup();
+ output.addItem("<stream>");
+ gTableManager.startLevel();
+}
+
+WW8StreamHandler::~WW8StreamHandler()
+{
+ gTableManager.endLevel();
+
+ output.closeGroup();
+ output.addItem("</stream>");
+}
+
+void WW8StreamHandler::startSectionGroup()
+{
+ output.addItem("<section-group>");
+}
+
+void WW8StreamHandler::endSectionGroup()
+{
+ output.addItem("</section-group>");
+}
+
+void WW8StreamHandler::startParagraphGroup()
+{
+ output.openGroup();
+ output.addItem("<paragraph-group>");
+
+ gTableManager.startParagraphGroup();
+ gTableManager.handle(gInfo);
+}
+
+void WW8StreamHandler::endParagraphGroup()
+{
+ gTableManager.endParagraphGroup();
+
+ output.addItem("</paragraph-group>");
+ output.closeGroup();
+
+}
+
+void WW8StreamHandler::startCharacterGroup()
+{
+ output.addItem("<character-group>");
+}
+
+void WW8StreamHandler::endCharacterGroup()
+{
+ output.addItem("</character-group>");
+}
+
+void WW8StreamHandler::startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > /*xShape*/ )
+{
+ output.addItem("<shape>");
+}
+
+void WW8StreamHandler::endShape( )
+{
+ output.addItem( "</shape>" );
+}
+
+void WW8StreamHandler::text(const sal_uInt8 * data, size_t len)
+{
+ string tmpStr = "<text>";
+
+ for (unsigned int n = 0; n < len; ++n)
+ {
+ switch (static_cast<unsigned char>(data[n]))
+ {
+ case '<':
+ tmpStr += "&lt;";
+
+ break;
+ case '>':
+ tmpStr += "&gt;";
+
+ break;
+
+ case '&':
+ tmpStr += "&amp;";
+
+ break;
+ default:
+ if (isprint(data[n]))
+ tmpStr += static_cast<char>(data[n]);
+ else
+ {
+ char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer), "\\0x%02x", data[n]);
+
+ tmpStr += sBuffer;
+ }
+ }
+ }
+
+ tmpStr += "</text>";
+
+ output.addItem(tmpStr);
+
+ gTableManager.text(data, len);
+}
+
+void WW8StreamHandler::utext(const sal_uInt8 * data, size_t len)
+{
+ static char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), "<utext count=\"%d\">", mnUTextCount);
+ string tmpStr(sBuffer);
+
+ for (unsigned int n = 0; n < len; ++n)
+ {
+ sal_Unicode nChar = data[n * 2] + (data[n * 2 + 1] << 8);
+ if (nChar < 0xff && isprint(nChar))
+ {
+ switch (nChar)
+ {
+ case '&':
+ tmpStr += "&amp;";
+ break;
+ case '<':
+ tmpStr += "&lt;";
+ break;
+ case '>':
+ tmpStr += "&gt;";
+ break;
+ default:
+ tmpStr += static_cast<char>(nChar);
+ }
+ }
+ else
+ {
+ snprintf(sBuffer, sizeof(sBuffer), "\\0x%04x", nChar);
+
+ tmpStr += sBuffer;
+ }
+ }
+
+ tmpStr += "</utext>";
+
+ output.addItem(tmpStr);
+
+ gTableManager.utext(data, len);
+
+ mnUTextCount++;
+}
+
+void WW8StreamHandler::props(writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ WW8PropertiesHandler aHandler;
+
+ output.addItem("<properties type=\"" + ref->getType() + "\">");
+ ref->resolve(aHandler);
+
+ //gTableManager.props(ref);
+
+ output.addItem("</properties>");
+}
+
+void WW8StreamHandler::table(Id name, writerfilter::Reference<Table>::Pointer_t ref)
+{
+ WW8TableHandler aHandler;
+
+ output.addItem("<table id=\"" + (*QNameToString::Instance())(name)
+ + "\">");
+
+ try
+ {
+ ref->resolve(aHandler);
+ }
+ catch (Exception e)
+ {
+ output.addItem("<exception>" + e.getText() + "</exception>");
+ }
+
+ output.addItem("</table>");
+}
+
+void WW8StreamHandler::substream(Id name,
+ writerfilter::Reference<Stream>::Pointer_t ref)
+{
+ output.addItem("<substream name=\"" + (*QNameToString::Instance())(name)
+ + "\">");
+
+ gTableManager.startLevel();
+
+ ref->resolve(*this);
+
+ gTableManager.endLevel();
+
+ output.addItem("</substream>");
+}
+
+void WW8StreamHandler::info(const string & info_)
+{
+ gInfo = info_;
+ output.addItem("<info>" + info_ + "</info>");
+}
+
+void WW8PropertiesHandler::attribute(Id name, Value & val)
+{
+ boost::shared_ptr<rtl::OString> pStr(new ::rtl::OString());
+ ::rtl::OUString aStr = val.getString();
+ aStr.convertToString(pStr.get(), RTL_TEXTENCODING_ASCII_US,
+ OUSTRING_TO_OSTRING_CVTFLAGS);
+ string sXMLValue = xmlify(pStr->getStr());
+
+ char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), "0x%x", val.getInt());
+
+ output.addItem("<attribute name=\"" +
+ (*QNameToString::Instance())(name) +
+ "\" value=\"" +
+ sXMLValue +
+ + "\" hexvalue=\""
+ + sBuffer + "\">");
+
+ writerfilter::Reference<Properties>::Pointer_t pProps = val.getProperties();
+
+ if (pProps.get() != NULL)
+ {
+ output.addItem("<properties name=\"" +
+ (*QNameToString::Instance())(name)
+ + "\" type=\"" + pProps->getType() + "\">");
+
+ try
+ {
+ pProps->resolve(*this);
+ }
+ catch (ExceptionOutOfBounds e)
+ {
+ }
+
+ output.addItem("</properties>");
+ }
+
+ writerfilter::Reference<Stream>::Pointer_t pStream = val.getStream();
+
+ if (pStream.get() != NULL)
+ {
+ try
+ {
+ WW8StreamHandler aHandler;
+
+ pStream->resolve(aHandler);
+ }
+ catch (ExceptionOutOfBounds e)
+ {
+ }
+ }
+
+ writerfilter::Reference<BinaryObj>::Pointer_t pBinObj = val.getBinary();
+
+ if (pBinObj.get() != NULL)
+ {
+ try
+ {
+ WW8BinaryObjHandler aHandler;
+
+ pBinObj->resolve(aHandler);
+ }
+ catch (ExceptionOutOfBounds e)
+ {
+ }
+ }
+
+ output.addItem("</attribute>");
+}
+
+bool WW8PropertiesHandler::compare(SprmSharedPointer_t sprm1,
+ SprmSharedPointer_t sprm2)
+{
+ return sprm1->getId() < sprm2->getId();
+}
+
+void WW8PropertiesHandler::sprm(Sprm & sprm_)
+{
+ string tmpStr = "<sprm id=\"";
+ char buffer[256];
+ snprintf(buffer, sizeof(buffer), "0x%" SAL_PRIxUINT32, sprm_.getId());
+ tmpStr += buffer;
+ tmpStr += "\" name=\"";
+ tmpStr += sprm_.getName();
+ tmpStr += "\">";
+ output.addItem(tmpStr);
+ output.addItem(sprm_.toString());
+
+ writerfilter::Reference<Properties>::Pointer_t pProps = sprm_.getProps();
+
+ if (pProps.get() != NULL)
+ {
+ output.addItem("<properties type=\"" + pProps->getType() + "\">");
+ pProps->resolve(*this);
+ output.addItem("</properties>");
+ }
+
+ writerfilter::Reference<BinaryObj>::Pointer_t pBinObj = sprm_.getBinary();
+
+ if (pBinObj.get() != NULL)
+ {
+ output.addItem("<binary>");
+ WW8BinaryObjHandler aHandler;
+ pBinObj->resolve(aHandler);
+ output.addItem("</binary>");
+ }
+
+ writerfilter::Reference<Stream>::Pointer_t pStream = sprm_.getStream();
+
+ if (pStream.get() != NULL)
+ {
+ output.addItem("<stream>");
+ WW8StreamHandler aHandler;
+ pStream->resolve(aHandler);
+ output.addItem("</stream>");
+ }
+
+ gTableManager.sprm(sprm_);
+
+ output.addItem("</sprm>");
+}
+
+void WW8TableHandler::entry(int /*pos*/,
+ writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ output.addItem("<tableentry>");
+
+ WW8PropertiesHandler aHandler;
+
+ try
+ {
+ ref->resolve(aHandler);
+ }
+ catch (Exception e)
+ {
+ output.addItem("<exception>" + e.getText() + "</exception>");
+ output.addItem("</tableentry>");
+
+ throw e;
+ }
+
+ output.addItem("</tableentry>");
+}
+
+void WW8BinaryObjHandler::data
+(const sal_uInt8 * buf, size_t length,
+ writerfilter::Reference<Properties>::Pointer_t /*pRef*/)
+{
+#if 1
+ SubSequence<sal_uInt8> aSeq(buf, length);
+
+ aSeq.dump(output);
+#endif
+}
+
+}
diff --git a/writerfilter/source/resourcemodel/resourcemodel.hxx b/writerfilter/source/resourcemodel/resourcemodel.hxx
new file mode 100644
index 000000000000..b316f4c912f9
--- /dev/null
+++ b/writerfilter/source/resourcemodel/resourcemodel.hxx
@@ -0,0 +1,112 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <resourcemodel/WW8ResourceModel.hxx>
+
+namespace writerfilter {
+class WW8StreamHandler : public Stream
+{
+ int mnUTextCount;
+
+public:
+ WW8StreamHandler();
+ virtual ~WW8StreamHandler();
+
+ virtual void startSectionGroup();
+ virtual void endSectionGroup();
+ virtual void startParagraphGroup();
+ virtual void endParagraphGroup();
+ virtual void startCharacterGroup();
+ virtual void endCharacterGroup();
+ virtual void text(const sal_uInt8 * data, size_t len);
+ virtual void utext(const sal_uInt8 * data, size_t len);
+
+ virtual void props(writerfilter::Reference<Properties>::Pointer_t ref);
+ virtual void table(Id name,
+ writerfilter::Reference<Table>::Pointer_t ref);
+
+ virtual void startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
+ virtual void endShape( );
+
+ virtual void substream(Id name, writerfilter::Reference<Stream>::Pointer_t ref);
+
+ virtual void info(const string & info);
+};
+
+class WW8PropertiesHandler : public Properties
+{
+ typedef boost::shared_ptr<Sprm> SprmSharedPointer_t;
+ typedef vector<SprmSharedPointer_t> SprmPointers_t;
+ SprmPointers_t sprms;
+
+public:
+ WW8PropertiesHandler()
+ {
+ }
+
+ virtual ~WW8PropertiesHandler()
+ {
+ }
+
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ void dumpSprm(SprmSharedPointer_t sprm);
+ void dumpSprms();
+
+ static bool compare(SprmSharedPointer_t sprm1, SprmSharedPointer_t sprm2);
+};
+
+class WW8BinaryObjHandler : public BinaryObj
+{
+public:
+ WW8BinaryObjHandler()
+ {
+ }
+
+ virtual ~WW8BinaryObjHandler()
+ {
+ }
+
+ virtual void data(const sal_uInt8* buf, size_t len,
+ writerfilter::Reference<Properties>::Pointer_t ref);
+};
+
+class WW8TableHandler : public Table
+{
+public:
+ WW8TableHandler()
+ {
+ }
+
+ virtual ~WW8TableHandler()
+ {
+ }
+
+ void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+};
+
+}
diff --git a/writerfilter/source/resourcemodel/sprmcodetostrfooter b/writerfilter/source/resourcemodel/sprmcodetostrfooter
new file mode 100644
index 000000000000..5c34318c2147
--- /dev/null
+++ b/writerfilter/source/resourcemodel/sprmcodetostrfooter
@@ -0,0 +1 @@
+}
diff --git a/writerfilter/source/resourcemodel/sprmcodetostrheader b/writerfilter/source/resourcemodel/sprmcodetostrheader
new file mode 100644
index 000000000000..ff0663e30bde
--- /dev/null
+++ b/writerfilter/source/resourcemodel/sprmcodetostrheader
@@ -0,0 +1,50 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#include <resourcemodel/QNameToString.hxx>
+#include <doctok/sprmids.hxx>
+
+namespace writerfilter
+{
+
+SprmIdToString::Pointer_t SprmIdToString::pInstance;
+
+SprmIdToString::Pointer_t SprmIdToString::Instance()
+{
+ if (pInstance.get() == NULL)
+ pInstance = SprmIdToString::Pointer_t(new SprmIdToString());
+
+ return pInstance;
+}
+
+string SprmIdToString::operator()(sal_uInt32 nId)
+{
+ return mMap[nId];
+}
+
diff --git a/writerfilter/source/resourcemodel/util.cxx b/writerfilter/source/resourcemodel/util.cxx
new file mode 100644
index 000000000000..b7966f6957ea
--- /dev/null
+++ b/writerfilter/source/resourcemodel/util.cxx
@@ -0,0 +1,400 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <fstream>
+#include <string>
+#include <com/sun/star/awt/Point.hpp>
+#include <com/sun/star/awt/Rectangle.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/drawing/BitmapMode.hpp>
+#include <com/sun/star/drawing/FillStyle.hpp>
+#include <com/sun/star/drawing/HomogenMatrix3.hpp>
+#include <com/sun/star/text/TextContentAnchorType.hpp>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/TagLogger.hxx>
+
+namespace writerfilter
+{
+using namespace com::sun::star;
+using namespace std;
+using text::TextContentAnchorType;
+
+static string & logger_file()
+{
+ static string _logger_file = string(getenv("TEMP")?getenv("TEMP"):"/tmp") + "/writerfilter.ooxml.tmp";
+ return _logger_file;
+}
+
+static ofstream & logger_stream()
+{
+ static ofstream _logger_stream(logger_file().c_str());
+ return _logger_stream;
+}
+
+
+void logger(string prefix, string message)
+{
+ logger_stream() << prefix << ":" << message << endl;
+ logger_stream().flush();
+}
+
+string propertysetToString(uno::Reference<beans::XPropertySet> const & xPropSet)
+{
+ string sResult;
+
+ static int nAttribNames = 9;
+ static string sPropertyAttribNames[9] =
+ {
+ "MAYBEVOID",
+ "BOUND",
+ "CONSTRAINED",
+ "TRANSIENT",
+ "READONLY",
+ "MAYBEAMBIGUOUS",
+ "MAYBEDEFAULT",
+ "REMOVEABLE",
+ "OPTIONAL"
+ };
+
+ static const ::rtl::OUString sMetaFile(RTL_CONSTASCII_USTRINGPARAM("MetaFile"));
+
+ uno::Reference<beans::XPropertySetInfo> xPropSetInfo
+ (xPropSet->getPropertySetInfo());
+
+ if (xPropSetInfo.is())
+ {
+ uno::Sequence<beans::Property> aProps(xPropSetInfo->getProperties());
+
+ sResult +="<propertyset>";
+
+ for (sal_Int32 n = 0; n < aProps.getLength(); n++)
+ {
+ ::rtl::OUString sPropName(aProps[n].Name);
+
+ if (xPropSetInfo->hasPropertyByName(sPropName))
+ {
+ bool bPropertyFound = true;
+ uno::Any aAny;
+ try
+ {
+ if (sPropName == sMetaFile)
+ bPropertyFound = false;
+ else
+ xPropSet->getPropertyValue(sPropName) >>= aAny;
+ }
+ catch (beans::UnknownPropertyException)
+ {
+ bPropertyFound = false;
+ }
+
+ if (bPropertyFound)
+ {
+ sResult += "<property name=\"";
+ sResult += OUStringToOString
+ (sPropName, RTL_TEXTENCODING_ASCII_US).getStr();
+ sResult +="\" type=\"";
+
+ ::rtl::OUString sPropType(aProps[n].Type.getTypeName());
+ sResult += OUStringToOString
+ (sPropType, RTL_TEXTENCODING_ASCII_US).getStr();
+
+ sResult += "\" attribs=\"";
+
+ sal_uInt16 nMask = 1;
+ bool bFirstAttrib = true;
+ sal_uInt16 nAttribs = aProps[n].Attributes;
+ for (int i = 0; i < nAttribNames; i++)
+ {
+ if ((nAttribs & nMask) != 0)
+ {
+ if (bFirstAttrib)
+ bFirstAttrib = false;
+ else
+ sResult += "|";
+
+ sResult += sPropertyAttribNames[i];
+ }
+
+ nMask <<= 1;
+ }
+
+ sResult += "\">";
+
+ char buffer[256];
+ if (sPropType ==
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("byte")))
+ {
+ sal_Int8 nValue = 0;
+ aAny >>= nValue;
+
+ snprintf(buffer, sizeof(buffer), "%d", nValue);
+ sResult += buffer;
+ }
+ if (sPropType ==
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("short")))
+ {
+ sal_Int16 nValue = 0;
+ aAny >>= nValue;
+
+ snprintf(buffer, sizeof(buffer), "%d", nValue);
+ sResult += buffer;
+ }
+ else if (sPropType ==
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("long")))
+ {
+ sal_Int32 nValue = 0;
+ aAny >>= nValue;
+
+ snprintf(buffer, sizeof(buffer), "%" SAL_PRIdINT32, nValue);
+ sResult += buffer;
+ }
+ else if (sPropType ==
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("float")))
+ {
+ float nValue = 0.0;
+ aAny >>= nValue;
+
+ snprintf(buffer, sizeof(buffer), "%f", nValue);
+ sResult += buffer;
+ }
+ else if (sPropType ==
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("double")))
+ {
+ double nValue = 0.0;
+ aAny >>= nValue;
+
+ snprintf(buffer, sizeof(buffer), "%lf", nValue);
+ sResult += buffer;
+ }
+ else if (sPropType ==
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("boolean")))
+ {
+ sal_Bool nValue = sal_False;
+ aAny >>= nValue;
+
+ if (nValue)
+ sResult += "true";
+ else
+ sResult += "false";
+ }
+ else if (sPropType ==
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("string")))
+ {
+ ::rtl::OUString sValue;
+ aAny >>= sValue;
+
+ sResult += OUStringToOString
+ (sValue, RTL_TEXTENCODING_ASCII_US).getStr();
+ }
+ else if (sPropType ==
+ ::rtl::OUString
+ (RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.text.TextContentAnchorType")))
+ {
+ text::TextContentAnchorType nValue;
+ aAny >>= nValue;
+
+ switch (nValue)
+ {
+ case text::TextContentAnchorType_AT_PARAGRAPH:
+ sResult += "AT_PARAGRAPH";
+ break;
+ case text::TextContentAnchorType_AS_CHARACTER:
+ sResult += "AS_CHARACTER";
+ break;
+ case text::TextContentAnchorType_AT_PAGE:
+ sResult += "AT_PAGE";
+ break;
+ case text::TextContentAnchorType_AT_FRAME:
+ sResult += "AT_FRAME";
+ break;
+ case text::TextContentAnchorType_AT_CHARACTER:
+ sResult += "AT_CHARACTER";
+ break;
+ case text::TextContentAnchorType_MAKE_FIXED_SIZE:
+ sResult += "MAKE_FIXED_SIZE";
+ break;
+ default:
+ break;
+ }
+ }
+ else if (sPropType ==
+ ::rtl::OUString
+ (RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.awt.Point")))
+ {
+ awt::Point aPoint;
+ aAny >>= aPoint;
+
+ snprintf(buffer, sizeof(buffer), "(%" SAL_PRIdINT32 ", %" SAL_PRIdINT32 ")", aPoint.X,
+ aPoint.Y);
+
+ sResult += buffer;
+ }
+ else if (sPropType ==
+ ::rtl::OUString
+ (RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.awt.Rectangle")))
+ {
+ awt::Rectangle aRect;
+ aAny >>= aRect;
+
+ snprintf(buffer, sizeof(buffer), "(%" SAL_PRIdINT32 ", %" SAL_PRIdINT32 ", %" SAL_PRIdINT32 ", %" SAL_PRIdINT32 ")",
+ aRect.X, aRect.Y, aRect.Width, aRect.Height);
+ sResult += buffer;
+ }
+ else if (sPropType ==
+ ::rtl::OUString
+ (RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.drawing.FillStyle")))
+ {
+ drawing::FillStyle nValue;
+ aAny >>= nValue;
+
+ switch (nValue)
+ {
+ case drawing::FillStyle_NONE:
+ sResult += "NONE";
+ break;
+ case drawing::FillStyle_SOLID:
+ sResult += "SOLID";
+ break;
+ case drawing::FillStyle_GRADIENT:
+ sResult += "GRADIENT";
+ break;
+ case drawing::FillStyle_HATCH:
+ sResult += "HATCH";
+ break;
+ case drawing::FillStyle_BITMAP:
+ sResult += "BITMAP";
+ break;
+ case drawing::FillStyle_MAKE_FIXED_SIZE:
+ sResult += "MAKE_FIXED_SIZE";
+ break;
+ }
+ }
+ else if (sPropType ==
+ ::rtl::OUString
+ (RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.drawing.BitmapMode")))
+ {
+ drawing::BitmapMode nValue;
+ aAny >>= nValue;
+
+ switch (nValue)
+ {
+ case drawing::BitmapMode_REPEAT:
+ sResult += "REPEAT";
+ break;
+ case drawing::BitmapMode_STRETCH:
+ sResult += "STRETCH";
+ break;
+ case drawing::BitmapMode_NO_REPEAT:
+ sResult += "NO_REPEAT";
+ break;
+ case drawing::BitmapMode_MAKE_FIXED_SIZE:
+ sResult += "MAKE_FIXED_SIZE";
+ break;
+ }
+ }
+ else if (sPropType ==
+ ::rtl::OUString
+ (RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.drawing.HomogenMatrix3")))
+ {
+ drawing::HomogenMatrix3 aMatrix;
+ aAny >>= aMatrix;
+
+ snprintf(buffer, sizeof(buffer),
+ "((%f %f %f)(%f %f %f)(%f %f %f))",
+ aMatrix.Line1.Column1,
+ aMatrix.Line1.Column2,
+ aMatrix.Line1.Column3,
+ aMatrix.Line2.Column1,
+ aMatrix.Line2.Column2,
+ aMatrix.Line2.Column3,
+ aMatrix.Line3.Column1,
+ aMatrix.Line3.Column2,
+ aMatrix.Line3.Column3);
+ sResult += buffer;
+ }
+
+ sResult += "</property>";
+ }
+ }
+ else
+ {
+ sResult += "<unknown-property>";
+ sResult += OUStringToOString
+ (sPropName, RTL_TEXTENCODING_ASCII_US).getStr();
+ sResult += "</unknown-property>";
+ }
+ }
+ sResult += "</propertyset>";
+ }
+
+ return sResult;
+}
+ string xmlify(const string & str)
+ {
+ string result = "";
+ char sBuffer[16];
+
+ for (string::const_iterator aIt = str.begin(); aIt != str.end(); ++aIt)
+ {
+ char c = *aIt;
+
+ if (isprint(c) && c != '\"')
+ {
+ if (c == '<')
+ result += "&lt;";
+ else if (c == '>')
+ result += "&gt;";
+ else if (c == '&')
+ result += "&amp;";
+ else
+ result += c;
+ }
+ else
+ {
+ snprintf(sBuffer, sizeof(sBuffer), "\\%03d", c);
+ result += sBuffer;
+ }
+ }
+
+ return result;
+ }
+
+}
diff --git a/writerfilter/source/rtftok/FlexLexer.h b/writerfilter/source/rtftok/FlexLexer.h
new file mode 100644
index 000000000000..309cd30ffe1a
--- /dev/null
+++ b/writerfilter/source/rtftok/FlexLexer.h
@@ -0,0 +1,149 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef __FLEX_LEXER_H
+// Never included before - need to define base class.
+#define __FLEX_LEXER_H
+//#include <iostream.h>
+typedef void ostream;
+#include <vector>
+#include <rtftok/RTFInputSource.hxx>
+
+extern "C++" {
+
+struct yy_buffer_state;
+typedef int yy_state_type;
+
+}
+#include <rtftok/RTFScanner.hxx>
+#endif
+
+#if defined(yyFlexLexer) || ! defined(yyFlexLexerOnce)
+// Either this is the first time through (yyFlexLexerOnce not defined),
+// or this is a repeated include to define a different flavor of
+// yyFlexLexer, as discussed in the flex man page.
+#define yyFlexLexerOnce
+
+class yyFlexLexer : public writerfilter::rtftok::RTFScanner {
+private:
+ class RtfTokenizer* tokenizerInstance;
+
+ void split_ctrl(char *yytext, char* token, char *value);
+ void raise_ctrl(char* yytext);
+ void raise_dest(char* yytext);
+ void raise_destOrCtrl(char* yytext);
+protected:
+ int num_lines;
+ sal_uInt64 num_chars;
+ int star_flag;
+
+public:
+ // arg_yyin and arg_yyout default to the cin and cout, but we
+ // only make that assignment when initializing in yylex().
+ yyFlexLexer( class writerfilter::rtftok::RTFInputSource* arg_yyin, class writerfilter::rtftok::RTFScannerHandler &eventHandler );
+
+ virtual ~yyFlexLexer();
+
+ void yy_switch_to_buffer( struct yy_buffer_state* new_buffer );
+ struct yy_buffer_state* yy_create_buffer( class writerfilter::rtftok::RTFInputSource* s, int size );
+ void yy_delete_buffer( struct yy_buffer_state* b );
+ void yyrestart( class writerfilter::rtftok::RTFInputSource* s );
+
+ virtual int yylex();
+ virtual void switch_streams( class writerfilter::rtftok::RTFInputSource* new_in, ostream* new_out );
+
+protected:
+
+// int LexerInput( char* buf, int max_size );
+ virtual void LexerOutput( const char* buf, int size );
+ virtual void LexerError( const char* msg );
+
+ void yyunput( int c, char* buf_ptr );
+ int yyinput();
+
+ void yy_load_buffer_state();
+ void yy_init_buffer( struct yy_buffer_state* b, class writerfilter::rtftok::RTFInputSource* s );
+ void yy_flush_buffer( struct yy_buffer_state* b );
+
+ int yy_start_stack_ptr;
+ int yy_start_stack_depth;
+ int* yy_start_stack;
+
+ void yy_push_state( int new_state );
+ void yy_pop_state();
+ int yy_top_state();
+
+ yy_state_type yy_get_previous_state();
+ yy_state_type yy_try_NUL_trans( yy_state_type current_state );
+ int yy_get_next_buffer();
+
+ class writerfilter::rtftok::RTFInputSource* yyin; // input source for default LexerInput
+ ostream* yyout; // output sink for default LexerOutput
+
+ struct yy_buffer_state* yy_current_buffer;
+
+ // yy_hold_char holds the character lost when yytext is formed.
+ char yy_hold_char;
+
+ // Number of characters read into yy_ch_buf.
+ int yy_n_chars;
+
+ // Points to current character in buffer.
+ char* yy_c_buf_p;
+
+ int yy_init; // whether we need to initialize
+ int yy_start; // start state number
+
+ // Flag which is used to allow yywrap()'s to do buffer switches
+ // instead of setting up a fresh yyin. A bit of a hack ...
+ int yy_did_buffer_switch_on_eof;
+
+ // The following are not always needed, but may be depending
+ // on use of certain flex features (like REJECT or yymore()).
+
+ yy_state_type yy_last_accepting_state;
+ char* yy_last_accepting_cpos;
+
+ yy_state_type* yy_state_buf;
+ yy_state_type* yy_state_ptr;
+
+ char* yy_full_match;
+ int* yy_full_state;
+ int yy_full_lp;
+
+ int yy_lp;
+ int yy_looking_for_trail_begin;
+
+ int yy_more_flag;
+ int yy_more_len;
+ int yy_more_offset;
+ int yy_prev_more_offset;
+
+ private:
+
+};
+
+#endif
diff --git a/writerfilter/source/rtftok/RTFParseException.cxx b/writerfilter/source/rtftok/RTFParseException.cxx
new file mode 100644
index 000000000000..75212471e02f
--- /dev/null
+++ b/writerfilter/source/rtftok/RTFParseException.cxx
@@ -0,0 +1,33 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <rtftok/RTFParseException.hxx>
+
+writerfilter::rtftok::RTFParseException::RTFParseException(char * /*message*/)
+{
+}
+
diff --git a/writerfilter/source/rtftok/RTFScanner.lex b/writerfilter/source/rtftok/RTFScanner.lex
new file mode 100644
index 000000000000..e5b4c63b397a
--- /dev/null
+++ b/writerfilter/source/rtftok/RTFScanner.lex
@@ -0,0 +1,333 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+/* compile with flex++ -8 -f -+ -Sflex.skl -ortfparser.cxx rtfparser.lex */
+%option yylineno
+%{
+ //#include <io.h>
+#include <math.h>
+#include <string.h>
+#include <osl/file.h>
+#include <assert.h>
+#include <vector>
+
+#if defined (UNX)
+ #define stricmp strcasecmp
+#endif
+
+writerfilter::rtftok::RTFScanner* writerfilter::rtftok::RTFScanner::createRTFScanner(class writerfilter::rtftok::RTFInputSource& inputSource, writerfilter::rtftok::RTFScannerHandler &eventHandler)
+{
+ return new yyFlexLexer(&inputSource, eventHandler);
+}
+
+
+
+extern "C" {
+//int isatty(int fd) { return 0; }
+int yywrap(void) { return 1; }
+}
+
+/*
+oslFileHandle yy_osl_in=NULL;
+#define YY_INPUT(buf,result,max_size) \
+{\
+{\
+ assert(yy_osl_in!=NULL);\
+ sal_Bool isEOF;\
+ oslFileError ret=osl_isEndOfFile( yy_osl_in, &isEOF );\
+ assert(ret==osl_File_E_None);\
+ if (isEOF)\
+ {\
+ result=YY_NULL;\
+ }\
+ else\
+ {\
+ sal_uInt64 bytesRead;\
+ ret=osl_readFile( yy_osl_in, buf, max_size, &bytesRead);\
+ assert(ret==osl_File_E_None);\
+ result = bytesRead; \
+ }\
+}\
+}
+*/
+
+//extern RtfTokenizer* this;
+void yyFlexLexer::split_ctrl(char *_yytext, char* token, char *value)
+ {
+ int i=0; // skip first '\'
+ while(_yytext[i]!=0 && (_yytext[i]=='\r' || _yytext[i]=='\n')) i++;
+ while(_yytext[i]!=0 && (_yytext[i]<'A' || (_yytext[i]>'Z' && _yytext[i]<'a') || _yytext[i]>'z')) i++;
+ while(_yytext[i]!=0 && _yytext[i]>='A') *(token++)=_yytext[i++];
+ *token=0;
+ while(_yytext[i]!=0 && _yytext[i]>' ') *(value++)=_yytext[i++];
+ *value=0;
+ }
+
+ void yyFlexLexer::raise_ctrl(char* _yytext)
+ {
+ char token[50];
+ char value[50];
+ split_ctrl(_yytext, token, value);
+ eventHandler.ctrl(token, value);
+ }
+
+ void yyFlexLexer::raise_dest(char* _yytext)
+ {
+ char token[50];
+ char value[50];
+ split_ctrl(_yytext, token, value);
+ eventHandler.dest(token, value);
+ }
+
+#define _num_of_destctrls (sizeof(_destctrls)/sizeof(_destctrls[0]))
+static const char* _destctrls[] = {
+"aftncn",
+"aftnsep",
+"aftnsepc",
+"annotation",
+"atnauthor",
+"atndate",
+"atnicn",
+"atnid",
+"atnparent",
+"atnref",
+"atntime",
+"atrfend",
+"atrfstart",
+"author",
+"background",
+"bkmkend",
+"bkmkstart",
+"buptim",
+"category",
+"colortbl",
+"comment",
+"company",
+"creatim",
+"datafield",
+"do",
+"doccomm",
+"docvar",
+"dptxbxtext",
+"falt",
+"fchars",
+"ffdeftext",
+"ffentrymcr",
+"ffexitmcr",
+"ffformat",
+"ffhelptext",
+"ffl",
+"ffname",
+"ffstattext",
+"field",
+"file",
+"filetbl",
+"fldinst",
+"fldrslt",
+"fldtype",
+"fname",
+"fontemb",
+"fontfile",
+"fonttbl",
+"footer",
+"footer",
+"footerf",
+"footerl",
+"footnote",
+"formfield",
+"ftncn",
+"ftnsep",
+"ftnsepc",
+"g",
+"generator",
+"gridtbl",
+"header",
+"header",
+"headerf",
+"headerl",
+"htmltag",
+"info",
+"keycode",
+"keywords",
+"lchars",
+"levelnumbers",
+"leveltext",
+"lfolevel",
+"list",
+"listlevel",
+"listname",
+"listoverride",
+"listoverridetable",
+"listtable",
+"listtext",
+"manager",
+"mhtmltag",
+"nesttableprops",
+"nextfile",
+"nonesttables",
+"nonshppict",
+"objalias",
+"objclass",
+"objdata",
+"object",
+"objname",
+"objsect",
+"objtime",
+"oldcprops",
+"oldpprops",
+"oldsprops",
+"oldtprops",
+"operator",
+"panose",
+"pgp",
+"pgptbl",
+"picprop",
+"pict",
+"pn",
+"pnseclvl",
+"pntext",
+"pntxta",
+"pntxtb",
+"printim",
+"private",
+"pwd",
+"pxe",
+"result",
+"revtbl",
+"revtim",
+"rsidtbl",
+"rtf",
+"rxe",
+"shp",
+"shpgrp",
+"shpinst",
+"shppict",
+"shprslt",
+"shptxt",
+"sn",
+"sp",
+"stylesheet",
+"subject",
+"sv",
+"tc",
+"template",
+"title",
+"txe",
+"ud",
+"upr",
+"urtf",
+"userprops",
+"xe"
+};
+
+ void yyFlexLexer::raise_destOrCtrl(char* _yytext)
+ {
+ char token[50];
+ char value[50];
+ split_ctrl(_yytext, token, value);
+ char* result=(char*)bsearch(token, _destctrls, _num_of_destctrls, 20, (int (*)(const void*, const void*))stricmp);
+ if (result)
+ {
+ eventHandler.dest(token, value);
+ }
+ else
+ {
+ eventHandler.lbrace();
+ eventHandler.ctrl(token, value);
+ }
+ }
+
+%}
+
+%%
+\{\\upr\{" "? { /* skip upr destination */
+ int c;
+ int br=1;
+ while (br>0 && (c = yyinput()) != EOF)
+ {
+ if (c=='}') br--;
+ if (c=='{') br++;
+ }
+ eventHandler.lbrace();
+ num_chars+=yyleng;
+}
+
+
+\\bin(("+"|"-")?[0-9]*)?" "? {
+ raise_dest(yytext);
+ num_chars+=yyleng;
+ int len=atoi(yytext+4);
+ num_chars+=len;
+ // pictureBytes=2*len;
+ while ( len )
+ {
+ int c = yyinput();
+ eventHandler.addBinData((unsigned char)c);
+ len--;
+ }
+ eventHandler.rbrace();
+}
+
+\{[\r\n]*\\\*\\[A-Za-z]+(("+"|"-")?[0-9]*)?" "? { /* stared dest word */
+ raise_dest(yytext);
+ num_chars+=yyleng;
+}
+\{[\r\n]*\\[A-Za-z]+(("+"|"-")?[0-9]*)?" "? { /* dest word */
+ raise_destOrCtrl(yytext);
+}
+\\[A-Za-z]+(("+"|"-")?[0-9]*)?" "? { /* ctrl word */
+ raise_ctrl(yytext);
+ star_flag=0;
+ num_chars+=yyleng;
+}
+\\\'[A-Fa-f0-9][A-Fa-f0-9] { /* hex char */
+ eventHandler.addHexChar(yytext);
+ num_chars+=yyleng;
+}
+\\* { /* star */
+ star_flag=1;
+ num_chars+=yyleng;
+}
+\{ { /* lbrace */
+ eventHandler.lbrace();
+ num_chars+=yyleng;
+}
+\} { /* rbrace */
+ eventHandler.rbrace();
+ num_chars+=yyleng;
+}
+\\\| { num_chars+=yyleng;}
+\\~ {num_chars+=yyleng; eventHandler.addCharU(0xa0);}
+\\- {num_chars+=yyleng;}
+\\_ {num_chars+=yyleng;}
+\\\: {num_chars+=yyleng;}
+\n { ++num_lines;num_chars+=yyleng;}
+\r {num_chars+=yyleng;}
+\t {num_chars+=yyleng;}
+" "(" "+) { eventHandler.addSpaces(yyleng); num_chars+=yyleng;}
+. { eventHandler.addChar(yytext[0]); num_chars+=yyleng;}
+%%
diff --git a/writerfilter/source/rtftok/RTFScanner.skl b/writerfilter/source/rtftok/RTFScanner.skl
new file mode 100644
index 000000000000..ffcca566e267
--- /dev/null
+++ b/writerfilter/source/rtftok/RTFScanner.skl
@@ -0,0 +1,1537 @@
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+
+%-
+#include <stdio.h>
+%*
+
+
+/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+#ifdef c_plusplus
+#ifndef __cplusplus
+#define __cplusplus
+#endif
+#endif
+
+
+#ifdef __cplusplus
+
+#include <math.h>
+#include <osl/file.h>
+#include <rtl/alloc.h>
+#include <rtftok/RTFInputSource.hxx>
+#include <rtftok/RTFParseException.hxx>
+
+static const int EOF=0;
+
+%+
+//class istream;
+%*
+//#include <unistd.h>
+
+/* Use prototypes in function declarations. */
+#define YY_USE_PROTOS
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else /* ! __cplusplus */
+
+#if __STDC__
+
+#define YY_USE_PROTOS
+#define YY_USE_CONST
+
+#endif /* __STDC__ */
+#endif /* ! __cplusplus */
+
+#ifdef __TURBOC__
+ #pragma warn -rch
+ #pragma warn -use
+#include <io.h>
+#include <stdlib.h>
+#define YY_USE_CONST
+#define YY_USE_PROTOS
+#endif
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+
+#ifdef YY_USE_PROTOS
+#define YY_PROTO(proto) proto
+#else
+#define YY_PROTO(proto) ()
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index. If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition. This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN yy_start = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state. The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START ((yy_start - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart( yyin )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#define YY_BUF_SIZE 16384
+
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+
+extern int yyleng;
+%-
+extern FILE *yyin, *yyout;
+%*
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+/* The funky do-while in the following #define is used to turn the definition
+ * int a single C statement (which needs a semi-colon terminator). This
+ * avoids problems with code like:
+ *
+ * if ( condition_holds )
+ * yyless( 5 );
+ * else
+ * do_something_else();
+ *
+ * Prior to using the do-while the compiler would get upset at the
+ * "else" because it interpreted the "if" statement as being all
+ * done when it reached the ';' after the yyless() call.
+ */
+
+/* Return all but the first 'n' matched characters back to the input stream. */
+
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ *yy_cp = yy_hold_char; \
+ YY_RESTORE_YY_MORE_OFFSET \
+ yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ } \
+ while ( 0 )
+
+#define unput(c) yyunput( c, yytext_ptr )
+
+/* The following is because we cannot portably get our hands on size_t
+ * (without autoconf's help, which isn't available because we want
+ * flex-generated scanners to compile on their own).
+ */
+typedef unsigned int yy_size_t;
+
+
+struct yy_buffer_state
+ {
+%-
+ FILE *yy_input_file;
+%+
+// istream* yy_input_file;
+ writerfilter::rtftok::RTFInputSource *yy_input_file;
+%*
+
+ char *yy_ch_buf; /* input buffer */
+ char *yy_buf_pos; /* current position in input buffer */
+
+ /* Size of input buffer in bytes, not including room for EOB
+ * characters.
+ */
+ yy_size_t yy_buf_size;
+
+ /* Number of characters read into yy_ch_buf, not including EOB
+ * characters.
+ */
+ int yy_n_chars;
+
+ /* Whether we "own" the buffer - i.e., we know we created it,
+ * and can realloc() it to grow it, and should free() it to
+ * delete it.
+ */
+ int yy_is_our_buffer;
+
+ /* Whether this is an "interactive" input source; if so, and
+ * if we're using stdio for input, then we want to use getc()
+ * instead of fread(), to make sure we stop fetching input after
+ * each newline.
+ */
+ int yy_is_interactive;
+
+ /* Whether we're considered to be at the beginning of a line.
+ * If so, '^' rules will be active on the next match, otherwise
+ * not.
+ */
+ int yy_at_bol;
+
+ /* Whether to try to fill the input buffer when we reach the
+ * end of it.
+ */
+ int yy_fill_buffer;
+
+ int yy_buffer_status;
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+ /* When an EOF's been seen but there's still some text to process
+ * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+ * shouldn't try reading from the input source any more. We might
+ * still have a bunch of tokens to match, though, because of
+ * possible backing-up.
+ *
+ * When we actually see the EOF, we change the status to "new"
+ * (via yyrestart()), so that the user can continue scanning by
+ * just pointing yyin at a new input file.
+ */
+#define YY_BUFFER_EOF_PENDING 2
+ };
+
+%- Standard (non-C++) definition
+static YY_BUFFER_STATE yy_current_buffer = 0;
+%*
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ */
+#define YY_CURRENT_BUFFER yy_current_buffer
+
+
+%- Standard (non-C++) definition
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+
+static int yy_n_chars; /* number of characters read into yy_ch_buf */
+
+
+int yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 1; /* whether we need to initialize */
+static int yy_start = 0; /* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin. A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart YY_PROTO(( FILE *input_file ));
+
+void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
+void yy_load_buffer_state YY_PROTO(( void ));
+YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
+void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
+void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
+
+YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
+YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
+YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
+%*
+
+static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
+static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
+static void yy_flex_free YY_PROTO(( void * ));
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+ { \
+ if ( ! yy_current_buffer ) \
+ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+ yy_current_buffer->yy_is_interactive = is_interactive; \
+ }
+
+#define yy_set_bol(at_bol) \
+ { \
+ if ( ! yy_current_buffer ) \
+ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+ yy_current_buffer->yy_at_bol = at_bol; \
+ }
+
+#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
+
+%% yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here
+
+%- Standard (non-C++) definition
+static yy_state_type yy_get_previous_state YY_PROTO(( void ));
+static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
+static int yy_get_next_buffer YY_PROTO(( void ));
+static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
+%*
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+ yytext_ptr = yy_bp; \
+%% code to fiddle yytext and yyleng for yymore() goes here
+ yy_hold_char = *yy_cp; \
+ *yy_cp = '\0'; \
+%% code to copy yytext_ptr to yytext[] goes here, if %array
+ yy_c_buf_p = yy_cp;
+
+%% data tables for the DFA and the user's section 1 definitions go here
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap YY_PROTO(( void ));
+#else
+extern int yywrap YY_PROTO(( void ));
+#endif
+#endif
+
+%-
+#ifndef YY_NO_UNPUT
+static void yyunput YY_PROTO(( int c, char *buf_ptr ));
+#endif
+%*
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen YY_PROTO(( yyconst char * ));
+#endif
+
+#ifndef YY_NO_INPUT
+%- Standard (non-C++) definition
+#ifdef __cplusplus
+static int yyinput YY_PROTO(( void ));
+#else
+static int input YY_PROTO(( void ));
+#endif
+%*
+#endif
+
+#if YY_STACK_USED
+static int yy_start_stack_ptr = 0;
+static int yy_start_stack_depth = 0;
+static int *yy_start_stack = 0;
+#ifndef YY_NO_PUSH_STATE
+static void yy_push_state YY_PROTO(( int new_state ));
+#endif
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state YY_PROTO(( void ));
+#endif
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state YY_PROTO(( void ));
+#endif
+
+#else
+#define YY_NO_PUSH_STATE 1
+#define YY_NO_POP_STATE 1
+#define YY_NO_TOP_STATE 1
+#endif
+
+#ifdef YY_MALLOC_DECL
+YY_MALLOC_DECL
+#else
+#if __STDC__
+#ifndef __cplusplus
+#include <stdlib.h>
+#endif
+#else
+/* Just try to get by without declaring the routines. This will fail
+ * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
+ * or sizeof(void*) != sizeof(int).
+ */
+#endif
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+
+#ifndef ECHO
+%- Standard (non-C++) definition
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
+%+ C++ definition
+#define ECHO LexerOutput( yytext, yyleng )
+%*
+#endif
+
+/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+%% fread()/read() definition of YY_INPUT goes here unless we're doing C++
+%+ C++ definition
+{result=yyin->read(buf, max_size);}
+%*
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+%-
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+%+
+#define YY_FATAL_ERROR(msg) LexerError( msg )
+%*
+#endif
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+%- Standard (non-C++) definition
+#define YY_DECL int yylex YY_PROTO(( void ))
+%+ C++ definition
+#define YY_DECL int yyFlexLexer::yylex()
+%*
+#endif
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+%% YY_RULE_SETUP definition goes here
+
+YY_DECL
+ {
+ register yy_state_type yy_current_state;
+ register char *yy_cp, *yy_bp;
+ register int yy_act;
+
+%% user's declarations go here
+
+ if ( yy_init )
+ {
+ yy_init = 0;
+
+#ifdef YY_USER_INIT
+ YY_USER_INIT;
+#endif
+
+ if ( ! yy_start )
+ yy_start = 1; /* first start state */
+
+ if ( ! yyin )
+%-
+ yyin = stdin;
+%+
+// yyin = &cin;
+ yyin = NULL;
+%*
+
+ if ( ! yyout )
+%-
+ yyout = stdout;
+%+
+// yyout = &cout;
+ yyout = NULL;
+%*
+
+ if ( ! yy_current_buffer )
+ yy_current_buffer =
+ yy_create_buffer( yyin, YY_BUF_SIZE );
+
+ yy_load_buffer_state();
+ }
+
+ while ( 1 ) /* loops until end-of-file is reached */
+ {
+%% yymore()-related code goes here
+ yy_cp = yy_c_buf_p;
+
+ /* Support of yytext. */
+ *yy_cp = yy_hold_char;
+
+ /* yy_bp points to the position in yy_ch_buf of the start of
+ * the current run.
+ */
+ yy_bp = yy_cp;
+
+%% code to set up and find next match goes here
+
+yy_find_action:
+%% code to find the action number goes here
+
+ YY_DO_BEFORE_ACTION;
+
+%% code for yylineno update goes here
+
+do_action: /* This label is used only to access EOF actions. */
+
+%% debug code goes here
+
+ switch ( yy_act )
+ { /* beginning of action switch */
+%% actions go here
+
+ case YY_END_OF_BUFFER:
+ {
+ /* Amount of text matched not including the EOB char. */
+ int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
+
+ /* Undo the effects of YY_DO_BEFORE_ACTION. */
+ *yy_cp = yy_hold_char;
+ YY_RESTORE_YY_MORE_OFFSET
+
+ if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
+ {
+ /* We're scanning a new file or input source. It's
+ * possible that this happened because the user
+ * just pointed yyin at a new source and called
+ * yylex(). If so, then we have to assure
+ * consistency between yy_current_buffer and our
+ * globals. Here is the right place to do so, because
+ * this is the first action (other than possibly a
+ * back-up) that will match for the new input source.
+ */
+ yy_n_chars = yy_current_buffer->yy_n_chars;
+ yy_current_buffer->yy_input_file = yyin;
+ yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
+ }
+
+ /* Note that here we test for yy_c_buf_p "<=" to the position
+ * of the first EOB in the buffer, since yy_c_buf_p will
+ * already have been incremented past the NUL character
+ * (since all states make transitions on EOB to the
+ * end-of-buffer state). Contrast this with the test
+ * in input().
+ */
+ if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ { /* This was really a NUL. */
+ yy_state_type yy_next_state;
+
+ yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state();
+
+ /* Okay, we're now positioned to make the NUL
+ * transition. We couldn't have
+ * yy_get_previous_state() go ahead and do it
+ * for us because it doesn't know how to deal
+ * with the possibility of jamming (and we don't
+ * want to build jamming into it because then it
+ * will run more slowly).
+ */
+
+ yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+ yy_bp = yytext_ptr + YY_MORE_ADJ;
+
+ if ( yy_next_state )
+ {
+ /* Consume the NUL. */
+ yy_cp = ++yy_c_buf_p;
+ yy_current_state = yy_next_state;
+ goto yy_match;
+ }
+
+ else
+ {
+%% code to do back-up for compressed tables and set up yy_cp goes here
+ goto yy_find_action;
+ }
+ }
+
+ else switch ( yy_get_next_buffer() )
+ {
+ case EOB_ACT_END_OF_FILE:
+ {
+ yy_did_buffer_switch_on_eof = 0;
+
+ if ( yywrap() )
+ {
+ /* Note: because we've taken care in
+ * yy_get_next_buffer() to have set up
+ * yytext, we can now set up
+ * yy_c_buf_p so that if some total
+ * hoser (like flex itself) wants to
+ * call the scanner after we return the
+ * YY_NULL, it'll still work - another
+ * YY_NULL will get returned.
+ */
+ yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
+
+ yy_act = YY_STATE_EOF(YY_START);
+ goto do_action;
+ }
+
+ else
+ {
+ if ( ! yy_did_buffer_switch_on_eof )
+ YY_NEW_FILE;
+ }
+ break;
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ yy_c_buf_p =
+ yytext_ptr + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state();
+
+ yy_cp = yy_c_buf_p;
+ yy_bp = yytext_ptr + YY_MORE_ADJ;
+ goto yy_match;
+
+ case EOB_ACT_LAST_MATCH:
+ yy_c_buf_p =
+ &yy_current_buffer->yy_ch_buf[yy_n_chars];
+
+ yy_current_state = yy_get_previous_state();
+
+ yy_cp = yy_c_buf_p;
+ yy_bp = yytext_ptr + YY_MORE_ADJ;
+ goto yy_find_action;
+ }
+ break;
+ }
+
+ default:
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--no action found" );
+ } /* end of action switch */
+ } /* end of scanning one token */
+ } /* end of yylex */
+
+%+
+yyFlexLexer::yyFlexLexer( writerfilter::rtftok::RTFInputSource* arg_yyin, class writerfilter::rtftok::RTFScannerHandler &eventHandler )
+: writerfilter::rtftok::RTFScanner(eventHandler)
+ {
+ yyin = arg_yyin;
+ yyout = 0;
+ yy_c_buf_p = 0;
+ yy_init = 1;
+ yy_start = 0;
+ yy_flex_debug = 0;
+ yylineno = 1; // this will only get updated if %option yylineno
+
+ yy_did_buffer_switch_on_eof = 0;
+
+ yy_looking_for_trail_begin = 0;
+ yy_more_flag = 0;
+ yy_more_len = 0;
+ yy_more_offset = yy_prev_more_offset = 0;
+
+ yy_start_stack_ptr = yy_start_stack_depth = 0;
+ yy_start_stack = 0;
+
+ yy_current_buffer = 0;
+
+#ifdef YY_USES_REJECT
+ yy_state_buf = new yy_state_type[YY_BUF_SIZE + 2];
+#else
+ yy_state_buf = 0;
+#endif
+
+ num_lines=0;
+ num_chars=0;
+ star_flag=false;
+ }
+
+yyFlexLexer::~yyFlexLexer()
+ {
+ delete yy_state_buf;
+ yy_delete_buffer( yy_current_buffer );
+ }
+
+void yyFlexLexer::switch_streams( writerfilter::rtftok::RTFInputSource* new_in, ostream* new_out )
+ {
+ if ( new_in )
+ {
+ yy_delete_buffer( yy_current_buffer );
+ yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) );
+ }
+
+ if ( new_out )
+ yyout = new_out;
+ }
+
+#if 0
+#ifdef YY_INTERACTIVE
+int yyFlexLexer::LexerInput( char* buf, int /* max_size */ )
+#else
+int yyFlexLexer::LexerInput( char* buf, int max_size )
+#endif
+{
+ OSL_ASSERT(yyin!=NULL);
+ ::com::sun::star::uno::Sequence< ::sal_Int8 > buffer;
+ int len=yyin->readSomeBytes(buffer,max_size);
+ if (len>0)
+ {
+ sal_Int8 *_buffer=buffer.getArray();
+ memcpy(buf, _buffer, len);
+ return len;
+ }
+ else
+ {
+ return YY_NULL;
+ }
+}
+#endif
+
+void yyFlexLexer::LexerOutput( const char* buf, int size )
+ {
+// (void) yyout->write( buf, size );
+ }
+%*
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ * EOB_ACT_LAST_MATCH -
+ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ * EOB_ACT_END_OF_FILE - end of file
+ */
+
+%-
+static int yy_get_next_buffer()
+%+
+int yyFlexLexer::yy_get_next_buffer()
+%*
+ {
+ register char *dest = yy_current_buffer->yy_ch_buf;
+ register char *source = yytext_ptr;
+ register int number_to_move, i;
+ int ret_val;
+
+ if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--end of buffer missed" );
+
+ if ( yy_current_buffer->yy_fill_buffer == 0 )
+ { /* Don't try to fill the buffer, so this is an EOF. */
+ if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
+ {
+ /* We matched a single character, the EOB, so
+ * treat this as a final EOF.
+ */
+ return EOB_ACT_END_OF_FILE;
+ }
+
+ else
+ {
+ /* We matched some text prior to the EOB, first
+ * process it.
+ */
+ return EOB_ACT_LAST_MATCH;
+ }
+ }
+
+ /* Try to read more data. */
+
+ /* First move last chars to start of buffer. */
+ number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
+
+ for ( i = 0; i < number_to_move; ++i )
+ *(dest++) = *(source++);
+
+ if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ /* don't do the read, it's not guaranteed to return an EOF,
+ * just force an EOF
+ */
+ yy_current_buffer->yy_n_chars = yy_n_chars = 0;
+
+ else
+ {
+ int num_to_read =
+ yy_current_buffer->yy_buf_size - number_to_move - 1;
+
+ while ( num_to_read <= 0 )
+ { /* Not enough room in the buffer - grow it. */
+#ifdef YY_USES_REJECT
+ YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+#else
+
+ /* just a shorter name for the current buffer */
+ YY_BUFFER_STATE b = yy_current_buffer;
+
+ int yy_c_buf_p_offset =
+ (int) (yy_c_buf_p - b->yy_ch_buf);
+
+ if ( b->yy_is_our_buffer )
+ {
+ int new_size = b->yy_buf_size * 2;
+
+ if ( new_size <= 0 )
+ b->yy_buf_size += b->yy_buf_size / 8;
+ else
+ b->yy_buf_size *= 2;
+
+ b->yy_ch_buf = (char *)
+ /* Include room in for 2 EOB chars. */
+ yy_flex_realloc( (void *) b->yy_ch_buf,
+ b->yy_buf_size + 2 );
+ }
+ else
+ /* Can't grow it, we don't own it. */
+ b->yy_ch_buf = 0;
+
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR(
+ "fatal error - scanner input buffer overflow" );
+
+ yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+ num_to_read = yy_current_buffer->yy_buf_size -
+ number_to_move - 1;
+#endif
+ }
+
+ if ( num_to_read > YY_READ_BUF_SIZE )
+ num_to_read = YY_READ_BUF_SIZE;
+
+ /* Read in more data. */
+ YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
+ yy_n_chars, num_to_read );
+
+ yy_current_buffer->yy_n_chars = yy_n_chars;
+ }
+
+ if ( yy_n_chars == 0 )
+ {
+ if ( number_to_move == YY_MORE_ADJ )
+ {
+ ret_val = EOB_ACT_END_OF_FILE;
+ yyrestart( yyin );
+ }
+
+ else
+ {
+ ret_val = EOB_ACT_LAST_MATCH;
+ yy_current_buffer->yy_buffer_status =
+ YY_BUFFER_EOF_PENDING;
+ }
+ }
+
+ else
+ ret_val = EOB_ACT_CONTINUE_SCAN;
+
+ yy_n_chars += number_to_move;
+ yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+ yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+
+ yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
+
+ return ret_val;
+ }
+
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+%-
+static yy_state_type yy_get_previous_state()
+%+
+yy_state_type yyFlexLexer::yy_get_previous_state()
+%*
+ {
+ register yy_state_type yy_current_state;
+ register char *yy_cp;
+
+%% code to get the start state into yy_current_state goes here
+
+ for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
+ {
+%% code to find the next state goes here
+ }
+
+ return yy_current_state;
+ }
+
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ * next_state = yy_try_NUL_trans( current_state );
+ */
+
+%-
+#ifdef YY_USE_PROTOS
+static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
+#else
+static yy_state_type yy_try_NUL_trans( yy_current_state )
+yy_state_type yy_current_state;
+#endif
+%+
+yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state )
+%*
+ {
+ register int yy_is_jam;
+%% code to find the next state, and perhaps do backing up, goes here
+
+ return yy_is_jam ? 0 : yy_current_state;
+ }
+
+
+%-
+#ifndef YY_NO_UNPUT
+#ifdef YY_USE_PROTOS
+static void yyunput( int c, register char *yy_bp )
+#else
+static void yyunput( c, yy_bp )
+int c;
+register char *yy_bp;
+#endif
+%+
+void yyFlexLexer::yyunput( int c, register char* yy_bp )
+%*
+ {
+ register char *yy_cp = yy_c_buf_p;
+
+ /* undo effects of setting up yytext */
+ *yy_cp = yy_hold_char;
+
+ if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ { /* need to shift things up to make room */
+ /* +2 for EOB chars. */
+ register int number_to_move = yy_n_chars + 2;
+ register char *dest = &yy_current_buffer->yy_ch_buf[
+ yy_current_buffer->yy_buf_size + 2];
+ register char *source =
+ &yy_current_buffer->yy_ch_buf[number_to_move];
+
+ while ( source > yy_current_buffer->yy_ch_buf )
+ *--dest = *--source;
+
+ yy_cp += (int) (dest - source);
+ yy_bp += (int) (dest - source);
+ yy_current_buffer->yy_n_chars =
+ yy_n_chars = yy_current_buffer->yy_buf_size;
+
+ if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ YY_FATAL_ERROR( "flex scanner push-back overflow" );
+ }
+
+ *--yy_cp = (char) c;
+
+%% update yylineno here
+
+ yytext_ptr = yy_bp;
+ yy_hold_char = *yy_cp;
+ yy_c_buf_p = yy_cp;
+ }
+%-
+#endif /* ifndef YY_NO_UNPUT */
+%*
+
+
+%-
+#ifdef __cplusplus
+static int yyinput()
+#else
+static int input()
+#endif
+%+
+int yyFlexLexer::yyinput()
+%*
+ {
+ int c;
+
+ *yy_c_buf_p = yy_hold_char;
+
+ if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+ {
+ /* yy_c_buf_p now points to the character we want to return.
+ * If this occurs *before* the EOB characters, then it's a
+ * valid NUL; if not, then we've hit the end of the buffer.
+ */
+ if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ /* This was really a NUL. */
+ *yy_c_buf_p = '\0';
+
+ else
+ { /* need more input */
+ int offset = yy_c_buf_p - yytext_ptr;
+ ++yy_c_buf_p;
+
+ switch ( yy_get_next_buffer() )
+ {
+ case EOB_ACT_LAST_MATCH:
+ /* This happens because yy_g_n_b()
+ * sees that we've accumulated a
+ * token and flags that we need to
+ * try matching the token before
+ * proceeding. But for input(),
+ * there's no matching to consider.
+ * So convert the EOB_ACT_LAST_MATCH
+ * to EOB_ACT_END_OF_FILE.
+ */
+
+ /* Reset buffer status. */
+ yyrestart( yyin );
+
+ /* fall through */
+
+ case EOB_ACT_END_OF_FILE:
+ {
+ if ( yywrap() )
+ return EOF;
+
+ if ( ! yy_did_buffer_switch_on_eof )
+ YY_NEW_FILE;
+#ifdef __cplusplus
+ return yyinput();
+#else
+ return input();
+#endif
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ yy_c_buf_p = yytext_ptr + offset;
+ break;
+ }
+ }
+ }
+
+ c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
+ *yy_c_buf_p = '\0'; /* preserve yytext */
+ yy_hold_char = *++yy_c_buf_p;
+
+%% update BOL and yylineno
+
+ return c;
+ }
+
+
+%-
+#ifdef YY_USE_PROTOS
+void yyrestart( FILE *input_file )
+#else
+void yyrestart( input_file )
+FILE *input_file;
+#endif
+%+
+void yyFlexLexer::yyrestart( writerfilter::rtftok::RTFInputSource* input_file )
+%*
+ {
+ if ( ! yy_current_buffer )
+ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
+
+ yy_init_buffer( yy_current_buffer, input_file );
+ yy_load_buffer_state();
+ }
+
+
+%-
+#ifdef YY_USE_PROTOS
+void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
+#else
+void yy_switch_to_buffer( new_buffer )
+YY_BUFFER_STATE new_buffer;
+#endif
+%+
+void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
+%*
+ {
+ if ( yy_current_buffer == new_buffer )
+ return;
+
+ if ( yy_current_buffer )
+ {
+ /* Flush out information for old buffer. */
+ *yy_c_buf_p = yy_hold_char;
+ yy_current_buffer->yy_buf_pos = yy_c_buf_p;
+ yy_current_buffer->yy_n_chars = yy_n_chars;
+ }
+
+ yy_current_buffer = new_buffer;
+ yy_load_buffer_state();
+
+ /* We don't actually know whether we did this switch during
+ * EOF (yywrap()) processing, but the only time this flag
+ * is looked at is after yywrap() is called, so it's safe
+ * to go ahead and always set it.
+ */
+ yy_did_buffer_switch_on_eof = 1;
+ }
+
+
+%-
+#ifdef YY_USE_PROTOS
+void yy_load_buffer_state( void )
+#else
+void yy_load_buffer_state()
+#endif
+%+
+void yyFlexLexer::yy_load_buffer_state()
+%*
+ {
+ yy_n_chars = yy_current_buffer->yy_n_chars;
+ yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
+ yyin = yy_current_buffer->yy_input_file;
+ yy_hold_char = *yy_c_buf_p;
+ }
+
+
+%-
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
+#else
+YY_BUFFER_STATE yy_create_buffer( file, size )
+FILE *file;
+int size;
+#endif
+%+
+YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( writerfilter::rtftok::RTFInputSource* file, int size )
+%*
+ {
+ YY_BUFFER_STATE b;
+
+ b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ * we need to put in 2 end-of-buffer characters.
+ */
+ b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_is_our_buffer = 1;
+
+ yy_init_buffer( b, file );
+
+ return b;
+ }
+
+
+%-
+#ifdef YY_USE_PROTOS
+void yy_delete_buffer( YY_BUFFER_STATE b )
+#else
+void yy_delete_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+%+
+void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b )
+%*
+ {
+ if ( ! b )
+ return;
+
+ if ( b == yy_current_buffer )
+ yy_current_buffer = (YY_BUFFER_STATE) 0;
+
+ if ( b->yy_is_our_buffer )
+ yy_flex_free( (void *) b->yy_ch_buf );
+
+ yy_flex_free( (void *) b );
+ }
+
+
+%-
+#ifndef YY_ALWAYS_INTERACTIVE
+#ifndef YY_NEVER_INTERACTIVE
+extern int isatty YY_PROTO(( int ));
+#endif
+#endif
+
+#ifdef YY_USE_PROTOS
+void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
+#else
+void yy_init_buffer( b, file )
+YY_BUFFER_STATE b;
+FILE *file;
+#endif
+
+%+
+//extern "C" int isatty YY_PROTO(( int ));
+void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, writerfilter::rtftok::RTFInputSource* file )
+%*
+
+ {
+ yy_flush_buffer( b );
+
+ b->yy_input_file = file;
+ b->yy_fill_buffer = 1;
+
+%-
+#if YY_ALWAYS_INTERACTIVE
+ b->yy_is_interactive = 1;
+#else
+#if YY_NEVER_INTERACTIVE
+ b->yy_is_interactive = 0;
+#else
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+#endif
+#endif
+%+
+ b->yy_is_interactive = 0;
+%*
+ }
+
+
+%-
+#ifdef YY_USE_PROTOS
+void yy_flush_buffer( YY_BUFFER_STATE b )
+#else
+void yy_flush_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+
+%+
+void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b )
+%*
+ {
+ if ( ! b )
+ return;
+
+ b->yy_n_chars = 0;
+
+ /* We always need two end-of-buffer characters. The first causes
+ * a transition to the end-of-buffer state. The second causes
+ * a jam in that state.
+ */
+ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+ b->yy_buf_pos = &b->yy_ch_buf[0];
+
+ b->yy_at_bol = 1;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ if ( b == yy_current_buffer )
+ yy_load_buffer_state();
+ }
+%*
+
+
+#ifndef YY_NO_SCAN_BUFFER
+%-
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
+#else
+YY_BUFFER_STATE yy_scan_buffer( base, size )
+char *base;
+yy_size_t size;
+#endif
+ {
+ YY_BUFFER_STATE b;
+
+ if ( size < 2 ||
+ base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ base[size-1] != YY_END_OF_BUFFER_CHAR )
+ /* They forgot to leave room for the EOB's. */
+ return 0;
+
+ b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+ b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
+ b->yy_buf_pos = b->yy_ch_buf = base;
+ b->yy_is_our_buffer = 0;
+ b->yy_input_file = 0;
+ b->yy_n_chars = b->yy_buf_size;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ yy_switch_to_buffer( b );
+
+ return b;
+ }
+%*
+#endif
+
+
+#ifndef YY_NO_SCAN_STRING
+%-
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
+#else
+YY_BUFFER_STATE yy_scan_string( yy_str )
+yyconst char *yy_str;
+#endif
+ {
+ int len;
+ for ( len = 0; yy_str[len]; ++len )
+ ;
+
+ return yy_scan_bytes( yy_str, len );
+ }
+%*
+#endif
+
+
+#ifndef YY_NO_SCAN_BYTES
+%-
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
+#else
+YY_BUFFER_STATE yy_scan_bytes( bytes, len )
+yyconst char *bytes;
+int len;
+#endif
+ {
+ YY_BUFFER_STATE b;
+ char *buf;
+ yy_size_t n;
+ int i;
+
+ /* Get memory for full buffer, including space for trailing EOB's. */
+ n = len + 2;
+ buf = (char *) yy_flex_alloc( n );
+ if ( ! buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+ for ( i = 0; i < len; ++i )
+ buf[i] = bytes[i];
+
+ buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
+
+ b = yy_scan_buffer( buf, n );
+ if ( ! b )
+ YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+ /* It's okay to grow etc. this buffer, and we should throw it
+ * away when we're done.
+ */
+ b->yy_is_our_buffer = 1;
+
+ return b;
+ }
+%*
+#endif
+
+
+#ifndef YY_NO_PUSH_STATE
+%-
+#ifdef YY_USE_PROTOS
+static void yy_push_state( int new_state )
+#else
+static void yy_push_state( new_state )
+int new_state;
+#endif
+%+
+void yyFlexLexer::yy_push_state( int new_state )
+%*
+ {
+ if ( yy_start_stack_ptr >= yy_start_stack_depth )
+ {
+ yy_size_t new_size;
+
+ yy_start_stack_depth += YY_START_STACK_INCR;
+ new_size = yy_start_stack_depth * sizeof( int );
+
+ if ( ! yy_start_stack )
+ yy_start_stack = (int *) yy_flex_alloc( new_size );
+
+ else
+ yy_start_stack = (int *) yy_flex_realloc(
+ (void *) yy_start_stack, new_size );
+
+ if ( ! yy_start_stack )
+ YY_FATAL_ERROR(
+ "out of memory expanding start-condition stack" );
+ }
+
+ yy_start_stack[yy_start_stack_ptr++] = YY_START;
+
+ BEGIN(new_state);
+ }
+#endif
+
+
+#ifndef YY_NO_POP_STATE
+%-
+static void yy_pop_state()
+%+
+void yyFlexLexer::yy_pop_state()
+%*
+ {
+ if ( --yy_start_stack_ptr < 0 )
+ YY_FATAL_ERROR( "start-condition stack underflow" );
+
+ BEGIN(yy_start_stack[yy_start_stack_ptr]);
+ }
+#endif
+
+
+#ifndef YY_NO_TOP_STATE
+%-
+static int yy_top_state()
+%+
+int yyFlexLexer::yy_top_state()
+%*
+ {
+ return yy_start_stack[yy_start_stack_ptr - 1];
+ }
+#endif
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+%-
+#ifdef YY_USE_PROTOS
+static void yy_fatal_error( yyconst char msg[] )
+#else
+static void yy_fatal_error( msg )
+char msg[];
+#endif
+ {
+ (void) fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+ }
+
+%+
+
+void yyFlexLexer::LexerError( yyconst char msg[] )
+ {
+// cerr << msg << '\n';
+// exit( YY_EXIT_FAILURE );
+ throw writerfilter::rtftok::RTFParseException("fatal error: %s"/*, msg*/);
+ }
+%*
+
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ yytext[yyleng] = yy_hold_char; \
+ yy_c_buf_p = yytext + n; \
+ yy_hold_char = *yy_c_buf_p; \
+ *yy_c_buf_p = '\0'; \
+ yyleng = n; \
+ } \
+ while ( 0 )
+
+
+/* Internal utility routines. */
+
+#ifndef yytext_ptr
+#ifdef YY_USE_PROTOS
+static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
+#else
+static void yy_flex_strncpy( s1, s2, n )
+char *s1;
+yyconst char *s2;
+int n;
+#endif
+ {
+ register int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
+ }
+#endif
+
+#ifdef YY_NEED_STRLEN
+#ifdef YY_USE_PROTOS
+static int yy_flex_strlen( yyconst char *s )
+#else
+static int yy_flex_strlen( s )
+yyconst char *s;
+#endif
+ {
+ register int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+ }
+#endif
+
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_alloc( yy_size_t size )
+#else
+static void *yy_flex_alloc( size )
+yy_size_t size;
+#endif
+ {
+ return (void *) rtl_allocateMemory( size );
+ }
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_realloc( void *ptr, yy_size_t size )
+#else
+static void *yy_flex_realloc( ptr, size )
+void *ptr;
+yy_size_t size;
+#endif
+ {
+ return (void *) rtl_reallocateMemory( (char *) ptr, size );
+ }
+
+#ifdef YY_USE_PROTOS
+static void yy_flex_free( void *ptr )
+#else
+static void yy_flex_free( ptr )
+void *ptr;
+#endif
+ {
+ rtl_freeMemory( ptr );
+ }
+
+#if YY_MAIN
+int main()
+ {
+ yylex();
+ return 0;
+ }
+#endif
+
diff --git a/writerfilter/source/rtftok/makefile.mk b/writerfilter/source/rtftok/makefile.mk
new file mode 100644
index 000000000000..61399f051e15
--- /dev/null
+++ b/writerfilter/source/rtftok/makefile.mk
@@ -0,0 +1,82 @@
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+
+PRJ=..$/..
+PRJNAME=writerfilter
+TARGET=rtftok
+#LIBTARGET=NO
+ENABLE_EXCEPTIONS=TRUE
+#USE_DEFFILE=TRUE
+EXTERNAL_WARNINGS_NOT_ERRORS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/inc$/writerfilter.mk
+
+#CFLAGS+=-DISOLATION_AWARE_ENABLED -DWIN32_LEAN_AND_MEAN -DXML_UNICODE -D_NTSDK -DUNICODE -D_UNICODE -D_WIN32_WINNT=0x0501
+#CFLAGS+=-wd4710 -wd4711 -wd4514 -wd4619 -wd4217 -wd4820
+
+
+# --- Files --------------------------------------------------------
+
+SLOFILES=$(SLO)$/RTFScanner.obj $(SLO)$/RTFParseException.obj
+
+
+SHL1TARGET=$(TARGET)
+
+SHL1STDLIBS=$(SALLIB)\
+ $(CPPULIB)\
+ $(CPPUHELPERLIB)
+SHL1IMPLIB=i$(SHL1TARGET)
+SHL1USE_EXPORTS=name
+
+SHL1OBJS=$(SLOFILES)
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+DEF1NAME=$(SHL1TARGET)
+DEFLIB1NAME=$(TARGET)
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+RTFSCANNERCXX=$(MISC)/RTFScanner.cxx
+
+GENERATEDFILES=$(RTFSCANNERCXX)
+
+$(RTFSCANNERCXX): RTFScanner.lex RTFScanner.skl FlexLexer.h
+ flex -+ -SRTFScanner.skl -o$@ RTFScanner.lex
+
+$(SLO)/RTFScanner.obj: $(RTFSCANNERCXX)
+
+.PHONY: genmake genclean
+
+genmake: $(GENERATEDFILES)
+
+genclean:
+ rm $(GENERATEDFILES)