From f20e02cdc790700e5b0ad08a3faa690d53044411 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 18 Feb 2010 11:48:08 +0100
Subject: writerfilter08: corrected status annotation

---
 .../source/dmapper/DomainMapperTableManager.cxx    | 38 ++++++++++++----------
 1 file changed, 21 insertions(+), 17 deletions(-)

diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.cxx b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
index 0db6b68fb069..7f112a18db36 100644
--- a/writerfilter/source/dmapper/DomainMapperTableManager.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
@@ -102,14 +102,14 @@ bool DomainMapperTableManager::sprm(Sprm & rSprm)
         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 */
+                /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
             case 0xf614: // sprmTTPreferredWidth - preferred table width
-            /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+                /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
             case NS_ooxml::LN_CT_TblPrBase_tblW:  //90722;
-            /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+                /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
             case NS_ooxml::LN_CT_TblPrBase_tblInd: //90725
+                /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
             {
                 //contains unit and value
                 writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
@@ -135,9 +135,9 @@ bool DomainMapperTableManager::sprm(Sprm & rSprm)
                 }
             }
             break;
-            /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
             case 0x3404:// sprmTTableHeader
             case NS_ooxml::LN_CT_TrPrBase_tblHeader: //90704
+                /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
                 // 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 )
@@ -150,8 +150,8 @@ bool DomainMapperTableManager::sprm(Sprm & rSprm)
                 else
                     m_nHeaderRepeat = -1;
             break;
-            /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
             case 0xd608: // TDefTable
+                /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
             {
                 writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
                 if( pProperties.get())
@@ -181,8 +181,8 @@ bool DomainMapperTableManager::sprm(Sprm & rSprm)
                 }
             }
             break;
-            /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
             case 0xD605: // sprmTTableBorders
+                /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
             {
                 writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
                 if( pProperties.get())
@@ -196,14 +196,14 @@ bool DomainMapperTableManager::sprm(Sprm & rSprm)
                 }
             }
             break;
-            /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
             case 0xd632 : //sprmTNewSpacing
-            /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+                /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
             case 0xd634 : //sprmTNewSpacing
+                /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
                 //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
+                /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
                 // TODO: needs a handler
                 /*contains:
                  GridLineProps">
@@ -219,8 +219,8 @@ bool DomainMapperTableManager::sprm(Sprm & rSprm)
 
                 */
             break;
-            /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
             case 0x740a : //sprmTTlp
+                /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
                 //TODO: Table look specifier
             break;
             case 0x6816 : //unknown
@@ -230,10 +230,11 @@ bool DomainMapperTableManager::sprm(Sprm & rSprm)
             case 0x7479 : //unknown
             case 0xf617 : //unknown
             case 0xf618 : //unknown
+                /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
                 bRet = false;
             break;
-            /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
             case NS_ooxml::LN_CT_TblPrBase_tblStyle: //table style name
+                /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
             {
                 m_sTableStyleName = pValue->getString();
                 TablePropertyMapPtr pPropMap( new TablePropertyMap );
@@ -241,14 +242,14 @@ bool DomainMapperTableManager::sprm(Sprm & rSprm)
                 insertTableProps(pPropMap);
             }
             break;
-            /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
             case NS_ooxml::LN_CT_TblGridBase_gridCol:
+                /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
             {
                 getCurrentGrid()->push_back( ConversionHelper::convertTwipToMM100( nIntValue ) );
             }
             break;
-            /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
             case NS_ooxml::LN_CT_TcPrBase_vMerge : //vertical merge
+                /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
             {
                 // 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 );
@@ -256,8 +257,8 @@ bool DomainMapperTableManager::sprm(Sprm & rSprm)
                 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
+                /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
             {
 #if DEBUG_DOMAINMAPPER
                 dmapper_logger->startElement("tablemanager.GridSpan");
@@ -267,13 +268,14 @@ bool DomainMapperTableManager::sprm(Sprm & rSprm)
                 m_nGridSpan = nIntValue;
             }
             break;
-            /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
             case NS_ooxml::LN_CT_TblPrBase_tblLook:
+                /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
                 break; //todo: table look specifier
-            /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
             case NS_ooxml::LN_CT_TcPrBase_tcW:
+                /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
                 break; //fixed column width is not supported
             case NS_ooxml::LN_CT_TrPrBase_cnfStyle:
+                /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
                 {
                     TablePropertyMapPtr pProps( new TablePropertyMap );
                     pProps->Insert( PROP_CNF_STYLE, true, uno::makeAny( pValue->getString( ) ) );
@@ -281,9 +283,11 @@ bool DomainMapperTableManager::sprm(Sprm & rSprm)
                 }
                 break;
             case NS_ooxml::LN_CT_PPrBase_cnfStyle:
+                /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
                 // TODO cnfStyle on a paragraph
                 break;
             case NS_ooxml::LN_CT_TcPrBase_cnfStyle:
+                /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
                 {
                     TablePropertyMapPtr pProps( new TablePropertyMap );
                     pProps->Insert( PROP_CNF_STYLE, true, uno::makeAny( pValue->getString( ) ) );
-- 
cgit 


From 7da75419c4d79f0dd3a9c2c17f4e8a18b24183c1 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 18 Feb 2010 11:52:35 +0100
Subject: writerfilter08: use find instead of mdfind, 'WRITERSTATUS:<nl>'
 means: Done

---
 writerfilter/source/ooxml/status.sh | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/writerfilter/source/ooxml/status.sh b/writerfilter/source/ooxml/status.sh
index e06382b13aa1..c36ad0d65a37 100755
--- a/writerfilter/source/ooxml/status.sh
+++ b/writerfilter/source/ooxml/status.sh
@@ -8,15 +8,13 @@ echo "<stage1>"
 
 xsltproc analyzemodel.xsl model.xml | tail -n +2
 
-mdfind -onlyin $SEARCHIN "case NS_" |
-xargs -J % grep -A 1 -n "case NS_" % |
-grep "cxx" |
+find $SEARCHIN -name "*.cxx" -exec grep -nH -A 1 "case NS_" {} \; |
 grep -v "//.*case NS_" |
 sed 's#'$SEARCHIN'##' |
 sed 's#\(^[^:]*\):\([0-9]*\):#<qname file="\1" line="\2"#' |
 sed 's#[/* ]*case \(NS_.*\):.*# qname="\1"/>#' |
 sed 's#.*WRITERFILTERSTATUS: done: \([0-9]*\), planned: \([0-9.]*\), spent: \([0-9.]*\).*#<status done="\1" planned="\2" spent="\3"/>#' |
-grep -v "WRITERFILTERSTATUS:" |
+sed 's#.*WRITERFILTERSTATUS:.*#<status done="100"/>#' |
 sed 's#^.*-[0-9][0-9]*-.*$#<nostatus/>#' |
 grep -v "^--"
 
-- 
cgit 


From 53fe5520209e594cdd7257417524c18d7cc722ce Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 18 Feb 2010 16:33:47 +0100
Subject: writerfilter08: added file name to TagLogger

---
 writerfilter/inc/resourcemodel/TagLogger.hxx    |  3 +++
 writerfilter/source/filter/ImportFilter.cxx     | 19 ++++++++++++-------
 writerfilter/source/resourcemodel/TagLogger.cxx | 19 ++++++++++++++++++-
 3 files changed, 33 insertions(+), 8 deletions(-)

diff --git a/writerfilter/inc/resourcemodel/TagLogger.hxx b/writerfilter/inc/resourcemodel/TagLogger.hxx
index da2b38de8dd1..858ecdba3a37 100644
--- a/writerfilter/inc/resourcemodel/TagLogger.hxx
+++ b/writerfilter/inc/resourcemodel/TagLogger.hxx
@@ -96,6 +96,7 @@ namespace writerfilter
         stack<XMLTag::Pointer_t> mTags;
         XMLTag::Pointer_t currentTag() const;
         XMLTag::Pointer_t mpRoot;
+        string mFileName;
 
         TagLogger();
 
@@ -104,6 +105,8 @@ namespace writerfilter
 
         static Pointer_t getInstance(const char * name);
 
+        void setFileName(const string & rName);
+
         void startDocument();
         void element(const string & name);
         void startElement(const string & name);
diff --git a/writerfilter/source/filter/ImportFilter.cxx b/writerfilter/source/filter/ImportFilter.cxx
index 3fd758f5fd75..4ff837d00fe8 100644
--- a/writerfilter/source/filter/ImportFilter.cxx
+++ b/writerfilter/source/filter/ImportFilter.cxx
@@ -90,13 +90,18 @@ sal_Bool WriterFilter::filter( const uno::Sequence< beans::PropertyValue >& aDes
         }
 
 #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();
+        OUString sURL = aMediaDesc.getUnpackedValueOrDefault( MediaDescriptor::PROP_URL(), OUString() );
+        ::std::string sURLc = OUStringToOString(sURL, RTL_TEXTENCODING_ASCII_US).getStr();
+
+        writerfilter::TagLogger::Pointer_t debugLogger
+        (writerfilter::TagLogger::getInstance("DEBUG"));
+        debugLogger->setFileName(sURLc);
+        debugLogger->startDocument();
+
+        writerfilter::TagLogger::Pointer_t dmapperLogger
+        (writerfilter::TagLogger::getInstance("DOMAINMAPPER"));
+        dmapperLogger->setFileName(sURLc);
+        dmapperLogger->startDocument();
 #endif
 
     writerfilter::dmapper::SourceDocumentType eType =
diff --git a/writerfilter/source/resourcemodel/TagLogger.cxx b/writerfilter/source/resourcemodel/TagLogger.cxx
index 6063a6e2f9df..b5fe9f311db0 100644
--- a/writerfilter/source/resourcemodel/TagLogger.cxx
+++ b/writerfilter/source/resourcemodel/TagLogger.cxx
@@ -165,6 +165,7 @@ namespace writerfilter
     static TagLoggerHashMap_t * tagLoggers = NULL;
 
     TagLogger::TagLogger()
+    : mFileName("writerfilter")
     {
     }
 
@@ -172,6 +173,11 @@ namespace writerfilter
     {
     }
 
+    void TagLogger::setFileName(const string & rName)
+    {
+        mFileName = rName;
+    }
+
     TagLogger::Pointer_t TagLogger::getInstance(const char * name)
     {
         if (tagLoggers == NULL)
@@ -290,7 +296,18 @@ namespace writerfilter
             else
                 fileName += "/tmp";
 
-            fileName += "/writerfilter.";
+            string sPrefix = aIt->second->mFileName;
+            size_t nLastSlash = sPrefix.find_last_of('/');
+            size_t nLastBackslash = sPrefix.find_last_of('\\');
+            size_t nCutPos = nLastSlash;
+            if (nLastBackslash < nCutPos)
+                nCutPos = nLastBackslash;
+            if (nCutPos < sPrefix.size())
+                sPrefix = sPrefix.substr(nCutPos + 1);
+
+            fileName += "/";
+            fileName += sPrefix;
+            fileName +=".";
             fileName += name;
             fileName += ".xml";
 
-- 
cgit 


From c39db1e63b4cc4ecc300ad9f497380ec387e0e14 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Mon, 22 Feb 2010 16:33:02 +0100
Subject: writerfilter08: First complex test

---
 writerfilter/qa/complex/ooxml/LoadDocuments.java   |  51 ++++++++++++
 writerfilter/qa/complex/ooxml/makefile.mk          |  90 +++++++++++++++++++++
 .../ooxml/testdocuments/Table5CellBorders.docx     | Bin 0 -> 10420 bytes
 .../ooxml/testdocuments/TableDifferentColumns.docx | Bin 0 -> 10440 bytes
 .../ooxml/testdocuments/TablePreferredWidth.docx   | Bin 0 -> 10393 bytes
 .../ooxml/testdocuments/TableRowProperties.docx    | Bin 0 -> 10622 bytes
 6 files changed, 141 insertions(+)
 create mode 100644 writerfilter/qa/complex/ooxml/LoadDocuments.java
 create mode 100644 writerfilter/qa/complex/ooxml/makefile.mk
 create mode 100644 writerfilter/qa/complex/ooxml/testdocuments/Table5CellBorders.docx
 create mode 100644 writerfilter/qa/complex/ooxml/testdocuments/TableDifferentColumns.docx
 create mode 100644 writerfilter/qa/complex/ooxml/testdocuments/TablePreferredWidth.docx
 create mode 100644 writerfilter/qa/complex/ooxml/testdocuments/TableRowProperties.docx

diff --git a/writerfilter/qa/complex/ooxml/LoadDocuments.java b/writerfilter/qa/complex/ooxml/LoadDocuments.java
new file mode 100644
index 000000000000..6f05391b6d21
--- /dev/null
+++ b/writerfilter/qa/complex/ooxml/LoadDocuments.java
@@ -0,0 +1,51 @@
+
+package complex.ooxml;
+import com.sun.star.lang.XMultiServiceFactory;
+import complexlib.ComplexTestCase;
+import java.io.File;
+import com.sun.star.text.XTextDocument;
+
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+/**
+ *
+ * @author hb137859
+ */
+public class LoadDocuments extends ComplexTestCase {
+    private XMultiServiceFactory m_xMSF;
+
+    @Override
+    public String[] getTestMethodNames() {
+        return new String [] {
+            "test1"
+        };
+    }
+
+    public void before() throws Exception {
+        m_xMSF = (XMultiServiceFactory) param.getMSF();
+    }
+
+    public void test1() {
+        String testDocumentsPath = util.utils.getFullTestDocName("");
+        log.println("Test documents in:" + testDocumentsPath);
+
+        File dir = new File(testDocumentsPath);
+        String [] files = dir.list();
+
+        if (files != null) {
+            for (int i = 0; i < files.length; ++i) {
+                log.println(files[i]);
+                String url = util.utils.getFullTestURL(files[i]);
+                log.println(url);
+
+                XTextDocument xDoc = util.WriterTools.loadTextDoc(m_xMSF, url);
+                util.DesktopTools.closeDoc(xDoc);
+            }
+        } else {
+            failed();
+        }
+    }
+}
diff --git a/writerfilter/qa/complex/ooxml/makefile.mk b/writerfilter/qa/complex/ooxml/makefile.mk
new file mode 100644
index 000000000000..b57a0f5279f5
--- /dev/null
+++ b/writerfilter/qa/complex/ooxml/makefile.mk
@@ -0,0 +1,90 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+# 
+# Copyright 2008 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: makefile.mk,v $
+#
+# $Revision: 1.5.198.1 $
+#
+# 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 = ..$/..$/..
+TARGET  = PropertyValues
+PRJNAME = $(TARGET)
+PACKAGE = complex$/ooxml
+
+# --- Settings -----------------------------------------------------
+.INCLUDE: settings.mk
+
+
+#----- compile .java files -----------------------------------------
+
+JARFILES = mysql.jar ridl.jar unoil.jar jurt.jar juh.jar java_uno.jar OOoRunner.jar
+JAVAFILES       = LoadDocuments.java
+JAVACLASSFILES  = $(foreach,i,$(JAVAFILES) $(CLASSDIR)$/$(PACKAGE)$/$(i:b).class)
+
+#----- make a jar from compiled files ------------------------------
+
+MAXLINELENGTH = 100000
+
+JARCLASSDIRS    = $(PACKAGE)
+JARTARGET       = $(TARGET).jar
+JARCOMPRESS     = TRUE
+
+# --- Parameters for the test --------------------------------------
+
+# start an office if the parameter is set for the makefile
+.IF "$(OFFICE)" == ""
+CT_APPEXECCOMMAND =
+.ELSE
+CT_APPEXECCOMMAND = -AppExecutionCommand "$(OFFICE)$/soffice -accept=socket,host=localhost,port=8100;urp;"
+.ENDIF
+
+# test base is java complex
+CT_TESTBASE = -TestBase java_complex
+
+# build package name with "." instead of $/
+CT_PACKAGE  = -o $(PACKAGE:s\$/\.\)
+
+# start the runner application
+CT_APP      = org.openoffice.Runner
+
+# --- Targets ------------------------------------------------------
+
+.IF "$(depend)" == ""
+ALL: ALLTAR
+.ELSE
+ALL: ALLDEP
+.ENDIF
+
+.INCLUDE :  target.mk
+
+run: \
+    LoadDocuments
+
+RUN: run
+
+LoadDocuments:
+    +java -cp $(CLASSPATH) $(CT_APP) $(CT_APPEXECCOMMAND) $(CT_TESTBASE) -tdoc $(PWD)$/testdocuments $(CT_PACKAGE).LoadDocuments
+
diff --git a/writerfilter/qa/complex/ooxml/testdocuments/Table5CellBorders.docx b/writerfilter/qa/complex/ooxml/testdocuments/Table5CellBorders.docx
new file mode 100644
index 000000000000..6b278175601b
Binary files /dev/null and b/writerfilter/qa/complex/ooxml/testdocuments/Table5CellBorders.docx differ
diff --git a/writerfilter/qa/complex/ooxml/testdocuments/TableDifferentColumns.docx b/writerfilter/qa/complex/ooxml/testdocuments/TableDifferentColumns.docx
new file mode 100644
index 000000000000..0503327ddecd
Binary files /dev/null and b/writerfilter/qa/complex/ooxml/testdocuments/TableDifferentColumns.docx differ
diff --git a/writerfilter/qa/complex/ooxml/testdocuments/TablePreferredWidth.docx b/writerfilter/qa/complex/ooxml/testdocuments/TablePreferredWidth.docx
new file mode 100644
index 000000000000..719b3888a018
Binary files /dev/null and b/writerfilter/qa/complex/ooxml/testdocuments/TablePreferredWidth.docx differ
diff --git a/writerfilter/qa/complex/ooxml/testdocuments/TableRowProperties.docx b/writerfilter/qa/complex/ooxml/testdocuments/TableRowProperties.docx
new file mode 100644
index 000000000000..775d63c97b34
Binary files /dev/null and b/writerfilter/qa/complex/ooxml/testdocuments/TableRowProperties.docx differ
-- 
cgit 


From 881712e2732b3bc41416e136ad54054cfbe6b496 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 24 Feb 2010 16:29:55 +0100
Subject: writerfilter08: updated some status annotations

---
 writerfilter/source/dmapper/DomainMapper.cxx | 40 ++++++++++++++--------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 1dc49f997794..f5d6698c1730 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -3737,43 +3737,43 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
     break;
 
     case NS_ooxml::LN_CT_PPr_sectPr:
-        /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
     case NS_ooxml::LN_EG_RPrBase_color:
-        /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
     case NS_ooxml::LN_EG_RPrBase_rFonts:
-        /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
     case NS_ooxml::LN_EG_RPrBase_bdr:
-        /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
     case NS_ooxml::LN_EG_RPrBase_eastAsianLayout:
-        /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
     case NS_ooxml::LN_EG_RPrBase_u:
-        /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
     case NS_ooxml::LN_EG_RPrBase_lang:
-        /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
     case NS_ooxml::LN_CT_PPrBase_spacing:
-        /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
     case NS_ooxml::LN_CT_PPrBase_ind:
-        /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
     case NS_ooxml::LN_CT_RPrDefault_rPr:
-        /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
     case NS_ooxml::LN_CT_PPrDefault_pPr:
-        /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
     case NS_ooxml::LN_CT_DocDefaults_pPrDefault:
-        /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
     case NS_ooxml::LN_CT_DocDefaults_rPrDefault:
-        /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
     case NS_ooxml::LN_CT_Style_pPr:
-        /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
     case NS_ooxml::LN_CT_Style_rPr:
-        /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
     case NS_ooxml::LN_CT_PPr_rPr:
-        /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
     case NS_ooxml::LN_CT_PPrBase_numPr:
-        /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
         resolveSprmProps(rSprm);
     break;
     case NS_ooxml::LN_EG_SectPrContents_footnotePr:
-        /* WRITERFILTERSTATUS: done: 1ß0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
     case NS_ooxml::LN_EG_SectPrContents_endnotePr:
         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
         m_pImpl->SetInFootnoteProperties( NS_ooxml::LN_EG_SectPrContents_footnotePr == nSprmId );
@@ -3995,7 +3995,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
     }
     break;
     case NS_sprm::LN_CFNoProof: //0x875 no grammar and spell checking, unsupported
-        /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
     break;
     case NS_ooxml::LN_anchor_anchor: // at_character drawing
         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
@@ -4155,7 +4155,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
         //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
-            /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+            /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
     break;
     case NS_ooxml::LN_CT_Lvl_pStyle:
             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
-- 
cgit 


From 79854554290e70219612c1d69b4943e2598d294e Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 25 Feb 2010 14:09:14 +0100
Subject: writerfilter08: handle CT_DocGrid

---
 writerfilter/source/dmapper/DomainMapper.cxx      | 39 +++++++++++++++++------
 writerfilter/source/dmapper/DomainMapper_Impl.cxx | 15 +++++++++
 writerfilter/source/dmapper/DomainMapper_Impl.hxx |  2 +-
 writerfilter/source/ooxml/dummyannotate.xsl       |  2 +-
 writerfilter/source/ooxml/model.xml               | 11 +++++--
 5 files changed, 54 insertions(+), 15 deletions(-)

diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index f5d6698c1730..dd7e2dbaad08 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -201,6 +201,9 @@ void DomainMapper::attribute(Id nName, Value & val)
     static ::rtl::OUString sLocalBookmarkName;
     sal_Int32 nIntValue = val.getInt();
     rtl::OUString sStringValue = val.getString();
+
+    SectionPropertyMap * pSectionContext = m_pImpl->GetSectionContext();
+
     // 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 );
@@ -2131,6 +2134,26 @@ void DomainMapper::attribute(Id nName, Value & val)
     case NS_ooxml::LN_endtrackchange:
         m_pImpl->RemoveCurrentRedline( );
     break;
+    case NS_ooxml::LN_CT_DocGrid_linePitch:
+            /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+            {
+                //see SwWW8ImplReader::SetDocumentGrid
+                OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+                if(pSectionContext)
+                {
+                    pSectionContext->SetGridLinePitch( ConversionHelper::convertTwipToMM100( nIntValue ) );
+                }
+            }
+        break;
+            case NS_ooxml::LN_CT_DocGrid_charSpace:
+                /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+            {
+                OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+                if(pSectionContext)
+                {
+                    pSectionContext->SetDxtCharSpace( nIntValue );
+                }
+            }
         default:
             {
 #if OSL_DEBUG_LEVEL > 0
@@ -2174,14 +2197,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
 
     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() );
-    }
+    SectionPropertyMap * pSectionContext = m_pImpl->GetSectionContext();
 
     //TODO: In rtl-paragraphs the meaning of left/right are to be exchanged
     bool bExchangeLeftRight = false;
@@ -3507,7 +3523,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
         break;
     case NS_sprm::LN_SDxtCharSpace:
     {
-        /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
         if(pSectionContext)
         {
@@ -3517,7 +3533,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
     break;  // sprmSDxtCharSpace
     case NS_sprm::LN_SDyaLinePitch:   // sprmSDyaLinePitch
     {
-        /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
         //see SwWW8ImplReader::SetDocumentGrid
         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
         if(pSectionContext)
@@ -3900,6 +3916,9 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
         }
     }
     break;
+    case NS_ooxml::LN_EG_SectPrContents_docGrid:
+        resolveSprmProps(rSprm);
+    break;
     case NS_ooxml::LN_EG_SectPrContents_pgBorders:
     {
         writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 828246513561..caaf34e465b2 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -3749,4 +3749,19 @@ void DomainMapper_Impl::ApplySettingsTable()
         }
     }
 }
+
+SectionPropertyMap * DomainMapper_Impl::GetSectionContext()
+{
+    SectionPropertyMap* pSectionContext = 0;
+    //the section context is not availabe before the first call of startSectionGroup()
+    if( !IsAnyTableImport() )
+    {
+        PropertyMapPtr pContext = GetTopContextOfType(CONTEXT_SECTION);
+        OSL_ENSURE(pContext.get(), "Section context is not in the stack!");
+        pSectionContext = dynamic_cast< SectionPropertyMap* >( pContext.get() );
+    }
+
+    return pSectionContext;
+}
+
 }}
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 7cdd0b5a335a..4fd24cb0eae0 100755
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -539,7 +539,7 @@ public:
     void ResetParaRedline( );
 
     void ApplySettingsTable();
-
+    SectionPropertyMap * GetSectionContext();
 };
 } //namespace dmapper
 } //namespace writerfilter
diff --git a/writerfilter/source/ooxml/dummyannotate.xsl b/writerfilter/source/ooxml/dummyannotate.xsl
index 52a960e73a28..02be746c95bf 100644
--- a/writerfilter/source/ooxml/dummyannotate.xsl
+++ b/writerfilter/source/ooxml/dummyannotate.xsl
@@ -842,7 +842,7 @@ sed "s/wml/</xsl:text>
 
   <xsl:template match="/">
     <out>
-      <xsl:apply-templates select="//rng:define[@name='OLEObject']" 
+      <xsl:apply-templates select="//rng:define[@name='CT_DocGrid']" 
                            mode='resourcesPropertySetValue'/>
     </out>
   </xsl:template>
diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
index f571a50a9407..8340e4c65ba4 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -15750,15 +15750,15 @@
       </define>
       <define name="CT_DocGrid">
         <attribute name="type">
-          <text/>
+          <ref name="ST_DocGrid"/>
           <xs:documentation>Document Grid Type</xs:documentation>
         </attribute>
         <attribute name="linePitch">
-          <text/>
+          <ref name="ST_DecimalNumber"/>
           <xs:documentation>Document Grid Line Pitch</xs:documentation>
         </attribute>
         <attribute name="charSpace">
-          <text/>
+          <ref name="ST_DecimalNumber"/>
           <xs:documentation>Document Grid Character Pitch</xs:documentation>
         </attribute>
       </define>
@@ -22209,6 +22209,11 @@
       <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="CT_DocGrid" resource="Properties">
+      <attribute name="type" tokenid="ooxml:CT_DocGrid_type"/>
+      <attribute name="linePitch" tokenid="ooxml:CT_DocGrid_linePitch"/>
+      <attribute name="charSpace" tokenid="ooxml:CT_DocGrid_charSpace"/>
+    </resource>
     <resource name="ST_HdrFtr" resource="List">
       <value tokenid="ooxml:Value_ST_HrdFtr_even">even</value>
       <value tokenid="ooxml:Value_ST_HrdFtr_default">default</value>
-- 
cgit 


From 0927cc05d86fbeb747396a0e5788d288f4f41baf Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 25 Feb 2010 15:38:32 +0100
Subject: writerfilter08: keep grid 'type' in SectionPropertyMap and evaluate
 in closeSectionGroup

---
 writerfilter/source/dmapper/DomainMapper.cxx | 10 ++++++++++
 writerfilter/source/dmapper/PropertyMap.cxx  | 20 +++++++++++++++++++-
 writerfilter/source/dmapper/PropertyMap.hxx  |  2 ++
 3 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index dd7e2dbaad08..3aea75d7549c 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -2154,6 +2154,16 @@ void DomainMapper::attribute(Id nName, Value & val)
                     pSectionContext->SetDxtCharSpace( nIntValue );
                 }
             }
+            break;
+            case NS_ooxml::LN_CT_DocGrid_type:
+                /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+            {
+                if (pSectionContext != NULL)
+                {
+                    pSectionContext->SetGridType(nIntValue);
+                }
+            }
+            break;
         default:
             {
 #if OSL_DEBUG_LEVEL > 0
diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx
index 95340eb054a4..86f41ecf5de8 100644
--- a/writerfilter/source/dmapper/PropertyMap.cxx
+++ b/writerfilter/source/dmapper/PropertyMap.cxx
@@ -42,6 +42,7 @@
 #include <com/sun/star/text/WritingMode.hpp>
 #include <com/sun/star/text/XTextColumns.hpp>
 #include <com/sun/star/text/XText.hpp>
+#include <com/sun/star/text/TextGridMode.hpp>
 #include "dmapperLoggers.hxx"
 #include "PropertyMapHelper.hxx"
 
@@ -245,6 +246,7 @@ SectionPropertyMap::SectionPropertyMap(bool bIsFirstSection) :
     ,m_nDzaGutter( 0 )
     ,m_bGutterRTL( false )
     ,m_bSFBiDi( false )
+    ,m_nGridType(0)
     ,m_nGridLinePitch( 1 )
     ,m_nDxtCharSpace( 0 )
     ,m_nLnnMod( 0 )
@@ -275,7 +277,7 @@ SectionPropertyMap::SectionPropertyMap(bool bIsFirstSection) :
     uno::Any aFalse( ::uno::makeAny( false ) );
     Insert( PROP_GRID_DISPLAY, false, aFalse);
     Insert( PROP_GRID_PRINT, false, aFalse);
-
+    Insert( PROP_GRID_MODE, false, uno::makeAny(text::TextGridMode::NONE));
 
 
     if( m_bIsFirstSection )
@@ -818,6 +820,22 @@ void SectionPropertyMap::CloseSectionGroup( DomainMapper_Impl& rDM_Impl )
             nRubyHeight = 0;
         operator[]( PropertyDefinition( PROP_GRID_RUBY_HEIGHT, false )) = uno::makeAny( nRubyHeight );
 
+        sal_Int16 nGridMode = text::TextGridMode::NONE;
+
+        switch (m_nGridType)
+        {
+            case NS_ooxml::LN_Value_wordprocessingml_ST_DocGrid_lines:
+                nGridMode = text::TextGridMode::LINES;
+                break;
+            case NS_ooxml::LN_Value_wordprocessingml_ST_DocGrid_linesAndChars:
+                nGridMode = text::TextGridMode::LINES_AND_CHARS;
+                break;
+            default:
+                break;
+        }
+
+        operator[](PropertyDefinition(PROP_GRID_MODE, false)) = uno::makeAny(nGridMode);
+
         _ApplyProperties( xFollowPageStyle );
 
         //todo: creating a "First Page" style depends on HasTitlePage und _fFacingPage_
diff --git a/writerfilter/source/dmapper/PropertyMap.hxx b/writerfilter/source/dmapper/PropertyMap.hxx
index 6db501a14eea..a3b9f20bab72 100644
--- a/writerfilter/source/dmapper/PropertyMap.hxx
+++ b/writerfilter/source/dmapper/PropertyMap.hxx
@@ -196,6 +196,7 @@ class SectionPropertyMap : public PropertyMap
     bool                                    m_bGutterRTL;
     bool                                    m_bSFBiDi;
 
+    sal_Int32                               m_nGridType;
     sal_Int32                               m_nGridLinePitch;
     sal_Int32                               m_nDxtCharSpace;
 
@@ -268,6 +269,7 @@ public:
     void SetDzaGutter( sal_Int32 nSet ) {m_nDzaGutter = nSet; }
     void SetSFBiDi( bool bSet ) { m_bSFBiDi = bSet;}
 
+    void SetGridType(sal_Int32 nSet) { m_nGridType = nSet; }
     void SetGridLinePitch( sal_Int32 nSet ) { m_nGridLinePitch = nSet; }
     void SetDxtCharSpace( sal_Int32 nSet ) { m_nDxtCharSpace = nSet; }
 
-- 
cgit 


From 0b5175dec3ad8f382eff4abbc2a8f3c3b20fc3b8 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 25 Feb 2010 18:01:36 +0100
Subject: writerfilter08: handle keepLines (incomplete)

---
 writerfilter/source/dmapper/DomainMapper.cxx | 5 +++--
 writerfilter/source/dmapper/PropertyIds.cxx  | 2 +-
 writerfilter/source/dmapper/PropertyIds.hxx  | 1 +
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 3aea75d7549c..3ec0eceb7135 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -2245,8 +2245,9 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
         break;  // sprmPFSideBySide
 
     case NS_sprm::LN_PFKeep:   // sprmPFKeep
-        /* WRITERFILTERSTATUS: done: 0, planned: 3, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
         /* WRITERFILTERSTATUS: comment: */
+        rContext->Insert(PROP_PARA_SPLIT, true, uno::makeAny(nIntValue ? false : true));
         break;
     case NS_sprm::LN_PFKeepFollow:   // sprmPFKeepFollow
         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
@@ -2602,7 +2603,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
         break;  // sprmPFLocked
     case NS_sprm::LN_PFWidowControl:
     case NS_ooxml::LN_CT_PPrBase_widowControl:
-        /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
     {
         uno::Any aVal( uno::makeAny( sal_Int8(nIntValue ? 2 : 0 )));
         rContext->Insert( PROP_PARA_WIDOWS, true, aVal );
diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx
index 4d39b5495078..07195daa4de3 100644
--- a/writerfilter/source/dmapper/PropertyIds.cxx
+++ b/writerfilter/source/dmapper/PropertyIds.cxx
@@ -322,7 +322,7 @@ const rtl::OUString& PropertyNameSupplier::GetName( PropertyIds eId ) const
             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 PROP_PARA_SPLIT:    sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaSpit")); 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;
diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx
index c9d84cafbba7..c74808a0c39b 100644
--- a/writerfilter/source/dmapper/PropertyIds.hxx
+++ b/writerfilter/source/dmapper/PropertyIds.hxx
@@ -285,6 +285,7 @@ enum PropertyIds
 /*246*/ ,PROP_NUMBERING_STYLE_NAME
 /*247*/ ,PROP_LISTTAB_STOP_POSITION
 /*248*/ ,PROP_POSITION_AND_SPACE_MODE
+/*249*/, PROP_PARA_SPLIT
 };
 struct PropertyNameSupplier_Impl;
 class PropertyNameSupplier
-- 
cgit 


From 65d9371c0d22af2e0dc0ad9f0c5caff5997840a1 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Fri, 26 Feb 2010 17:00:48 +0100
Subject: writerfilter08: corrected name for PROP_PARA_SPLIT

---
 writerfilter/source/dmapper/PropertyIds.cxx | 2 +-
 writerfilter/source/dmapper/PropertyIds.hxx | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx
index 07195daa4de3..72d1555bdc39 100644
--- a/writerfilter/source/dmapper/PropertyIds.cxx
+++ b/writerfilter/source/dmapper/PropertyIds.cxx
@@ -322,7 +322,7 @@ const rtl::OUString& PropertyNameSupplier::GetName( PropertyIds eId ) const
             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 PROP_PARA_SPLIT:    sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaSpit")); break;
+            case PROP_PARA_SPLIT:    sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaSplit")); 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;
diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx
index c74808a0c39b..8137dd30e6a1 100644
--- a/writerfilter/source/dmapper/PropertyIds.hxx
+++ b/writerfilter/source/dmapper/PropertyIds.hxx
@@ -285,7 +285,7 @@ enum PropertyIds
 /*246*/ ,PROP_NUMBERING_STYLE_NAME
 /*247*/ ,PROP_LISTTAB_STOP_POSITION
 /*248*/ ,PROP_POSITION_AND_SPACE_MODE
-/*249*/, PROP_PARA_SPLIT
+/*249*/ ,PROP_PARA_SPLIT
 };
 struct PropertyNameSupplier_Impl;
 class PropertyNameSupplier
-- 
cgit 


From 1a92a19a53c94c63baeeaa651f707651ed58d619 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Mon, 1 Mar 2010 15:24:37 +0100
Subject: writerfilter08: PropertySetToTagHandler::sprm: correct representation
 for id of sprm

---
 writerfilter/source/resourcemodel/TagLogger.cxx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/writerfilter/source/resourcemodel/TagLogger.cxx b/writerfilter/source/resourcemodel/TagLogger.cxx
index b5fe9f311db0..26e0d1288c43 100644
--- a/writerfilter/source/resourcemodel/TagLogger.cxx
+++ b/writerfilter/source/resourcemodel/TagLogger.cxx
@@ -356,7 +356,7 @@ namespace writerfilter
 
         static char sBuffer[256];
         snprintf(sBuffer, sizeof(sBuffer),
-                 "0x%" SAL_PRIxUINT32 "x, %" SAL_PRIxUINT32 "d", rSprm.getId(),
+                 "0x%" SAL_PRIxUINT32 ", %" SAL_PRIuUINT32, rSprm.getId(),
                  rSprm.getId());
         pTag->addAttr("id", sBuffer);
         pTag->addAttr("value", rSprm.getValue()->toString());
-- 
cgit 


From 64d5c0c3f17744e813dac8ae80b04d03771e0fab Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Mon, 1 Mar 2010 15:25:39 +0100
Subject: writerfilter08: handle <bidi>

---
 writerfilter/source/dmapper/DomainMapper.cxx | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 3ec0eceb7135..49a326898e63 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -72,6 +72,7 @@
 #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/WritingMode2.hpp>
 #include <com/sun/star/text/XFootnote.hpp>
 #include <com/sun/star/style/NumberingType.hpp>
 #include <comphelper/types.hxx>
@@ -2660,7 +2661,10 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
         }
         break;  // sprmPOutLvl
     case NS_sprm::LN_PFBiDi:
-        /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+            rContext->Insert(PROP_WRITING_MODE, false, uno::makeAny( text::WritingMode2::RL_TB ));
+            rContext->Insert(PROP_PARA_ADJUST, false, uno::makeAny( style::ParagraphAdjust_RIGHT ));
+
         break;  // sprmPFBiDi
     case NS_sprm::LN_PFNumRMIns:
         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
-- 
cgit 


From 45097a9dfc99f2b9b77038226950659bc6d80c8d Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 2 Mar 2010 11:01:53 +0100
Subject: writerfilter08: handle textDirection on sectPr

---
 writerfilter/source/dmapper/DomainMapper.cxx | 14 ++++++++++++--
 writerfilter/source/ooxml/model.xml          | 10 +++++-----
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 49a326898e63..6f0e477ea701 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -3593,8 +3593,9 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
     }
     break;  // sprmSClm
     case NS_sprm::LN_STextFlow:
-    {
+    case NS_ooxml::LN_EG_SectPrContents_textDirection:
         /* 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
           */
@@ -3612,7 +3613,16 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
             break;
             default:;
         }
-        rContext->Insert(PROP_WRITING_MODE, false, uno::makeAny( nDirection ) );
+
+        PropertyMap * pTargetContext = rContext.get();
+
+        if (pSectionContext != NULL &&
+            nSprmId == NS_ooxml::LN_EG_SectPrContents_textDirection)
+        {
+            pTargetContext = pSectionContext;
+        }
+
+        pTargetContext->Insert(PROP_WRITING_MODE, false, uno::makeAny( nDirection ) );
     }
     break;  // sprmSTextFlow
     case NS_sprm::LN_TJc: // sprmTJc
diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
index 8340e4c65ba4..dfd397a88516 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -21754,11 +21754,11 @@
       <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="0">lrTb</value>
+      <value tokenid="1">tbRl</value>
+      <value tokenid="3">btLr</value>
+      <value tokenid="4">lrTbV</value>
+      <value tokenid="5">tbRlV</value>
       <value tokenid="ooxml:Value_ST_TextDirection_tbLrV">tbLrV</value>
     </resource>
     <resource name="CT_TextDirection" resource="Value">
-- 
cgit 


From bb3b79327878c2fd80291d3851b636f900a79f85 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 2 Mar 2010 14:30:04 +0100
Subject: writerfilter08: handle bidi for sections

---
 writerfilter/source/dmapper/DomainMapper.cxx | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 6f0e477ea701..121e5aa7f228 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -2666,6 +2666,11 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
             rContext->Insert(PROP_PARA_ADJUST, false, uno::makeAny( style::ParagraphAdjust_RIGHT ));
 
         break;  // sprmPFBiDi
+    case NS_ooxml::LN_EG_SectPrContents_bidi:
+        /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+        if (pSectionContext != NULL)
+            pSectionContext->Insert(PROP_WRITING_MODE,false, uno::makeAny( text::WritingMode2::RL_TB));
+        break;
     case NS_sprm::LN_PFNumRMIns:
         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
         break;  // sprmPFNumRMIns
-- 
cgit 


From 292cf65b2db6f089b9972400ea2d34eb66509343 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 2 Mar 2010 14:40:18 +0100
Subject: writerfilter08: vetical alignment on page not supported in ODT

---
 writerfilter/source/dmapper/DomainMapper.cxx | 1 +
 1 file changed, 1 insertion(+)

diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 121e5aa7f228..a88dcc1acea2 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -4204,6 +4204,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
         //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
+    case NS_ooxml::LN_EG_SectPrContents_vAlign:
             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
     break;
     case NS_ooxml::LN_CT_Lvl_pStyle:
-- 
cgit 


From a2ce50f90ebf20079b494df88a403fca370ad3f0 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 2 Mar 2010 14:45:44 +0100
Subject: writerfilter08: fitText not supported in ODT

---
 writerfilter/source/dmapper/DomainMapper.cxx | 1 +
 1 file changed, 1 insertion(+)

diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index a88dcc1acea2..d14966ec240c 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -4205,6 +4205,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
     break;
     case NS_ooxml::LN_EG_SectPrContents_formProt: //section protection, only form editing is enabled - unsupported
     case NS_ooxml::LN_EG_SectPrContents_vAlign:
+    case NS_ooxml::LN_EG_RPrBase_fitText:
             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
     break;
     case NS_ooxml::LN_CT_Lvl_pStyle:
-- 
cgit 


From 3fc15c3965fd2ba838ede12817c351c3c5eee085 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 2 Mar 2010 15:33:04 +0100
Subject: writerfilter08: emphasis already implemented

---
 writerfilter/source/dmapper/DomainMapper.cxx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index d14966ec240c..183e0a685b27 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -2757,7 +2757,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
         break;  // sprmCPlain
     case NS_sprm::LN_CKcd:
-        /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
         rContext->Insert(PROP_CHAR_EMPHASIS, true, uno::makeAny ( getEmphasisValue (nIntValue)));
         break;  // sprmCKcd
     case NS_sprm::LN_CFEmboss:// sprmCFEmboss
-- 
cgit 


From dbded67ff2baa697ca2b2c475f368527515fb173 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 2 Mar 2010 15:50:00 +0100
Subject: writerfilter08: shading not supported on characters in ODT

---
 writerfilter/source/dmapper/DomainMapper.cxx | 1 +
 1 file changed, 1 insertion(+)

diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 183e0a685b27..87da80a68570 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -4206,6 +4206,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
     case NS_ooxml::LN_EG_SectPrContents_formProt: //section protection, only form editing is enabled - unsupported
     case NS_ooxml::LN_EG_SectPrContents_vAlign:
     case NS_ooxml::LN_EG_RPrBase_fitText:
+    case NS_ooxml::LN_EG_RPrBase_shd:
             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
     break;
     case NS_ooxml::LN_CT_Lvl_pStyle:
-- 
cgit 


From c2a270a21650a16df00ac5c5f1307e15bda7195e Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 2 Mar 2010 16:38:28 +0100
Subject: writerfilter08: changed some tokenids and effort annotation

---
 writerfilter/source/dmapper/DomainMapper.cxx | 5 ++---
 writerfilter/source/ooxml/model.xml          | 4 ++--
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 87da80a68570..f169006e81ef 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -2729,7 +2729,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
         break;  // sprmCIdCharType
     case NS_sprm::LN_CHighlight:
-        /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
         {
             sal_Int32 nColor = 0;
             if(true ==( mbIsHighlightSet = getColorFromIndex(nIntValue, nColor)))
@@ -3137,7 +3137,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
         break;  // sprmCBrc
     case NS_sprm::LN_CShd:
-        /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
         break;  // sprmCShd
     case NS_sprm::LN_CIdslRMarkDel:
         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
@@ -4206,7 +4206,6 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
     case NS_ooxml::LN_EG_SectPrContents_formProt: //section protection, only form editing is enabled - unsupported
     case NS_ooxml::LN_EG_SectPrContents_vAlign:
     case NS_ooxml::LN_EG_RPrBase_fitText:
-    case NS_ooxml::LN_EG_RPrBase_shd:
             /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
     break;
     case NS_ooxml::LN_CT_Lvl_pStyle:
diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
index dfd397a88516..af4e24cc361e 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -22439,10 +22439,10 @@
       <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="shd" tokenid="sprm:CShd"/>
       <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="rtl" tokenid="sprm:CFBiDi"/>
       <element name="cs" tokenid="sprm:CComplexScript"/>
       <element name="em" tokenid="sprm:CKcd"/>
       <element name="lang" tokenid="ooxml:EG_RPrBase_lang"/>
-- 
cgit 


From 3de7b648e354a9e1f5d531148295d86355a43b42 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 2 Mar 2010 16:42:00 +0100
Subject: writerfilter08: effect on run already handled

---
 writerfilter/source/dmapper/DomainMapper.cxx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index f169006e81ef..f8611ae5ab35 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -3107,7 +3107,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
         break;  // sprmCPropRMark
     case NS_sprm::LN_CSfxText:
-        /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+        /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
         // The file-format has many character animations. We have only
         // one, so we use it always. Suboptimal solution though.
         if (nIntValue)
-- 
cgit 


From 58afaf1930aef4406925365354ea87abc9e65cd6 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 3 Mar 2010 15:14:11 +0100
Subject: writerfilter08: factoryimpl_ns.xsl: handle rng:ref first (makes
 difference for bookmarks)

---
 writerfilter/source/ooxml/factoryimpl_ns.xsl | 90 ++++++++++++++--------------
 1 file changed, 45 insertions(+), 45 deletions(-)

diff --git a/writerfilter/source/ooxml/factoryimpl_ns.xsl b/writerfilter/source/ooxml/factoryimpl_ns.xsl
index 55d986932aec..69bc3281e3fa 100644
--- a/writerfilter/source/ooxml/factoryimpl_ns.xsl
+++ b/writerfilter/source/ooxml/factoryimpl_ns.xsl
@@ -150,6 +150,13 @@ for a rng:define
 
  -->
 <xsl:template name="factoryattributetoresourcemapinner">
+  <xsl:for-each select=".//rng:ref[not(ancestor::rng:element or ancestor::rng:attribute)]">
+    <xsl:variable name="name" select="@name"/>
+    <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$name]">
+        <xsl:call-template name="factoryattributetoresourcemapinner"/>
+    </xsl:for-each>
+  </xsl:for-each>
+
   <xsl:for-each select=".//rng:attribute">
     <xsl:variable name="mynsid" select="generate-id(ancestor::namespace)"/>
     <xsl:variable name="resource">
@@ -201,13 +208,6 @@ for a rng:define
     </xsl:choose>
     
   </xsl:for-each>
-  
-  <xsl:for-each select=".//rng:ref[not(ancestor::rng:element or ancestor::rng:attribute)]">
-    <xsl:variable name="name" select="@name"/>
-    <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$name]">
-        <xsl:call-template name="factoryattributetoresourcemapinner"/>
-    </xsl:for-each>
-  </xsl:for-each>
 </xsl:template>
 
 <!-- factoryattributetoresourcemap -->
@@ -283,25 +283,6 @@ ListValueMapPointer </xsl:text>
 
 <!-- factoryelementtoresorucemapinner -->
 <xsl:template name="factorycreateelementmapinner">
-    <xsl:for-each select=".//rng:element">
-        <xsl:variable name="resource">
-            <xsl:for-each select="rng:ref">
-                <xsl:call-template name="contextresource"/>
-            </xsl:for-each>
-        </xsl:variable>
-        <xsl:if test="string-length($resource) > 0">
-            <xsl:text>
-        (*pMap)[</xsl:text>
-            <xsl:call-template name="fasttoken"/>
-            <xsl:text>] = CreateElement(RT_</xsl:text>
-            <xsl:value-of select="$resource"/>
-            <xsl:text>, </xsl:text>
-            <xsl:for-each select="rng:ref">
-                <xsl:call-template name="idforref"/>
-            </xsl:for-each>
-            <xsl:text>);</xsl:text>
-        </xsl:if>
-    </xsl:for-each>
     <xsl:for-each select=".//rng:ref[not(ancestor::rng:element or ancestor::rng:attribute)]">
         <xsl:variable name="name" select="@name"/>
         <xsl:variable name="block">
@@ -329,6 +310,25 @@ ListValueMapPointer </xsl:text>
             <xsl:value-of select="$block1"/>
         </xsl:if>
     </xsl:for-each>
+    <xsl:for-each select=".//rng:element">
+        <xsl:variable name="resource">
+            <xsl:for-each select="rng:ref">
+                <xsl:call-template name="contextresource"/>
+            </xsl:for-each>
+        </xsl:variable>
+        <xsl:if test="string-length($resource) > 0">
+            <xsl:text>
+        (*pMap)[</xsl:text>
+            <xsl:call-template name="fasttoken"/>
+            <xsl:text>] = CreateElement(RT_</xsl:text>
+            <xsl:value-of select="$resource"/>
+            <xsl:text>, </xsl:text>
+            <xsl:for-each select="rng:ref">
+                <xsl:call-template name="idforref"/>
+            </xsl:for-each>
+            <xsl:text>);</xsl:text>
+        </xsl:if>
+    </xsl:for-each>
 </xsl:template>
 
 <xsl:template name="factorycreateelementmapfromstart">
@@ -610,6 +610,25 @@ string </xsl:text>
 
 <xsl:template name="factorytokentoidmapinner">
     <xsl:variable name="name" select="@name"/>
+    <xsl:for-each select=".//rng:ref[not(ancestor::rng:element or ancestor::rng:attribute)]">
+        <xsl:variable name="refname" select="@name"/>
+	<xsl:variable name="refblock1">
+	    <xsl:for-each 
+		select="ancestor::rng:grammar/rng:define[@name=$refname]">
+	      <xsl:call-template name="factorytokentoidmapinner"/>
+	    </xsl:for-each>
+	</xsl:variable>
+	<xsl:choose>
+	  <xsl:when test="string-length($refblock1) = 0">
+	    <xsl:for-each select="ancestor::model/namespace/rng:grammar/rng:define[@name=$refname]">
+		<xsl:call-template name="factorytokentoidmapinner"/>
+	      </xsl:for-each>
+	  </xsl:when>
+	  <xsl:otherwise>
+	    <xsl:value-of select="$refblock1"/>
+	  </xsl:otherwise>
+	</xsl:choose>
+    </xsl:for-each>
     <xsl:variable name="body">
         <xsl:for-each select="ancestor::namespace/resource[@name=$name]">
             <xsl:for-each select="element[@tokenid]|attribute[@tokenid]">
@@ -630,25 +649,6 @@ string </xsl:text>
         <xsl:value-of select="$name"/>
         <xsl:value-of select="$body"/>
     </xsl:if>
-    <xsl:for-each select=".//rng:ref[not(ancestor::rng:element or ancestor::rng:attribute)]">
-        <xsl:variable name="refname" select="@name"/>
-	<xsl:variable name="refblock1">
-	    <xsl:for-each 
-		select="ancestor::rng:grammar/rng:define[@name=$refname]">
-	      <xsl:call-template name="factorytokentoidmapinner"/>
-	    </xsl:for-each>
-	</xsl:variable>
-	<xsl:choose>
-	  <xsl:when test="string-length($refblock1) = 0">
-	    <xsl:for-each select="ancestor::model/namespace/rng:grammar/rng:define[@name=$refname]">
-		<xsl:call-template name="factorytokentoidmapinner"/>
-	      </xsl:for-each>
-	  </xsl:when>
-	  <xsl:otherwise>
-	    <xsl:value-of select="$refblock1"/>
-	  </xsl:otherwise>
-	</xsl:choose>
-    </xsl:for-each>
 </xsl:template>
 
 <xsl:template name="factorytokentoidmap">
-- 
cgit 


From 77b814e67ce1f3dd07fd2501394587c494d51b23 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 3 Mar 2010 15:15:24 +0100
Subject: writerfilter08: added annotation for EG_RangeMarkupElements

---
 writerfilter/source/ooxml/model.xml | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
index af4e24cc361e..85a58e160f3b 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -21855,6 +21855,24 @@
       <action name="start" action="clearProps"/>
       <action name="end" action="mark" sendtokenid="ooxml:endtrackchange"/>
     </resource>
+    <resource name="EG_RangeMarkupElements" resource="Properties">
+      <element name="bookmarkStart" tokenid="ooxml:EG_RangeMarkupElements_bookmarkStart"/>
+      <element name="bookmarkEnd" tokenid="ooxml:EG_RangeMarkupElements_bookmarkEnd"/>
+      <element name="moveFromRangeStart" tokenid="ooxml:EG_RangeMarkupElements_moveFromRangeStart"/>
+      <element name="moveFromRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_moveFromRangeEnd"/>
+      <element name="moveToRangeStart" tokenid="ooxml:EG_RangeMarkupElements_moveToRangeStart"/>
+      <element name="moveToRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_moveToRangeEnd"/>
+      <element name="commentRangeStart" tokenid="ooxml:EG_RangeMarkupElements_commentRangeStart"/>
+      <element name="commentRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_commentRangeEnd"/>
+      <element name="customXmlInsRangeStart" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeStart"/>
+      <element name="customXmlInsRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeEnd"/>
+      <element name="customXmlDelRangeStart" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeStart"/>
+      <element name="customXmlDelRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeEnd"/>
+      <element name="customXmlMoveFromRangeStart" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeStart"/>
+      <element name="customXmlMoveFromRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeEnd"/>
+      <element name="customXmlMoveToRangeStart" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeStart"/>
+      <element name="customXmlMoveToRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeEnd"/>
+    </resource>
     <resource name="CT_NumPr" resource="Properties">
       <kind name="paragraph"/>
       <element name="ilvl" tokenid="sprm:PIlvl"/>
-- 
cgit 


From ada37ba79d4cd2d681895fc1ae6da20b0d0653c1 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 4 Mar 2010 11:01:04 +0100
Subject: writerfilter08: handle hyperlinks into local document

---
 writerfilter/source/dmapper/DomainMapper_Impl.cxx | 106 +++++++++++++++++++++-
 writerfilter/source/dmapper/DomainMapper_Impl.hxx |   1 +
 2 files changed, 103 insertions(+), 4 deletions(-)

diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index caaf34e465b2..49f2bb84533f 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -2565,6 +2565,66 @@ void FieldContext::AppendCommand(const ::rtl::OUString& rPart)
 {
     m_sCommand += rPart;
 }
+
+::std::vector<rtl::OUString> FieldContext::GetCommandParts() const
+{
+    ::std::vector<rtl::OUString> aResult;
+    sal_Int32 nIndex = 0;
+    bool bInString = false;
+    OUString sPart;
+    while (nIndex != -1)
+    {
+        OUString sToken = GetCommand().getToken(0, ' ', nIndex);
+        bool bInStringNext = bInString;
+
+        ::std::string sToken2 = OUStringToOString(sToken, RTL_TEXTENCODING_ASCII_US).getStr();
+        ::std::clog << "GetCommandParts:" << sToken2 << ::std::endl;
+
+        if (sToken.getLength() == 0)
+            continue;
+
+        if (sToken.getStr()[0] == '"')
+        {
+            bInStringNext = true;
+            sToken = sToken.copy(1);
+        }
+        if (sToken.getStr()[sToken.getLength() - 1] == '"')
+        {
+            bInStringNext = false;
+            sToken = sToken.copy(0, sToken.getLength() - 1);
+        }
+
+        if (bInString)
+        {
+            if (bInStringNext)
+            {
+                sPart += OUString(' ');
+                sPart += sToken;
+            }
+            else
+            {
+                sPart += sToken;
+                aResult.push_back(sPart);
+            }
+        }
+        else
+        {
+            if (bInStringNext)
+            {
+                sPart = sToken;
+            }
+            else
+            {
+                aResult.push_back(sToken);
+            }
+        }
+
+        bInString = bInStringNext;
+    }
+
+    return aResult;
+}
+
 /*-- 29.01.2007 11:33:15---------------------------------------------------
 //collect the pieces of the command
   -----------------------------------------------------------------------*/
@@ -2902,10 +2962,48 @@ void DomainMapper_Impl::CloseFieldCommand()
                     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) );
+                        ::std::vector<rtl::OUString> aParts = pContext->GetCommandParts();
+                        ::std::vector<rtl::OUString>::const_iterator aItEnd = aParts.end();
+                        ::std::vector<rtl::OUString>::const_iterator aIt = aParts.begin();
+
+                        OUString sURL;
+
+                        while (aIt != aItEnd)
+                        {
+                            if (aIt->equalsAscii("\\l"))
+                            {
+                                aIt++;
+
+                                if (aIt == aItEnd)
+                                    break;
+
+                                sURL = OUString('#');
+                                sURL += *aIt;
+                            }
+                            else if (aIt->equalsAscii("\\m") ||
+                                     aIt->equalsAscii("\\n"))
+                            {
+                            }
+                            else if (aIt->equalsAscii("\\o") ||
+                                     aIt->equalsAscii("\\t"))
+                            {
+                                aIt++;
+
+                                if (aIt == aItEnd)
+                                    break;
+                            }
+                            else
+                            {
+                                sURL = *aIt;
+                            }
+
+                            aIt++;
+                        }
+
+                        if (sURL.getLength() > 0)
+                        {
+                            pContext->SetHyperlinkURL(sURL);
+                        }
                     }
                     break;
                     case FIELD_IF           : break;
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 4fd24cb0eae0..143f17a157f4 100755
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -163,6 +163,7 @@ public:
     void    SetHyperlinkURL( const ::rtl::OUString& rURL ) { m_sHyperlinkURL = rURL; }
     const ::rtl::OUString&                                                      GetHyperlinkURL() { return m_sHyperlinkURL; }
 
+    ::std::vector<rtl::OUString> GetCommandParts() const;
 };
 
 struct TextAppendContext
-- 
cgit 


From 9200806db9be029d48aa70d2a0371947fb2ce0a8 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 4 Mar 2010 14:46:35 +0100
Subject: writerfilter08: removed debug code

---
 writerfilter/source/dmapper/DomainMapper_Impl.cxx | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 49f2bb84533f..bf112c6dee10 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -2577,9 +2577,6 @@ void FieldContext::AppendCommand(const ::rtl::OUString& rPart)
         OUString sToken = GetCommand().getToken(0, ' ', nIndex);
         bool bInStringNext = bInString;
 
-        ::std::string sToken2 = OUStringToOString(sToken, RTL_TEXTENCODING_ASCII_US).getStr();
-        ::std::clog << "GetCommandParts:" << sToken2 << ::std::endl;
-
         if (sToken.getLength() == 0)
             continue;
 
-- 
cgit 


From 82f1935fdb078b8beadbe583c05a50a94776a964 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 4 Mar 2010 21:33:59 +0100
Subject: writerfilter08: debug code

---
 writerfilter/source/dmapper/StyleSheetTable.cxx |  8 +++---
 writerfilter/source/dmapper/ThemeTable.cxx      | 35 ++++++++++++++++++++++++-
 2 files changed, 38 insertions(+), 5 deletions(-)

diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index 9cafe6b640a4..4379d5470f6f 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -419,6 +419,7 @@ void StyleSheetTable::attribute(Id Name, Value & val)
 #ifdef DEBUG_DOMAINMAPPER
     dmapper_logger->startElement("StyleSheetTable.attribute");
     dmapper_logger->attribute("name", (*QNameToString::Instance())(Name));
+    dmapper_logger->attribute("value", val.toString());
 #endif
 
     OSL_ENSURE( m_pImpl->m_pCurrentEntry, "current entry has to be set here");
@@ -536,10 +537,9 @@ void StyleSheetTable::attribute(Id Name, Value & val)
         break;
         default:
         {
-            //----> debug
-            int nVal = val.getInt();
-            ++nVal;
-            //<---- debug
+#ifdef DEBUG_DOMAINMAPPER
+            dmapper_logger->element("unhandled");
+#endif
         }
         break;
     }
diff --git a/writerfilter/source/dmapper/ThemeTable.cxx b/writerfilter/source/dmapper/ThemeTable.cxx
index 216f31826d59..9b892149853d 100755
--- a/writerfilter/source/dmapper/ThemeTable.cxx
+++ b/writerfilter/source/dmapper/ThemeTable.cxx
@@ -34,6 +34,10 @@
 #include <ooxml/resourceids.hxx>
 #endif
 #include <stdio.h>
+#ifdef DEBUG_DOMAINMAPPER
+#include "dmapperLoggers.hxx"
+#include <resourcemodel/QNameToString.hxx>
+#endif
 
 namespace writerfilter {
 namespace dmapper
@@ -62,6 +66,11 @@ ThemeTable::~ThemeTable()
 
 void ThemeTable::attribute(Id Name, Value & val)
 {
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->startElement("ThemeTable.attribute");
+    dmapper_logger->attribute("name", (*QNameToString::Instance())(Name));
+    dmapper_logger->attribute("value", val.toString());
+#endif
     // 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());
@@ -75,12 +84,23 @@ void ThemeTable::attribute(Id Name, Value & val)
          break;
         default:
         {
+#ifdef DEBUG_DOMAINMAPPER
+            dmapper_logger->element("unhandled");
+#endif
         }
     }
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->endElement("ThemeTable.attribute");
+#endif
 }
 
 void ThemeTable::sprm(Sprm& rSprm)
 {
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->startElement("ThemeTable.sprm");
+    dmapper_logger->chars(rSprm.toString());
+#endif
+
     sal_uInt32 nSprmId = rSprm.getId();
     (void)nSprmId;
 
@@ -129,14 +149,27 @@ void ThemeTable::sprm(Sprm& rSprm)
     break;
     default:
         {
+#ifdef DEBUG_DOMAINMAPPER
+            dmapper_logger->element("unhandled");
+#endif
         }
     }
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->endElement("ThemeTable.sprm");
+#endif
 }
 
 void ThemeTable::entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
 {
-    // printf ( "ThemeTable::entry\n");
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->startElement("ThemeTable.entry");
+#endif
+
     ref->resolve(*this);
+
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->endElement("ThemeTable.entry");
+#endif
 }
 
 const ::rtl::OUString ThemeTable::getFontNameForTheme(const Id id) const
-- 
cgit 


From be73d14c1f743d20942285da44da077b10e43b16 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Fri, 5 Mar 2010 13:15:55 +0100
Subject: writerfilter08: handle document default style properties in
 StyleSheet

---
 writerfilter/source/dmapper/StyleSheetTable.cxx | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index 4379d5470f6f..893e221af3d9 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -601,8 +601,6 @@ void StyleSheetTable::sprm(Sprm & rSprm)
         break;
         case NS_ooxml::LN_CT_Style_tblPr: //contains table properties
         case NS_ooxml::LN_CT_Style_tblStylePr: //contains  to table properties
-        case NS_ooxml::LN_CT_DocDefaults_pPrDefault:
-        case NS_ooxml::LN_CT_DocDefaults_rPrDefault:
         case NS_ooxml::LN_CT_TblPrBase_tblInd: //table properties - at least width value and type
         case NS_ooxml::LN_EG_RPrBase_rFonts: //table fonts
         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
@@ -631,6 +629,13 @@ void StyleSheetTable::sprm(Sprm & rSprm)
             }
             break;
         }
+        case NS_ooxml::LN_CT_DocDefaults_pPrDefault:
+        case NS_ooxml::LN_CT_DocDefaults_rPrDefault:
+            /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+        {
+            resolveSprmProps(rSprm);
+        }
+            break;
         case NS_ooxml::LN_CT_PPrDefault_pPr:
         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
             m_pImpl->m_rDMapper.PushStyleSheetProperties( m_pImpl->m_pDefaultParaProps );
-- 
cgit 


From 23a76fefd83cc059b2baff760835514aed45a585 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Mon, 8 Mar 2010 17:58:38 +0100
Subject: writerfilter08: xsl for generating class (FFData)

---
 writerfilter/source/dmapper/DomainMapper.cxx      |  11 +-
 writerfilter/source/dmapper/DomainMapper_Impl.cxx |  23 +++
 writerfilter/source/dmapper/FFData.xml            |  25 +++
 writerfilter/source/dmapper/FFDataHandler.hxx     |  70 +++++++++
 writerfilter/source/dmapper/FFDataHanlder.cxx     |  27 ++++
 writerfilter/source/dmapper/genclass.xsl          | 180 ++++++++++++++++++++++
 6 files changed, 331 insertions(+), 5 deletions(-)
 create mode 100644 writerfilter/source/dmapper/FFData.xml
 create mode 100644 writerfilter/source/dmapper/FFDataHandler.hxx
 create mode 100644 writerfilter/source/dmapper/FFDataHanlder.cxx
 create mode 100644 writerfilter/source/dmapper/genclass.xsl

diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index f8611ae5ab35..5b6bffead0d4 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -4431,6 +4431,12 @@ 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 );
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->startElement("text");
+    dmapper_logger->chars(sText);
+    dmapper_logger->endElement("text");
+#endif
+
     try
     {
         if(len == 1)
@@ -4497,11 +4503,6 @@ void DomainMapper::text(const sal_uInt8 * data_, size_t len)
                 pContext.reset(new PropertyMap());
 
             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& )
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index bf112c6dee10..9c5e42c1dfb6 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -2523,6 +2523,10 @@ uno::Reference< beans::XPropertySet > DomainMapper_Impl::FindOrCreateFieldMaster
   -----------------------------------------------------------------------*/
 void DomainMapper_Impl::PushFieldContext()
 {
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->element("pushFieldContext");
+#endif
+
     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 >() );
@@ -2627,6 +2631,12 @@ void FieldContext::AppendCommand(const ::rtl::OUString& rPart)
   -----------------------------------------------------------------------*/
 void DomainMapper_Impl::AppendFieldCommand(::rtl::OUString& rPartOfCommand)
 {
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->startElement("appendFieldCommand");
+    dmapper_logger->chars(rPartOfCommand);
+    dmapper_logger->endElement("appendFieldCommand");
+#endif
+
     FieldContextPtr pContext = m_aFieldStack.top();
     OSL_ENSURE( pContext.get(), "no field context available");
     if( pContext.get() )
@@ -2643,6 +2653,10 @@ typedef std::multimap < sal_Int32, ::rtl::OUString > TOCStyleMap;
   -----------------------------------------------------------------------*/
 void DomainMapper_Impl::CloseFieldCommand()
 {
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->element("closeFieldCommand");
+#endif
+
     FieldContextPtr pContext = m_aFieldStack.top();
     OSL_ENSURE( pContext.get(), "no field context available");
     if( pContext.get() )
@@ -3418,6 +3432,11 @@ bool DomainMapper_Impl::IsFieldResultAsString()
   -----------------------------------------------------------------------*/
 void DomainMapper_Impl::SetFieldResult( ::rtl::OUString& rResult )
 {
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->startElement("setFieldResult");
+    dmapper_logger->chars(rResult);
+#endif
+
     FieldContextPtr pContext = m_aFieldStack.top();
     OSL_ENSURE( pContext.get(), "no field context available");
     if( pContext.get() )
@@ -3468,6 +3487,10 @@ void DomainMapper_Impl::SetFieldResult( ::rtl::OUString& rResult )
   -----------------------------------------------------------------------*/
 void DomainMapper_Impl::PopFieldContext()
 {
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->element("popFieldContext");
+#endif
+
     FieldContextPtr pContext = m_aFieldStack.top();
     OSL_ENSURE( pContext.get(), "no field context available");
     if( pContext.get() )
diff --git a/writerfilter/source/dmapper/FFData.xml b/writerfilter/source/dmapper/FFData.xml
new file mode 100644
index 000000000000..aa10cec0101c
--- /dev/null
+++ b/writerfilter/source/dmapper/FFData.xml
@@ -0,0 +1,25 @@
+<model>
+  <class name="FFData">
+    <parent name="Properties"/>
+    <typedef name="Pointer_t" type="shared_ptr"/>
+    <typedef name="DropDownEntries_t">
+      <vector type="OUString"/>
+    </typedef>
+    <member name="name" type="OUString"/>
+    <member name="enabled" type="bool"/>
+    <member name="calcOnExit" type="bool"/>
+    <member name="entryMacroName" type="OUString"/>
+    <member name="exitMacroName" type="OUString"/>
+    <member name="helpTextType" type="sal_uInt32"/>
+    <member name="helpText" type="OUString"/>
+    <member name="statusTextType" type="sal_uInt32"/>
+    <member name="statusText" type="OUString"/>
+    <member name="checkboxHeight" type="sal_uInt32"/>
+    <member name="checkboxAutoHeight" type="bool"/>
+    <member name="checkboxDefault" type="bool"/>
+    <member name="checkboxChecked" type="bool"/>
+    <member name="dropboxEntries" type="DropDownEntries_t"/>
+    <member name="textDefault" type="OUString"/>
+    <member name="textFormat" type="OUString"/>
+  </class>
+</model>
\ No newline at end of file
diff --git a/writerfilter/source/dmapper/FFDataHandler.hxx b/writerfilter/source/dmapper/FFDataHandler.hxx
new file mode 100644
index 000000000000..64ed226ea4d7
--- /dev/null
+++ b/writerfilter/source/dmapper/FFDataHandler.hxx
@@ -0,0 +1,70 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: PropertyMap.hxx,v $
+ * $Revision: 1.18 $
+ *
+ * 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_FFDATA_HANDLER_HXX
+#define INCLUDED_FFDATA_HANDLER_HXX
+
+#include <boost/shared_ptr.hpp>
+#include <resourcemodel/WW8ResourceModel.hxx>
+
+namespace writerfilter {
+    namespace dmapper {
+        class FFData : public Properties
+        {
+        public:
+            typedef ::boost::shared_ptr<FFData> Pointer_t;
+            typedef ::std::vector<OUString> DropDownEntries_t;
+
+            FFData();
+            virtual ~FFData();
+
+        private:
+            OUString m_sName;
+            bool m_bEnabled;
+            bool m_bCalcOnExit;
+            OUString m_sEntryMacroName;
+            OUString m_sExitMacroName;
+            sal_uInt32 m_nHelpTextType;
+            OUString m_sHelpText;
+            sal_uInt32 m_nStatusTextType;
+            OUString m_sStatusText;
+            sal_uInt32 m_nCheckboxHeight;
+            bool m_bCheckboxAutoHeight;
+            bool m_bCheckboxDefault;
+            bool m_bCheckboxChecked;
+            sal_uInt32 m_nDropDownDefault;
+            sal_uInt32 m_nDropDownResult;
+            DropDownEntries_t m_DropDownEntries;
+            OUString m_sTextDefault;
+            OUStirng m_sTextFormat;
+        };
+    }
+}
+#endif // INCLUDED_FFDATA_HANDLER_HXX
diff --git a/writerfilter/source/dmapper/FFDataHanlder.cxx b/writerfilter/source/dmapper/FFDataHanlder.cxx
new file mode 100644
index 000000000000..34eb4ec71b19
--- /dev/null
+++ b/writerfilter/source/dmapper/FFDataHanlder.cxx
@@ -0,0 +1,27 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * 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.
+ *
+ ************************************************************************/
+
diff --git a/writerfilter/source/dmapper/genclass.xsl b/writerfilter/source/dmapper/genclass.xsl
new file mode 100644
index 000000000000..af4a2948e5ed
--- /dev/null
+++ b/writerfilter/source/dmapper/genclass.xsl
@@ -0,0 +1,180 @@
+<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="text" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/>
+
+  <xsl:template match="/">
+    <xsl:for-each select="/model">
+      <xsl:apply-templates/>
+    </xsl:for-each>
+  </xsl:template>
+
+  <xsl:template match="class">
+    <xsl:text>
+class </xsl:text>
+<xsl:value-of select="@name"/>
+<xsl:if test="parent">
+  <xsl:text> : public </xsl:text>
+</xsl:if>
+<xsl:for-each select="parent">
+  <xsl:if test="position() > 1">
+    <xsl:text>, </xsl:text>
+  </xsl:if>
+  <xsl:value-of select="@name"/>
+</xsl:for-each>
+<xsl:text>
+{
+public:</xsl:text>
+<xsl:call-template name="typedefs"/>
+
+<xsl:text>
+    FFData();
+    ~FFData();
+</xsl:text>
+<xsl:call-template name="memberfuncdecls"/>
+<xsl:text>
+};
+</xsl:text>
+  </xsl:template>
+
+  <xsl:template name="typedefs">
+    <xsl:for-each select="typedef">
+      <xsl:text>
+    typedef </xsl:text>
+  <xsl:choose>
+    <xsl:when test="@type = 'shared_ptr'">
+      <xsl:text>::boost::shared_ptr&lt;</xsl:text>
+      <xsl:value-of select="ancestor::class/@name"/>
+      <xsl:text>&gt;</xsl:text>
+    </xsl:when>
+    <xsl:otherwise>
+    </xsl:otherwise>
+  </xsl:choose>
+  <xsl:for-each select="vector">
+    <xsl:text>::std::vector&lt;</xsl:text>
+    <xsl:value-of select="@type"/>
+    <xsl:text>&gt;</xsl:text>
+  </xsl:for-each>
+  <xsl:text> </xsl:text>
+  <xsl:value-of select="@name"/>
+  <xsl:text>;</xsl:text>
+    </xsl:for-each>
+  </xsl:template>
+
+  <xsl:template name="settername">
+    <xsl:text>set</xsl:text>
+    <xsl:call-template name="capfirst">
+      <xsl:with-param name="string" select="@name"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template name="gettername">
+    <xsl:text>get</xsl:text>
+    <xsl:call-template name="capfirst">
+      <xsl:with-param name="string" select="@name"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template name="pushbackname">
+    <xsl:value-of select="@name"/>
+    <xsl:text>PushBack</xsl:text>
+  </xsl:template>
+
+  <xsl:template name="settersig">
+    <xsl:text>void </xsl:text>
+    <xsl:call-template name="settername"/>
+    <xsl:text>(</xsl:text>
+    <xsl:call-template name="cctype"/>
+    <xsl:text> </xsl:text>
+    <xsl:call-template name="paramname"/>
+    <xsl:text>)</xsl:text>
+  </xsl:template>
+
+  <xsl:template name="gettersig">
+    <xsl:variable name="type" select="@type"/>
+    <xsl:call-template name="cctype"/>
+    <xsl:text> </xsl:text>
+    <xsl:call-template name="gettername"/>
+    <xsl:text>() const</xsl:text>
+  </xsl:template>
+
+  <xsl:template name="pushbacksig">
+    <xsl:variable name="pushback">
+      <xsl:call-template name="pushbackname"/>
+    </xsl:variable>
+    <xsl:variable name="type" select="@type"/>
+    <xsl:for-each select="ancestor::class/typedef[@name=$type]">
+      <xsl:for-each select="vector">
+	<xsl:text>void </xsl:text>
+	<xsl:value-of select="$pushback"/>
+	<xsl:text>(</xsl:text>
+	<xsl:call-template name="cctype"/>
+	<xsl:text>)</xsl:text>
+      </xsl:for-each>
+    </xsl:for-each>
+  </xsl:template>
+
+  <xsl:template name="memberfuncdecls">
+    <xsl:for-each select="member">
+      <xsl:text>&#xa;    // member: </xsl:text>
+      <xsl:value-of select="@name"/>
+      <xsl:text>&#xa;    </xsl:text>
+      <xsl:call-template name="settersig"/>
+      <xsl:text>;</xsl:text>
+      <xsl:text>&#xa;    </xsl:text>
+      <xsl:call-template name="gettersig"/>
+      <xsl:text>&#xa;    </xsl:text>
+      <xsl:call-template name="pushbacksig"/>
+      <xsl:text>;&#xa;</xsl:text>
+    </xsl:for-each>
+  </xsl:template>
+
+  <xsl:template name="cctype">
+    <xsl:variable name="type" select="@type"/>
+    <xsl:variable name="try1">
+      <xsl:for-each select="ancestor::class/typedef[@name=$type]">
+	<xsl:for-each select="vector">
+	  <xsl:text>const </xsl:text>
+	  <xsl:value-of select="$type"/>
+	  <xsl:text> &amp;</xsl:text>
+	</xsl:for-each>
+      </xsl:for-each>
+    </xsl:variable>
+    <xsl:choose>
+      <xsl:when test="string-length($try1) > 0">
+	<xsl:value-of select="$try1"/>
+      </xsl:when>
+      <xsl:when test="@type='OUString'">
+	<xsl:text>const ::rtl::OUString &amp;</xsl:text>
+      </xsl:when>
+      <xsl:otherwise>
+	<xsl:value-of select="@type"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+  <xsl:template name="capfirst">
+    <xsl:param name="string"/>
+    <xsl:variable name="first" select="translate(substring($string, 1,1), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
+    <xsl:value-of select="concat($first, substring($string, 2))"/>
+  </xsl:template>
+
+  <xsl:template name="paramname">
+    <xsl:choose>
+      <xsl:when test="@type='OUString'">
+	<xsl:text>r_s</xsl:text>
+	<xsl:call-template name="capfirst">
+	  <xsl:with-param name="string" select="@name"/>
+	</xsl:call-template>
+      </xsl:when>
+      <xsl:otherwise>
+	<xsl:text>r_</xsl:text>
+	<xsl:value-of select="@name"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+</xsl:stylesheet>
-- 
cgit 


From ec80a29a068b96bafb0ae754f1aadb0762fdef8f Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 9 Mar 2010 17:15:35 +0100
Subject: writerfilter08: generation xsl for FFDataHandler

---
 writerfilter/source/dmapper/FFData.xml   |  41 +++-
 writerfilter/source/dmapper/genclass.xsl | 409 +++++++++++++++++++++++++++----
 2 files changed, 397 insertions(+), 53 deletions(-)

diff --git a/writerfilter/source/dmapper/FFData.xml b/writerfilter/source/dmapper/FFData.xml
index aa10cec0101c..525f59391dc4 100644
--- a/writerfilter/source/dmapper/FFData.xml
+++ b/writerfilter/source/dmapper/FFData.xml
@@ -1,5 +1,5 @@
 <model>
-  <class name="FFData">
+  <class name="FFDataHandler">
     <parent name="Properties"/>
     <typedef name="Pointer_t" type="shared_ptr"/>
     <typedef name="DropDownEntries_t">
@@ -8,8 +8,8 @@
     <member name="name" type="OUString"/>
     <member name="enabled" type="bool"/>
     <member name="calcOnExit" type="bool"/>
-    <member name="entryMacroName" type="OUString"/>
-    <member name="exitMacroName" type="OUString"/>
+    <member name="entryMacro" type="OUString"/>
+    <member name="exitMacro" type="OUString"/>
     <member name="helpTextType" type="sal_uInt32"/>
     <member name="helpText" type="OUString"/>
     <member name="statusTextType" type="sal_uInt32"/>
@@ -18,8 +18,41 @@
     <member name="checkboxAutoHeight" type="bool"/>
     <member name="checkboxDefault" type="bool"/>
     <member name="checkboxChecked" type="bool"/>
-    <member name="dropboxEntries" type="DropDownEntries_t"/>
+    <member name="dropDownResult" type="OUString"/>
+    <member name="dropDownDefault" type="OUString"/>
+    <member name="dropDownEntries" type="DropDownEntries_t"/>
+    <member name="textType" type="sal_uInt32"/>
+    <member name="textMaxLength" type="sal_uInt32"/>
     <member name="textDefault" type="OUString"/>
     <member name="textFormat" type="OUString"/>
+    <sprm>
+      <element name="name" action="set" id="NS_ooxml::LN_CT_FFData_name"/>
+      <element name="enabled" action="set" id="NS_ooxml::LN_CT_FFData_enabled"/>
+      <element name="calcOnExit" action="set" id="NS_ooxml::LN_CT_FFData_calcOnExit"/>
+      <element name="entryMacro" action="set" id="NS_ooxml::LN_CT_FFData_entryMacro"/>
+      <element name="exitMacro" action="set" id="NS_ooxml::LN_CT_FFData_exitMacro"/>
+      <element name="helpText" action="resolve" id="NS_ooxml::LN_CT_FFData_helpText"/>
+      <element name="statusText" action="resolve" id="NS_ooxml::LN_CT_FFData_statusText"/>
+      <element name="size" member="checkboxHeight" action="set" id="NS_ooxml::LN_CT_FFCheckBox_size"/>
+      <element name="sizeAuto" member="checkboxAutoHeight" action="set" id="NS_ooxml::LN_CT_FFCheckBox_sizeAuto"/>
+      <element name="default" member="checkboxDefault" action="set" id="NS_ooxml::LN_CT_FFCheckBox_default"/>
+      <element name="checked" member="checkboxChecked" action="set" id="NS_ooxml::LN_CT_FFCheckBox_checked"/>
+      <element name="checkBox" action="resolve" id="NS_ooxml::LN_CT_FFData_checkBox"/>
+      <element name="result" member="dropDownResult" action="set" id="NS_ooxml::LN_CT_FFDDList_result"/>
+      <element name="default" member="dropDownDefault" action="set" id="NS_ooxml::LN_CT_FFDDList_default"/>
+      <element name="listEntry" member="dropDownEntries" action="pushback" id="NS_ooxml::LN_CT_FFDDList_listEntry"/>
+      <element name="ddList" action="resolve" id="NS_ooxml::LN_CT_FFData_ddList"/>
+      <element name="type" member="textType" action="set" id="NS_ooxml::LN_CT_FFTextInput_type"/>
+      <element name="default" member="textDefault" action="set" id="NS_ooxml::LN_CT_FFTextInput_default"/>
+      <element name="maxLength" member="textMaxLength" action="set" id="NS_ooxml::LN_CT_FFTextInput_maxLength"/>
+      <element name="format" member="textFormat" action="set" id="NS_ooxml::LN_CT_FFTextInput_format"/>
+      <element name="textInput" action="resolve" id="NS_ooxml::LN_CT_FFData_textInput"/>
+    </sprm>
+    <attribute>
+      <attribute name="helpText:type" member="helpTextType" id="NS_ooxml::LN_CT_FFHelpText_type"/>
+      <attribute name="helpText:val" member="helpText" id="NS_ooxml::LN_CT_FFHelpText_val"/>
+      <attribute name="statusText:type" member="statusTextType" id="NS_ooxml::LN_CT_FFStatusText_type"/>
+      <attribute name="statusText:val" member="statusText" id="NS_ooxml::LN_CT_FFStatusText_val"/>
+    </attribute>
   </class>
 </model>
\ No newline at end of file
diff --git a/writerfilter/source/dmapper/genclass.xsl b/writerfilter/source/dmapper/genclass.xsl
index af4a2948e5ed..e886ab81f51e 100644
--- a/writerfilter/source/dmapper/genclass.xsl
+++ b/writerfilter/source/dmapper/genclass.xsl
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
 <xsl:stylesheet 
     version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
@@ -8,61 +9,101 @@
   <xsl:output method="text" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/>
 
   <xsl:template match="/">
-    <xsl:for-each select="/model">
-      <xsl:apply-templates/>
+    <xsl:for-each select="/model/class">
+      <xsl:call-template name="classdecl"/>
+      <xsl:call-template name="classimpl"/>
     </xsl:for-each>
   </xsl:template>
 
-  <xsl:template match="class">
-    <xsl:text>
-class </xsl:text>
-<xsl:value-of select="@name"/>
-<xsl:if test="parent">
-  <xsl:text> : public </xsl:text>
-</xsl:if>
-<xsl:for-each select="parent">
-  <xsl:if test="position() > 1">
-    <xsl:text>, </xsl:text>
-  </xsl:if>
-  <xsl:value-of select="@name"/>
-</xsl:for-each>
-<xsl:text>
-{
-public:</xsl:text>
-<xsl:call-template name="typedefs"/>
-
-<xsl:text>
-    FFData();
-    ~FFData();
-</xsl:text>
-<xsl:call-template name="memberfuncdecls"/>
-<xsl:text>
-};
-</xsl:text>
+  <xsl:template name="memberid">
+    <xsl:variable name="member">
+      <xsl:choose>
+	<xsl:when test="@member">
+	  <xsl:value-of select="@member"/>
+	</xsl:when>
+	<xsl:otherwise>
+	  <xsl:value-of select="@name"/>
+	</xsl:otherwise>
+      </xsl:choose>
+    </xsl:variable>
+    <xsl:for-each select="ancestor::class/member[@name=$member]">
+      <xsl:choose>
+	<xsl:when test="@type='bool'">
+	  <xsl:text>m_b</xsl:text>
+	</xsl:when>
+	<xsl:when test="@type='OUString'">
+	  <xsl:text>m_s</xsl:text>
+	</xsl:when>
+	<xsl:when test="@type='sal_uInt32'">
+	  <xsl:text>m_n</xsl:text>
+	</xsl:when>
+	<xsl:otherwise>
+	  <xsl:text>m_</xsl:text>
+	</xsl:otherwise>
+      </xsl:choose>
+    </xsl:for-each>
+    <xsl:call-template name="capfirst">
+      <xsl:with-param name="string" select="$member"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template name="classdecl">
+    <xsl:text>&#xa;class </xsl:text>
+    <xsl:value-of select="@name"/>
+    <xsl:if test="parent">
+      <xsl:text> : public </xsl:text>
+    </xsl:if>
+    <xsl:for-each select="parent">
+      <xsl:if test="position() > 1">
+	<xsl:text>, </xsl:text>
+      </xsl:if>
+      <xsl:value-of select="@name"/>
+    </xsl:for-each>
+    <xsl:text>&#xa;{</xsl:text>
+    <xsl:text>&#xa;public:</xsl:text>
+    <xsl:call-template name="typedefs"/>
+    <xsl:text>&#xa;    // constructor</xsl:text>
+    <xsl:text>&#xa;    FFData();</xsl:text>
+    <xsl:text>&#xa;    // destructor</xsl:text>
+    <xsl:text>&#xa;    virtual ~FFData();&#xa;</xsl:text>
+    <xsl:call-template name="memberfuncdecls"/>
+    <xsl:for-each select="sprm">
+      <xsl:text>&#xa;    // sprm</xsl:text>
+      <xsl:text>&#xa;    void sprm(Sprm &amp; r_sprm);</xsl:text>
+      <xsl:text>&#xa;    void resolveSprm(Sprm &amp; r_sprm);&#xa;</xsl:text>
+    </xsl:for-each>
+    <xsl:for-each select="attribute">
+      <xsl:text>&#xa;    // attribute</xsl:text>
+      <xsl:text>&#xa;    void attribute(Id name, Value &amp; val);&#xa;</xsl:text>
+    </xsl:for-each>
+    <xsl:text>&#xa;private:</xsl:text>
+    <xsl:call-template name="memberdecls"/>
+    <xsl:text>&#xa;};&#xa;&#xa;</xsl:text>
   </xsl:template>
 
   <xsl:template name="typedefs">
+    <xsl:text>&#xa;    // typedefs</xsl:text>
     <xsl:for-each select="typedef">
-      <xsl:text>
-    typedef </xsl:text>
-  <xsl:choose>
-    <xsl:when test="@type = 'shared_ptr'">
-      <xsl:text>::boost::shared_ptr&lt;</xsl:text>
-      <xsl:value-of select="ancestor::class/@name"/>
-      <xsl:text>&gt;</xsl:text>
-    </xsl:when>
-    <xsl:otherwise>
-    </xsl:otherwise>
-  </xsl:choose>
-  <xsl:for-each select="vector">
-    <xsl:text>::std::vector&lt;</xsl:text>
-    <xsl:value-of select="@type"/>
-    <xsl:text>&gt;</xsl:text>
-  </xsl:for-each>
-  <xsl:text> </xsl:text>
-  <xsl:value-of select="@name"/>
-  <xsl:text>;</xsl:text>
+      <xsl:text>&#xa;    typedef </xsl:text>
+      <xsl:choose>
+	<xsl:when test="@type = 'shared_ptr'">
+	  <xsl:text>::boost::shared_ptr&lt;</xsl:text>
+	  <xsl:value-of select="ancestor::class/@name"/>
+	  <xsl:text>&gt;</xsl:text>
+	</xsl:when>
+	<xsl:otherwise>
+	</xsl:otherwise>
+      </xsl:choose>
+      <xsl:for-each select="vector">
+	<xsl:text>::std::vector&lt;</xsl:text>
+	<xsl:value-of select="@type"/>
+	<xsl:text>&gt;</xsl:text>
+      </xsl:for-each>
+      <xsl:text> </xsl:text>
+      <xsl:value-of select="@name"/>
+      <xsl:text>;</xsl:text>
     </xsl:for-each>
+    <xsl:text>&#xa;</xsl:text>
   </xsl:template>
 
   <xsl:template name="settername">
@@ -85,7 +126,12 @@ public:</xsl:text>
   </xsl:template>
 
   <xsl:template name="settersig">
+    <xsl:param name="classname"/>
     <xsl:text>void </xsl:text>
+    <xsl:if test="string-length($classname) > 0">
+      <xsl:value-of select="$classname"/>
+      <xsl:text>::</xsl:text>
+    </xsl:if>
     <xsl:call-template name="settername"/>
     <xsl:text>(</xsl:text>
     <xsl:call-template name="cctype"/>
@@ -95,14 +141,20 @@ public:</xsl:text>
   </xsl:template>
 
   <xsl:template name="gettersig">
+    <xsl:param name="classname"/>    
     <xsl:variable name="type" select="@type"/>
     <xsl:call-template name="cctype"/>
     <xsl:text> </xsl:text>
+    <xsl:if test="string-length($classname) > 0">
+      <xsl:value-of select="$classname"/>
+      <xsl:text>::</xsl:text>
+    </xsl:if>    
     <xsl:call-template name="gettername"/>
     <xsl:text>() const</xsl:text>
   </xsl:template>
 
   <xsl:template name="pushbacksig">
+    <xsl:param name="classname"/>    
     <xsl:variable name="pushback">
       <xsl:call-template name="pushbackname"/>
     </xsl:variable>
@@ -110,9 +162,14 @@ public:</xsl:text>
     <xsl:for-each select="ancestor::class/typedef[@name=$type]">
       <xsl:for-each select="vector">
 	<xsl:text>void </xsl:text>
+	<xsl:if test="string-length($classname) > 0">
+	  <xsl:value-of select="$classname"/>
+	  <xsl:text>::</xsl:text>
+	</xsl:if>    
 	<xsl:value-of select="$pushback"/>
 	<xsl:text>(</xsl:text>
 	<xsl:call-template name="cctype"/>
+	<xsl:text>r_Element</xsl:text>
 	<xsl:text>)</xsl:text>
       </xsl:for-each>
     </xsl:for-each>
@@ -127,9 +184,24 @@ public:</xsl:text>
       <xsl:text>;</xsl:text>
       <xsl:text>&#xa;    </xsl:text>
       <xsl:call-template name="gettersig"/>
+      <xsl:text>;&#xa;    </xsl:text>
+      <xsl:variable name="pushback">
+	<xsl:call-template name="pushbacksig"/>
+      </xsl:variable>
+      <xsl:if test="string-length($pushback) > 0">
+	<xsl:value-of select="$pushback"/>
+	<xsl:text>;&#xa;</xsl:text>
+      </xsl:if>
+    </xsl:for-each>
+  </xsl:template>
+
+  <xsl:template name="memberdecls">
+    <xsl:for-each select="member">
       <xsl:text>&#xa;    </xsl:text>
-      <xsl:call-template name="pushbacksig"/>
-      <xsl:text>;&#xa;</xsl:text>
+      <xsl:value-of select="@type"/>
+      <xsl:text> </xsl:text>
+      <xsl:call-template name="memberid"/>
+      <xsl:text>;</xsl:text>
     </xsl:for-each>
   </xsl:template>
 
@@ -177,4 +249,243 @@ public:</xsl:text>
       </xsl:otherwise>
     </xsl:choose>
   </xsl:template>
+
+  <xsl:template name="setterimpl">
+    <xsl:call-template name="settersig">
+      <xsl:with-param name="classname" select="ancestor::class/@name"/>
+    </xsl:call-template>
+    <xsl:text>&#xa;{</xsl:text>
+    <xsl:text>&#xa;    </xsl:text>
+    <xsl:call-template name="memberid"/>
+    <xsl:text> = </xsl:text>
+    <xsl:call-template name="paramname"/>
+    <xsl:text>;</xsl:text>
+    <xsl:text>&#xa;}&#xa;&#xa;</xsl:text>
+  </xsl:template>
+
+  <xsl:template name="getterimpl">
+    <xsl:call-template name="gettersig">
+      <xsl:with-param name="classname" select="ancestor::class/@name"/>
+    </xsl:call-template>
+    <xsl:text>&#xa;{</xsl:text>
+    <xsl:text>&#xa;    return </xsl:text>
+    <xsl:call-template name="memberid"/>
+    <xsl:text>;</xsl:text>
+    <xsl:text>&#xa;}&#xa;&#xa;</xsl:text>
+  </xsl:template>
+
+  <xsl:template name="pushbackimpl">
+    <xsl:variable name="sig">
+      <xsl:call-template name="pushbacksig">
+	<xsl:with-param name="classname" select="ancestor::class/@name"/>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:if test="string-length($sig) > 0">
+      <xsl:value-of select="$sig"/>
+      <xsl:text>&#xa;{</xsl:text>
+      <xsl:text>&#xa;    </xsl:text>
+      <xsl:call-template name="memberid"/>
+      <xsl:text>.push_back(r_Element);</xsl:text>
+      <xsl:text>&#xa;}&#xa;&#xa;</xsl:text>
+    </xsl:if>
+  </xsl:template>
+
+  <xsl:template name="getvalue">
+    <xsl:param name="valuePrefix"/>
+    <xsl:choose>
+      <xsl:when test="@type='OUString'">
+	<xsl:value-of select="$valuePrefix"/>
+	<xsl:text>getString()</xsl:text>
+      </xsl:when>
+      <xsl:when test="@type='bool' or @type='sal_uInt32'">
+	<xsl:value-of select="$valuePrefix"/>
+	<xsl:text>getInt()</xsl:text>
+      </xsl:when>
+      <xsl:when test="@type">
+	<xsl:variable name="type" select="@type"/>
+	<xsl:for-each select="ancestor::class/typedef[@name=$type]">
+	  <xsl:call-template name="getvalue">
+	    <xsl:with-param name="valuePrefix" select="$valuePrefix"/>
+	  </xsl:call-template>
+	</xsl:for-each>
+      </xsl:when>
+      <xsl:otherwise>
+	<xsl:variable name="member">
+	  <xsl:choose>
+	    <xsl:when test="@member">
+	      <xsl:value-of select="@member"/>
+	    </xsl:when>
+	    <xsl:otherwise>
+	      <xsl:value-of select="@name"/>
+	    </xsl:otherwise>
+	  </xsl:choose>
+	</xsl:variable>
+	<xsl:for-each select="ancestor::class/member[@name=$member]">
+	  <xsl:call-template name="getvalue">
+	    <xsl:with-param name="valuePrefix" select="$valuePrefix"/>
+	  </xsl:call-template>
+	</xsl:for-each>
+      </xsl:otherwise>
+    </xsl:choose>
+    <xsl:for-each select="vector">
+      <xsl:call-template name="getvalue">
+	<xsl:with-param name="valuePrefix" select="$valuePrefix"/>
+      </xsl:call-template>
+    </xsl:for-each>
+  </xsl:template>
+
+  <xsl:template name="sprmactionset">
+    <xsl:param name="valuePrefix"/>
+    <xsl:text>&#xa;        {</xsl:text>
+    <xsl:text>&#xa;            </xsl:text>
+    <xsl:call-template name="memberid"/>
+    <xsl:text> = </xsl:text>
+    <xsl:call-template name="getvalue">
+      <xsl:with-param name="valuePrefix" select="$valuePrefix"/>
+    </xsl:call-template>
+    <xsl:text>;&#xa;        }</xsl:text>
+  </xsl:template>
+
+  <xsl:template name="sprmactionpushback">
+    <xsl:param name="valuePrefix"/>
+    <xsl:text>&#xa;        {</xsl:text>
+    <xsl:text>&#xa;            </xsl:text>
+    <xsl:call-template name="memberid"/>
+    <xsl:text>.push_back(</xsl:text>
+    <xsl:call-template name="getvalue">
+      <xsl:with-param name="valuePrefix" select="$valuePrefix"/>
+    </xsl:call-template>
+    <xsl:text>);</xsl:text>
+    <xsl:text>;&#xa;        }</xsl:text>
+  </xsl:template>
+
+  <xsl:template name="sprmactionresolve">
+    <xsl:text>&#xa;        {</xsl:text>
+    <xsl:text>&#xa;            resolveSprm(r_Sprm);</xsl:text>
+    <xsl:text>&#xa;        }</xsl:text>
+  </xsl:template>
+
+  <xsl:template name="sprmaction">
+    <xsl:param name="valuePrefix"/>
+    <xsl:choose>
+      <xsl:when test="@action='set'">
+	<xsl:call-template name="sprmactionset">
+	  <xsl:with-param name="valuePrefix" select="$valuePrefix"/>
+	</xsl:call-template>
+      </xsl:when>
+      <xsl:when test="@action='pushback'">
+	<xsl:call-template name="sprmactionpushback">
+	  <xsl:with-param name="valuePrefix" select="$valuePrefix"/>
+	</xsl:call-template>
+      </xsl:when>
+      <xsl:when test="@action='resolve'">
+	<xsl:call-template name="sprmactionresolve"/>
+      </xsl:when>
+      <xsl:otherwise/>
+    </xsl:choose>
+  </xsl:template>
+
+  <xsl:template name="sprmimpl">
+    <xsl:for-each select="sprm">
+      <xsl:text>&#xa;void </xsl:text>
+      <xsl:variable name="classname" select="ancestor::class/@name"/>
+      <xsl:value-of select="$classname"/>
+      <xsl:text>::sprm(Sprm &amp; r_Sprm)</xsl:text>
+      <xsl:text>&#xa;{</xsl:text>
+      <xsl:text>&#xa;#ifdef DEBUG_DOMAINMAPPER</xsl:text>
+      <xsl:text>&#xa;    dmapper_logger->startElement("</xsl:text>
+      <xsl:value-of select="$classname"/>
+      <xsl:text>.sprm");</xsl:text>
+      <xsl:text>&#xa;    dmapper_logger->chars(rSprm.toString());</xsl:text>
+      <xsl:text>&#xa;#endif</xsl:text>
+      <xsl:text>&#xa;    switch(r_Sprm.getId())</xsl:text>
+      <xsl:text>&#xa;    {</xsl:text>
+      <xsl:for-each select="element">
+	<xsl:text>&#xa;    case </xsl:text>
+	<xsl:value-of select="@id"/>
+	<xsl:text>:</xsl:text>
+	<xsl:text>&#xa;    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */</xsl:text>
+	<xsl:call-template name="sprmaction">
+	  <xsl:with-param name="valuePrefix">r_Sprm.getValue-&gt;</xsl:with-param>
+	</xsl:call-template>
+	<xsl:text>&#xa;        break;</xsl:text>
+      </xsl:for-each>
+      <xsl:text>&#xa;    default:</xsl:text>
+      <xsl:text>&#xa;#ifdef DEBUG_DOMAINMAPPER</xsl:text>
+      <xsl:text>&#xa;        dmapper_logger->element("unhandled");</xsl:text>
+      <xsl:text>&#xa;#endif DEBUG_DOMAINMAPPER</xsl:text>
+      <xsl:text>&#xa;        break;</xsl:text>
+      <xsl:text>&#xa;    }</xsl:text>
+      <xsl:text>&#xa;#ifdef DEBUG_DOMAINMAPPER</xsl:text>
+      <xsl:text>&#xa;    dmapper_logger->endElement("</xsl:text>
+      <xsl:value-of select="$classname"/>
+      <xsl:text>.sprm");</xsl:text>
+      <xsl:text>&#xa;#endif</xsl:text>
+      <xsl:text>&#xa;}&#xa;</xsl:text>
+      <xsl:text>&#xa;void </xsl:text>
+      <xsl:value-of select="ancestor::class/@name"/>
+      <xsl:text>::resolveSprm(Sprm &amp; r_Sprm)</xsl:text>
+      <xsl:text>&#xa;{</xsl:text>
+      <xsl:text>&#xa;    writerfilter::Reference&lt;Properties&gt;::Pointer_t pProperties = rSprm.getProps();</xsl:text>
+      <xsl:text>&#xa;    if( pProperties.get())</xsl:text>
+      <xsl:text>&#xa;        pProperties->resolve(*this);</xsl:text>
+      <xsl:text>&#xa;}&#xa;</xsl:text>
+    </xsl:for-each>
+  </xsl:template>
+
+  <xsl:template name="attrimpl">
+    <xsl:for-each select="attribute">
+      <xsl:text>&#xa;void </xsl:text>
+      <xsl:variable name="classname" select="ancestor::class/@name"/>
+      <xsl:value-of select="$classname"/>
+      <xsl:text>::</xsl:text>
+      <xsl:text>attribute(Id name, Value &amp; val)</xsl:text>
+      <xsl:text>&#xa;{</xsl:text>
+      <xsl:text>&#xa;#ifdef DEBUG_DOMAINMAPPER</xsl:text>
+      <xsl:text>&#xa;    dmapper_logger->startElement("</xsl:text>
+      <xsl:value-of select="$classname"/>
+      <xsl:text>.attribute");</xsl:text>
+      <xsl:text>&#xa;    dmapper_logger->attribute("name", (*QNameToString::Instance())(name));</xsl:text>
+      <xsl:text>&#xa;    dmapper_logger->attribute("value", val.toString());</xsl:text>
+      <xsl:text>&#xa;    dmapper_logger->endElement("</xsl:text>
+      <xsl:value-of select="$classname"/>
+      <xsl:text>.attribute");</xsl:text>
+      <xsl:text>&#xa;#endif</xsl:text>
+      <xsl:text>&#xa;    switch (name)</xsl:text>
+      <xsl:text>&#xa;    {</xsl:text>
+      <xsl:for-each select="attribute">
+	<xsl:text>&#xa;    case </xsl:text>
+	<xsl:value-of select="@id"/>
+	<xsl:text>:</xsl:text>
+	<xsl:text>&#xa;    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */</xsl:text>
+	<xsl:call-template name="sprmactionset">
+	  <xsl:with-param name="valuePrefix">val.</xsl:with-param>
+	</xsl:call-template>
+	<xsl:text>&#xa;        break;</xsl:text>
+      </xsl:for-each>
+      <xsl:text>&#xa;    default:</xsl:text>
+      <xsl:text>&#xa;#ifdef DEBUG_DOMAINMAPPER</xsl:text>
+      <xsl:text>&#xa;        dmapper_logger->element("unhandled");</xsl:text>
+      <xsl:text>&#xa;#endif DEBUG_DOMAINMAPPER</xsl:text>
+      <xsl:text>&#xa;        break;</xsl:text>
+      <xsl:text>&#xa;    }</xsl:text>
+      <xsl:text>&#xa;}&#xa;&#xa;</xsl:text>
+    </xsl:for-each>
+  </xsl:template>
+    
+  <xsl:template name="classimpl">
+    <xsl:variable name="classname" select="@name"/>
+    <xsl:for-each select="member">
+      <xsl:text>// member: </xsl:text>
+      <xsl:value-of select="$classname"/>
+      <xsl:text>::</xsl:text>
+      <xsl:value-of select="@name"/>
+      <xsl:text>&#xa;</xsl:text>
+      <xsl:call-template name="setterimpl"/>
+      <xsl:call-template name="getterimpl"/>
+      <xsl:call-template name="pushbackimpl"/>
+    </xsl:for-each>
+    <xsl:call-template name="sprmimpl"/>
+    <xsl:call-template name="attrimpl"/>
+  </xsl:template>
 </xsl:stylesheet>
-- 
cgit 


From bb0ad3c8a238fbd0131f055c346c2082ff5f2e73 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 9 Mar 2010 17:16:32 +0100
Subject: writerfilter08: new attrsprm.xsl: generate input for genclass.xsl in
 dmapper

---
 writerfilter/source/ooxml/attrsprm.xsl | 142 +++++++++++++++++++++++++++++++++
 1 file changed, 142 insertions(+)
 create mode 100644 writerfilter/source/ooxml/attrsprm.xsl

diff --git a/writerfilter/source/ooxml/attrsprm.xsl b/writerfilter/source/ooxml/attrsprm.xsl
new file mode 100644
index 000000000000..9351b1b874c9
--- /dev/null
+++ b/writerfilter/source/ooxml/attrsprm.xsl
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/>
+
+  <xsl:include href="factorytools.xsl"/>
+  
+  <xsl:template match="/">
+    <class>
+      <xsl:for-each select="//rng:define[@name='CT_FFData']">
+	<xsl:call-template name="sprm"/>
+	<xsl:call-template name="attribute"/>
+      </xsl:for-each>
+    </class>
+  </xsl:template>
+
+  <xsl:template name="sprminner">
+    <xsl:variable name="defname" select="@name"/>
+    <xsl:for-each select=".//rng:ref[not(ancestor::rng:element or ancestor::rng:attribute)]">
+      <xsl:call-template name="sprminner"/>
+    </xsl:for-each>
+    <xsl:for-each select=".//rng:element">
+      <xsl:for-each select="rng:ref">
+	<xsl:variable name="refname" select="@name"/>
+	<xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$refname]">
+	  <xsl:call-template name="sprminner"/>
+	</xsl:for-each>
+      </xsl:for-each>      
+      <element>
+	<xsl:variable name="elementname" select="@name"/>
+	<xsl:attribute name="name">
+	  <xsl:value-of select="@name"/>
+	</xsl:attribute>
+	<xsl:for-each select="rng:ref">
+	  <xsl:variable name="refname" select="@name"/>
+	  <xsl:for-each select="ancestor::namespace/resource[@name=$refname]">
+	    <xsl:attribute name="action">
+	      <xsl:choose>
+		<xsl:when test="@resource='Properties'">
+		  <xsl:text>resolve</xsl:text>
+		</xsl:when>
+		<xsl:otherwise>
+		  <xsl:text>set</xsl:text>
+		</xsl:otherwise>
+	      </xsl:choose>
+	    </xsl:attribute>
+	  </xsl:for-each>
+	  <xsl:for-each select="ancestor::namespace/resource[@name=$defname]">
+	    <xsl:for-each select="element[@name=$elementname]">
+	      <xsl:attribute name="id">
+		<xsl:call-template name="idtoqname">
+		  <xsl:with-param name="id">
+		    <xsl:value-of select="@tokenid"/>
+		  </xsl:with-param>
+		</xsl:call-template>
+	      </xsl:attribute>
+	    </xsl:for-each>
+	  </xsl:for-each>
+	</xsl:for-each>
+      </element>	
+    </xsl:for-each>
+  </xsl:template>
+
+  <xsl:template name="sprm">
+    <sprm>
+      <xsl:call-template name="sprminner"/>
+    </sprm>
+  </xsl:template>
+
+  <xsl:template name="attributeinner">
+    <xsl:param name="parent"/>
+    <xsl:for-each select=".//rng:ref[not(ancestor::rng:element or ancestor::rng:attribute)]">
+      <xsl:variable name="refname" select="@name"/>
+      <xsl:comment><xsl:value-of select="$newparent"/></xsl:comment>
+      <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$refname]">
+	<xsl:call-template name="attributeinner">
+	  <xsl:with-param name="parent" select="$parent"/>
+	</xsl:call-template>
+      </xsl:for-each>
+    </xsl:for-each>
+    <xsl:for-each select=".//rng:element">
+      <xsl:variable name="newparent">
+	<xsl:if test="string-length($parent)">
+	  <xsl:value-of select="$parent"/>
+	  <xsl:text>:</xsl:text>
+	</xsl:if>
+	<xsl:value-of select="@name"/>
+      </xsl:variable>
+      <xsl:for-each select="rng:ref">
+	<xsl:variable name="refname" select="@name"/>
+	<xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$refname]">
+	  <xsl:call-template name="attributeinner">
+	    <xsl:with-param name="parent" select="$newparent"/>
+	  </xsl:call-template>
+	</xsl:for-each>
+      </xsl:for-each>
+    </xsl:for-each>
+    <xsl:variable name="defname" select="@name"/>
+    <xsl:variable name="resource">
+      <xsl:for-each select="ancestor::namespace/resource[@name=$defname]">
+	<xsl:value-of select="@resource"/>
+      </xsl:for-each>
+    </xsl:variable>
+    <xsl:if test="$resource='Properties'">
+      <xsl:for-each select=".//rng:attribute">
+	<xsl:variable name="attrname" select="@name"/>
+	<attribute>	  
+	  <xsl:attribute name="name">
+	    <xsl:if test="string-length($parent) > 0">
+	      <xsl:value-of select="$parent"/>
+	      <xsl:text>:</xsl:text>
+	    </xsl:if>
+	    <xsl:value-of select="$attrname"/>
+	  </xsl:attribute>
+	  <xsl:for-each select="ancestor::namespace/resource[@name=$defname]">
+	    <xsl:for-each select="attribute[@name=$attrname]">
+	      <xsl:attribute name="id">
+		<xsl:call-template name="idtoqname">
+		  <xsl:with-param name="id">
+		    <xsl:value-of select="@tokenid"/>
+		  </xsl:with-param>
+		</xsl:call-template>
+	      </xsl:attribute>
+	    </xsl:for-each>
+	  </xsl:for-each>
+	</attribute>
+      </xsl:for-each>
+    </xsl:if>
+  </xsl:template>
+
+  <xsl:template name="attribute">
+    <attribute>
+      <xsl:call-template name="attributeinner"/>
+    </attribute>
+  </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
-- 
cgit 


From 3e3c0d92214ebd2d5a1c85035f5f71e2abe6f85f Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 9 Mar 2010 17:17:43 +0100
Subject: writerfilter08: more annotations for FFData

---
 writerfilter/source/ooxml/model.xml | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
index 85a58e160f3b..adbd294ab023 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -15079,7 +15079,7 @@
       </define>
       <define name="CT_FFTextType">
         <attribute name="val">
-          <text/>
+          <ref name="ST_FFName"/>
           <xs:documentation>Text Box Form Field Type Values</xs:documentation>
         </attribute>
       </define>
@@ -15206,7 +15206,7 @@
       </define>
       <define name="CT_FFHelpText">
         <attribute name="type">
-          <text/>
+          <ref name="ST_InfoTextType"/>
           <xs:documentation>Help Text Type</xs:documentation>
         </attribute>
         <attribute name="val">
@@ -15216,7 +15216,7 @@
       </define>
       <define name="CT_FFStatusText">
         <attribute name="type">
-          <text/>
+          <ref name="ST_InfoTextType"/>
           <xs:documentation>Status Text Type</xs:documentation>
         </attribute>
         <attribute name="val">
@@ -22064,6 +22064,23 @@
       <attribute name="type" tokenid="ooxml:CT_FFStatusText_type"/>
       <attribute name="val" tokenid="ooxml:CT_FFStatusText_val"/>
     </resource>
+    <resource name="CT_FFCheckBox" resource="Properties">
+      <element name="size" tokenid="ooxml:CT_FFCheckBox_size"/>
+      <element name="sizeAuto" tokenid="ooxml:CT_FFCheckBox_sizeAuto"/>
+      <element name="default" tokenid="ooxml:CT_FFCheckBox_default"/>
+      <element name="checked" tokenid="ooxml:CT_FFCheckBox_checked"/>
+    </resource>
+    <resource name="CT_FFDDList" resource="Properties">
+      <element name="result" tokenid="ooxml:CT_FFDDList_result"/>
+      <element name="default" tokenid="ooxml:CT_FFDDList_default"/>
+      <element name="listEntry" tokenid="ooxml:CT_FFDDList_listEntry"/>
+    </resource>
+    <resource name="CT_FFTextInput" resource="Properties">
+      <element name="type" tokenid="ooxml:CT_FFTextInput_type"/>
+      <element name="default" tokenid="ooxml:CT_FFTextInput_default"/>
+      <element name="maxLength" tokenid="ooxml:CT_FFTextInput_maxLength"/>
+      <element name="format" tokenid="ooxml:CT_FFTextInput_format"/>
+    </resource>
     <resource name="ST_SectionMark" resource="List">
       <value tokenid="0">continuous</value>
       <value tokenid="1">nextColumn</value>
-- 
cgit 


From 7c9bcd844f82b8960a4492dba247dd10272f6a2c Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 10 Mar 2010 16:29:16 +0100
Subject: writerfilter08: made FFDataHandler compile

---
 writerfilter/source/dmapper/FFDataHandler.cxx | 483 ++++++++++++++++++++++++++
 writerfilter/source/dmapper/FFDataHandler.hxx | 167 +++++++--
 writerfilter/source/dmapper/FFDataHanlder.cxx |  27 --
 writerfilter/source/dmapper/genclass.xsl      | 262 ++++++++++++--
 writerfilter/source/dmapper/makefile.mk       |   1 +
 5 files changed, 852 insertions(+), 88 deletions(-)
 create mode 100644 writerfilter/source/dmapper/FFDataHandler.cxx
 delete mode 100644 writerfilter/source/dmapper/FFDataHanlder.cxx

diff --git a/writerfilter/source/dmapper/FFDataHandler.cxx b/writerfilter/source/dmapper/FFDataHandler.cxx
new file mode 100644
index 000000000000..f90f1eaf4f9b
--- /dev/null
+++ b/writerfilter/source/dmapper/FFDataHandler.cxx
@@ -0,0 +1,483 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: PropertyMap.hxx,v $
+ * $Revision: 1.18 $
+ *
+ * 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 "FFDataHandler.hxx"
+
+#include <ooxml/resourceids.hxx>
+#ifdef DEBUG_DOMAINMAPPER
+#include <resourcemodel/QNameToString.hxx>
+#include "dmapperLoggers.hxx"
+#endif
+namespace writerfilter {
+namespace dmapper {
+
+/************************
+ * class: FFDataHandler *
+ ************************/
+
+FFDataHandler::FFDataHandler()
+: m_bEnabled(false),
+  m_bCalcOnExit(false),
+  m_nHelpTextType(0),
+  m_nStatusTextType(0),
+  m_nCheckboxHeight(0),
+  m_bCheckboxAutoHeight(false),
+  m_bCheckboxDefault(false),
+  m_bCheckboxChecked(false),
+  m_nTextType(0),
+  m_nTextMaxLength(0)
+{
+}
+
+
+FFDataHandler::~FFDataHandler()
+{
+}
+
+// member: FFDataHandler::name
+void FFDataHandler::setName(const rtl::OUString & r_sName)
+{
+    m_sName = r_sName;
+}
+
+const rtl::OUString & FFDataHandler::getName() const
+{
+    return m_sName;
+}
+
+// member: FFDataHandler::enabled
+void FFDataHandler::setEnabled(bool r_enabled)
+{
+    m_bEnabled = r_enabled;
+}
+
+bool FFDataHandler::getEnabled() const
+{
+    return m_bEnabled;
+}
+
+// member: FFDataHandler::calcOnExit
+void FFDataHandler::setCalcOnExit(bool r_calcOnExit)
+{
+    m_bCalcOnExit = r_calcOnExit;
+}
+
+bool FFDataHandler::getCalcOnExit() const
+{
+    return m_bCalcOnExit;
+}
+
+// member: FFDataHandler::entryMacro
+void FFDataHandler::setEntryMacro(const rtl::OUString & r_sEntryMacro)
+{
+    m_sEntryMacro = r_sEntryMacro;
+}
+
+const rtl::OUString & FFDataHandler::getEntryMacro() const
+{
+    return m_sEntryMacro;
+}
+
+// member: FFDataHandler::exitMacro
+void FFDataHandler::setExitMacro(const rtl::OUString & r_sExitMacro)
+{
+    m_sExitMacro = r_sExitMacro;
+}
+
+const rtl::OUString & FFDataHandler::getExitMacro() const
+{
+    return m_sExitMacro;
+}
+
+// member: FFDataHandler::helpTextType
+void FFDataHandler::setHelpTextType(sal_uInt32 r_helpTextType)
+{
+    m_nHelpTextType = r_helpTextType;
+}
+
+sal_uInt32 FFDataHandler::getHelpTextType() const
+{
+    return m_nHelpTextType;
+}
+
+// member: FFDataHandler::helpText
+void FFDataHandler::setHelpText(const rtl::OUString & r_sHelpText)
+{
+    m_sHelpText = r_sHelpText;
+}
+
+const rtl::OUString & FFDataHandler::getHelpText() const
+{
+    return m_sHelpText;
+}
+
+// member: FFDataHandler::statusTextType
+void FFDataHandler::setStatusTextType(sal_uInt32 r_statusTextType)
+{
+    m_nStatusTextType = r_statusTextType;
+}
+
+sal_uInt32 FFDataHandler::getStatusTextType() const
+{
+    return m_nStatusTextType;
+}
+
+// member: FFDataHandler::statusText
+void FFDataHandler::setStatusText(const rtl::OUString & r_sStatusText)
+{
+    m_sStatusText = r_sStatusText;
+}
+
+const rtl::OUString & FFDataHandler::getStatusText() const
+{
+    return m_sStatusText;
+}
+
+// member: FFDataHandler::checkboxHeight
+void FFDataHandler::setCheckboxHeight(sal_uInt32 r_checkboxHeight)
+{
+    m_nCheckboxHeight = r_checkboxHeight;
+}
+
+sal_uInt32 FFDataHandler::getCheckboxHeight() const
+{
+    return m_nCheckboxHeight;
+}
+
+// member: FFDataHandler::checkboxAutoHeight
+void FFDataHandler::setCheckboxAutoHeight(bool r_checkboxAutoHeight)
+{
+    m_bCheckboxAutoHeight = r_checkboxAutoHeight;
+}
+
+bool FFDataHandler::getCheckboxAutoHeight() const
+{
+    return m_bCheckboxAutoHeight;
+}
+
+// member: FFDataHandler::checkboxDefault
+void FFDataHandler::setCheckboxDefault(bool r_checkboxDefault)
+{
+    m_bCheckboxDefault = r_checkboxDefault;
+}
+
+bool FFDataHandler::getCheckboxDefault() const
+{
+    return m_bCheckboxDefault;
+}
+
+// member: FFDataHandler::checkboxChecked
+void FFDataHandler::setCheckboxChecked(bool r_checkboxChecked)
+{
+    m_bCheckboxChecked = r_checkboxChecked;
+}
+
+bool FFDataHandler::getCheckboxChecked() const
+{
+    return m_bCheckboxChecked;
+}
+
+// member: FFDataHandler::dropDownResult
+void FFDataHandler::setDropDownResult(const rtl::OUString & r_sDropDownResult)
+{
+    m_sDropDownResult = r_sDropDownResult;
+}
+
+const rtl::OUString & FFDataHandler::getDropDownResult() const
+{
+    return m_sDropDownResult;
+}
+
+// member: FFDataHandler::dropDownDefault
+void FFDataHandler::setDropDownDefault(const rtl::OUString & r_sDropDownDefault)
+{
+    m_sDropDownDefault = r_sDropDownDefault;
+}
+
+const rtl::OUString & FFDataHandler::getDropDownDefault() const
+{
+    return m_sDropDownDefault;
+}
+
+// member: FFDataHandler::dropDownEntries
+void FFDataHandler::setDropDownEntries(const FFDataHandler::DropDownEntries_t & r_dropDownEntries)
+{
+    m_DropDownEntries = r_dropDownEntries;
+}
+
+const FFDataHandler::DropDownEntries_t & FFDataHandler::getDropDownEntries() const
+{
+    return m_DropDownEntries;
+}
+
+void FFDataHandler::dropDownEntriesPushBack(const rtl::OUString & r_Element)
+{
+    m_DropDownEntries.push_back(r_Element);
+}
+
+// member: FFDataHandler::textType
+void FFDataHandler::setTextType(sal_uInt32 r_textType)
+{
+    m_nTextType = r_textType;
+}
+
+sal_uInt32 FFDataHandler::getTextType() const
+{
+    return m_nTextType;
+}
+
+// member: FFDataHandler::textMaxLength
+void FFDataHandler::setTextMaxLength(sal_uInt32 r_textMaxLength)
+{
+    m_nTextMaxLength = r_textMaxLength;
+}
+
+sal_uInt32 FFDataHandler::getTextMaxLength() const
+{
+    return m_nTextMaxLength;
+}
+
+// member: FFDataHandler::textDefault
+void FFDataHandler::setTextDefault(const rtl::OUString & r_sTextDefault)
+{
+    m_sTextDefault = r_sTextDefault;
+}
+
+const rtl::OUString & FFDataHandler::getTextDefault() const
+{
+    return m_sTextDefault;
+}
+
+// member: FFDataHandler::textFormat
+void FFDataHandler::setTextFormat(const rtl::OUString & r_sTextFormat)
+{
+    m_sTextFormat = r_sTextFormat;
+}
+
+const rtl::OUString & FFDataHandler::getTextFormat() const
+{
+    return m_sTextFormat;
+}
+
+
+void FFDataHandler::sprm(Sprm & r_Sprm)
+{
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->startElement("FFDataHandler.sprm");
+    dmapper_logger->chars(r_Sprm.toString());
+#endif
+    switch(r_Sprm.getId())
+    {
+    case NS_ooxml::LN_CT_FFData_name:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_sName = r_Sprm.getValue()->getString();
+        }
+        break;
+    case NS_ooxml::LN_CT_FFData_enabled:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_bEnabled = r_Sprm.getValue()->getInt();
+        }
+        break;
+    case NS_ooxml::LN_CT_FFData_calcOnExit:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_bCalcOnExit = r_Sprm.getValue()->getInt();
+        }
+        break;
+    case NS_ooxml::LN_CT_FFData_entryMacro:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_sEntryMacro = r_Sprm.getValue()->getString();
+        }
+        break;
+    case NS_ooxml::LN_CT_FFData_exitMacro:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_sExitMacro = r_Sprm.getValue()->getString();
+        }
+        break;
+    case NS_ooxml::LN_CT_FFData_helpText:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            resolveSprm(r_Sprm);
+        }
+        break;
+    case NS_ooxml::LN_CT_FFData_statusText:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            resolveSprm(r_Sprm);
+        }
+        break;
+    case NS_ooxml::LN_CT_FFCheckBox_size:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_nCheckboxHeight = r_Sprm.getValue()->getInt();
+        }
+        break;
+    case NS_ooxml::LN_CT_FFCheckBox_sizeAuto:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_bCheckboxAutoHeight = r_Sprm.getValue()->getInt();
+        }
+        break;
+    case NS_ooxml::LN_CT_FFCheckBox_default:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_bCheckboxDefault = r_Sprm.getValue()->getInt();
+        }
+        break;
+    case NS_ooxml::LN_CT_FFCheckBox_checked:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_bCheckboxChecked = r_Sprm.getValue()->getInt();
+        }
+        break;
+    case NS_ooxml::LN_CT_FFData_checkBox:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            resolveSprm(r_Sprm);
+        }
+        break;
+    case NS_ooxml::LN_CT_FFDDList_result:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_sDropDownResult = r_Sprm.getValue()->getString();
+        }
+        break;
+    case NS_ooxml::LN_CT_FFDDList_default:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_sDropDownDefault = r_Sprm.getValue()->getString();
+        }
+        break;
+    case NS_ooxml::LN_CT_FFDDList_listEntry:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_DropDownEntries.push_back(r_Sprm.getValue()->getString());;
+        }
+        break;
+    case NS_ooxml::LN_CT_FFData_ddList:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            resolveSprm(r_Sprm);
+        }
+        break;
+    case NS_ooxml::LN_CT_FFTextInput_type:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_nTextType = r_Sprm.getValue()->getInt();
+        }
+        break;
+    case NS_ooxml::LN_CT_FFTextInput_default:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_sTextDefault = r_Sprm.getValue()->getString();
+        }
+        break;
+    case NS_ooxml::LN_CT_FFTextInput_maxLength:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_nTextMaxLength = r_Sprm.getValue()->getInt();
+        }
+        break;
+    case NS_ooxml::LN_CT_FFTextInput_format:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_sTextFormat = r_Sprm.getValue()->getString();
+        }
+        break;
+    case NS_ooxml::LN_CT_FFData_textInput:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            resolveSprm(r_Sprm);
+        }
+        break;
+    default:
+#ifdef DEBUG_DOMAINMAPPER
+        dmapper_logger->element("unhandled");
+#endif DEBUG_DOMAINMAPPER
+        break;
+    }
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->endElement("FFDataHandler.sprm");
+#endif
+}
+
+void FFDataHandler::resolveSprm(Sprm & r_Sprm)
+{
+    writerfilter::Reference<Properties>::Pointer_t pProperties = r_Sprm.getProps();
+    if( pProperties.get())
+        pProperties->resolve(*this);
+}
+
+void FFDataHandler::attribute(Id name, Value & val)
+{
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->startElement("FFDataHandler.attribute");
+    dmapper_logger->attribute("name", (*QNameToString::Instance())(name));
+    dmapper_logger->attribute("value", val.toString());
+    dmapper_logger->endElement("FFDataHandler.attribute");
+#endif
+    switch (name)
+    {
+    case NS_ooxml::LN_CT_FFHelpText_type:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_nHelpTextType = val.getInt();
+        }
+        break;
+    case NS_ooxml::LN_CT_FFHelpText_val:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_sHelpText = val.getString();
+        }
+        break;
+    case NS_ooxml::LN_CT_FFStatusText_type:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_nStatusTextType = val.getInt();
+        }
+        break;
+    case NS_ooxml::LN_CT_FFStatusText_val:
+    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */
+        {
+            m_sStatusText = val.getString();
+        }
+        break;
+    default:
+#ifdef DEBUG_DOMAINMAPPER
+        dmapper_logger->element("unhandled");
+#endif DEBUG_DOMAINMAPPER
+        break;
+    }
+}
+
+}}
diff --git a/writerfilter/source/dmapper/FFDataHandler.hxx b/writerfilter/source/dmapper/FFDataHandler.hxx
index 64ed226ea4d7..fb7a4ccee950 100644
--- a/writerfilter/source/dmapper/FFDataHandler.hxx
+++ b/writerfilter/source/dmapper/FFDataHandler.hxx
@@ -27,44 +27,135 @@
  * for a copy of the LGPLv3 License.
  *
  ************************************************************************/
+#ifndef INCLUDED_FFDataHandler_HXX
+#define INCLUDED_FFDataHandler_HXX
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <rtl/ustring.hxx>
+namespace writerfilter {
+namespace dmapper {
+class FFDataHandler : public Properties
+{
+public:
+    // typedefs
+    typedef ::boost::shared_ptr<FFDataHandler> Pointer_t;
+    typedef ::std::vector<rtl::OUString> DropDownEntries_t;
 
-#ifndef INCLUDED_FFDATA_HANDLER_HXX
-#define INCLUDED_FFDATA_HANDLER_HXX
+    // constructor
+    FFDataHandler();
+    // destructor
+    virtual ~FFDataHandler();
 
-#include <boost/shared_ptr.hpp>
-#include <resourcemodel/WW8ResourceModel.hxx>
+    // member: name
+    void setName(const rtl::OUString & r_sName);
+    const rtl::OUString & getName() const;
 
-namespace writerfilter {
-    namespace dmapper {
-        class FFData : public Properties
-        {
-        public:
-            typedef ::boost::shared_ptr<FFData> Pointer_t;
-            typedef ::std::vector<OUString> DropDownEntries_t;
-
-            FFData();
-            virtual ~FFData();
-
-        private:
-            OUString m_sName;
-            bool m_bEnabled;
-            bool m_bCalcOnExit;
-            OUString m_sEntryMacroName;
-            OUString m_sExitMacroName;
-            sal_uInt32 m_nHelpTextType;
-            OUString m_sHelpText;
-            sal_uInt32 m_nStatusTextType;
-            OUString m_sStatusText;
-            sal_uInt32 m_nCheckboxHeight;
-            bool m_bCheckboxAutoHeight;
-            bool m_bCheckboxDefault;
-            bool m_bCheckboxChecked;
-            sal_uInt32 m_nDropDownDefault;
-            sal_uInt32 m_nDropDownResult;
-            DropDownEntries_t m_DropDownEntries;
-            OUString m_sTextDefault;
-            OUStirng m_sTextFormat;
-        };
-    }
-}
-#endif // INCLUDED_FFDATA_HANDLER_HXX
+    // member: enabled
+    void setEnabled(bool r_enabled);
+    bool getEnabled() const;
+
+    // member: calcOnExit
+    void setCalcOnExit(bool r_calcOnExit);
+    bool getCalcOnExit() const;
+
+    // member: entryMacro
+    void setEntryMacro(const rtl::OUString & r_sEntryMacro);
+    const rtl::OUString & getEntryMacro() const;
+
+    // member: exitMacro
+    void setExitMacro(const rtl::OUString & r_sExitMacro);
+    const rtl::OUString & getExitMacro() const;
+
+    // member: helpTextType
+    void setHelpTextType(sal_uInt32 r_helpTextType);
+    sal_uInt32 getHelpTextType() const;
+
+    // member: helpText
+    void setHelpText(const rtl::OUString & r_sHelpText);
+    const rtl::OUString & getHelpText() const;
+
+    // member: statusTextType
+    void setStatusTextType(sal_uInt32 r_statusTextType);
+    sal_uInt32 getStatusTextType() const;
+
+    // member: statusText
+    void setStatusText(const rtl::OUString & r_sStatusText);
+    const rtl::OUString & getStatusText() const;
+
+    // member: checkboxHeight
+    void setCheckboxHeight(sal_uInt32 r_checkboxHeight);
+    sal_uInt32 getCheckboxHeight() const;
+
+    // member: checkboxAutoHeight
+    void setCheckboxAutoHeight(bool r_checkboxAutoHeight);
+    bool getCheckboxAutoHeight() const;
+
+    // member: checkboxDefault
+    void setCheckboxDefault(bool r_checkboxDefault);
+    bool getCheckboxDefault() const;
+
+    // member: checkboxChecked
+    void setCheckboxChecked(bool r_checkboxChecked);
+    bool getCheckboxChecked() const;
+
+    // member: dropDownResult
+    void setDropDownResult(const rtl::OUString & r_sDropDownResult);
+    const rtl::OUString & getDropDownResult() const;
+
+    // member: dropDownDefault
+    void setDropDownDefault(const rtl::OUString & r_sDropDownDefault);
+    const rtl::OUString & getDropDownDefault() const;
+
+    // member: dropDownEntries
+    void setDropDownEntries(const DropDownEntries_t & r_dropDownEntries);
+    const DropDownEntries_t & getDropDownEntries() const;
+    void dropDownEntriesPushBack(const rtl::OUString & r_Element);
+
+    // member: textType
+    void setTextType(sal_uInt32 r_textType);
+    sal_uInt32 getTextType() const;
+
+    // member: textMaxLength
+    void setTextMaxLength(sal_uInt32 r_textMaxLength);
+    sal_uInt32 getTextMaxLength() const;
+
+    // member: textDefault
+    void setTextDefault(const rtl::OUString & r_sTextDefault);
+    const rtl::OUString & getTextDefault() const;
+
+    // member: textFormat
+    void setTextFormat(const rtl::OUString & r_sTextFormat);
+    const rtl::OUString & getTextFormat() const;
+
+    // sprm
+    void sprm(Sprm & r_sprm);
+    void resolveSprm(Sprm & r_sprm);
+
+    // attribute
+    void attribute(Id name, Value & val);
+
+private:
+    rtl::OUString m_sName;
+    bool m_bEnabled;
+    bool m_bCalcOnExit;
+    rtl::OUString m_sEntryMacro;
+    rtl::OUString m_sExitMacro;
+    sal_uInt32 m_nHelpTextType;
+    rtl::OUString m_sHelpText;
+    sal_uInt32 m_nStatusTextType;
+    rtl::OUString m_sStatusText;
+    sal_uInt32 m_nCheckboxHeight;
+    bool m_bCheckboxAutoHeight;
+    bool m_bCheckboxDefault;
+    bool m_bCheckboxChecked;
+    rtl::OUString m_sDropDownResult;
+    rtl::OUString m_sDropDownDefault;
+    DropDownEntries_t m_DropDownEntries;
+    sal_uInt32 m_nTextType;
+    sal_uInt32 m_nTextMaxLength;
+    rtl::OUString m_sTextDefault;
+    rtl::OUString m_sTextFormat;
+};
+
+
+}}
+#endif //INCLUDED_FFDataHandler_HXX
diff --git a/writerfilter/source/dmapper/FFDataHanlder.cxx b/writerfilter/source/dmapper/FFDataHanlder.cxx
deleted file mode 100644
index 34eb4ec71b19..000000000000
--- a/writerfilter/source/dmapper/FFDataHanlder.cxx
+++ /dev/null
@@ -1,27 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * 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.
- *
- ************************************************************************/
-
diff --git a/writerfilter/source/dmapper/genclass.xsl b/writerfilter/source/dmapper/genclass.xsl
index e886ab81f51e..eaddab52ea0e 100644
--- a/writerfilter/source/dmapper/genclass.xsl
+++ b/writerfilter/source/dmapper/genclass.xsl
@@ -10,11 +10,49 @@
 
   <xsl:template match="/">
     <xsl:for-each select="/model/class">
-      <xsl:call-template name="classdecl"/>
-      <xsl:call-template name="classimpl"/>
+      <xsl:choose>
+	<xsl:when test="$filetype='inc'">
+	  <xsl:call-template name="incfile"/>
+	</xsl:when>
+	<xsl:when test="$filetype='impl'">
+	  <xsl:call-template name="implfile"/>
+	</xsl:when>
+      </xsl:choose>
     </xsl:for-each>
   </xsl:template>
 
+  <xsl:template name="license">
+    <xsl:text>/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * 
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: PropertyMap.hxx,v $
+ * $Revision: 1.18 $
+ *
+ * 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
+ * &lt;http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/&#xa;</xsl:text>
+  </xsl:template>
+
   <xsl:template name="memberid">
     <xsl:variable name="member">
       <xsl:choose>
@@ -46,6 +84,48 @@
       <xsl:with-param name="string" select="$member"/>
     </xsl:call-template>
   </xsl:template>
+  
+  <xsl:template name="incfile">
+    <xsl:call-template name="license"/>
+    <xsl:for-each select="//class">
+      <xsl:variable name="includeguard">
+	<xsl:text>INCLUDED_</xsl:text>
+	<xsl:value-of select="@name"/>
+	<xsl:text>_HXX</xsl:text>
+	</xsl:variable>
+	<xsl:text>#ifndef </xsl:text>
+	<xsl:value-of select="$includeguard"/>
+	<xsl:text>&#xa;#define </xsl:text>
+	<xsl:value-of select="$includeguard"/>
+	<xsl:text>&#xa;#include &lt;resourcemodel/WW8ResourceModel.hxx></xsl:text>
+	<xsl:text>&#xa;#include &lt;rtl/ustring.hxx></xsl:text>
+	<xsl:text>&#xa;namespace writerfilter {</xsl:text>
+	<xsl:text>&#xa;namespace dmapper {</xsl:text>
+	<xsl:call-template name="classdecl"/>
+	<xsl:text>&#xa;}}</xsl:text>
+	<xsl:text>&#xa;#endif //</xsl:text>
+	<xsl:value-of select="$includeguard"/>
+	<xsl:text>&#xa;</xsl:text>
+    </xsl:for-each>
+  </xsl:template>
+
+  <xsl:template name="implfile">
+    <xsl:call-template name="license"/>
+    <xsl:for-each select="//class">
+      <xsl:text>#include "</xsl:text>
+      <xsl:value-of select="@name"/>
+      <xsl:text>.hxx"&#xa;</xsl:text>
+      <xsl:text>&#xa;#include &lt;ooxml/resourceids.hxx></xsl:text>
+      <xsl:text>&#xa;#ifdef DEBUG_DOMAINMAPPER</xsl:text>
+      <xsl:text>&#xa;#include &lt;resourcemodel/QNameToString.hxx></xsl:text>
+      <xsl:text>&#xa;#include "dmapperLoggers.hxx"</xsl:text>
+      <xsl:text>&#xa;#endif</xsl:text>
+      <xsl:text>&#xa;namespace writerfilter {</xsl:text>
+      <xsl:text>&#xa;namespace dmapper {&#xa;</xsl:text>
+      <xsl:call-template name="classimpl"/>
+      <xsl:text>}}&#xa;</xsl:text>
+    </xsl:for-each>
+  </xsl:template>
 
   <xsl:template name="classdecl">
     <xsl:text>&#xa;class </xsl:text>
@@ -63,9 +143,13 @@
     <xsl:text>&#xa;public:</xsl:text>
     <xsl:call-template name="typedefs"/>
     <xsl:text>&#xa;    // constructor</xsl:text>
-    <xsl:text>&#xa;    FFData();</xsl:text>
+    <xsl:text>&#xa;    </xsl:text>
+    <xsl:value-of select="@name"/>
+    <xsl:text>();</xsl:text>
     <xsl:text>&#xa;    // destructor</xsl:text>
-    <xsl:text>&#xa;    virtual ~FFData();&#xa;</xsl:text>
+    <xsl:text>&#xa;    virtual ~</xsl:text>
+    <xsl:value-of select="@name"/>
+    <xsl:text>();&#xa;</xsl:text>
     <xsl:call-template name="memberfuncdecls"/>
     <xsl:for-each select="sprm">
       <xsl:text>&#xa;    // sprm</xsl:text>
@@ -81,6 +165,18 @@
     <xsl:text>&#xa;};&#xa;&#xa;</xsl:text>
   </xsl:template>
 
+  <xsl:template name="type">
+    <xsl:param name="name"/>
+    <xsl:choose>
+      <xsl:when test="$name='OUString'">
+	<xsl:text>::rtl::OUString</xsl:text>
+      </xsl:when>
+      <xsl:otherwise>
+	<xsl:value-of select="$name"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
   <xsl:template name="typedefs">
     <xsl:text>&#xa;    // typedefs</xsl:text>
     <xsl:for-each select="typedef">
@@ -96,7 +192,7 @@
       </xsl:choose>
       <xsl:for-each select="vector">
 	<xsl:text>::std::vector&lt;</xsl:text>
-	<xsl:value-of select="@type"/>
+	<xsl:call-template name="cctype"/>
 	<xsl:text>&gt;</xsl:text>
       </xsl:for-each>
       <xsl:text> </xsl:text>
@@ -125,8 +221,13 @@
     <xsl:text>PushBack</xsl:text>
   </xsl:template>
 
-  <xsl:template name="settersig">
+  <xsl:template name="settersig">    
     <xsl:param name="classname"/>
+    <xsl:variable name="impl">
+      <xsl:if test="string-length($classname) > 0">
+	<xsl:text>true</xsl:text>
+      </xsl:if>
+    </xsl:variable>
     <xsl:text>void </xsl:text>
     <xsl:if test="string-length($classname) > 0">
       <xsl:value-of select="$classname"/>
@@ -134,7 +235,9 @@
     </xsl:if>
     <xsl:call-template name="settername"/>
     <xsl:text>(</xsl:text>
-    <xsl:call-template name="cctype"/>
+    <xsl:call-template name="constcctyperef">
+      <xsl:with-param name="impl" select="$impl"/>
+    </xsl:call-template>
     <xsl:text> </xsl:text>
     <xsl:call-template name="paramname"/>
     <xsl:text>)</xsl:text>
@@ -142,8 +245,15 @@
 
   <xsl:template name="gettersig">
     <xsl:param name="classname"/>    
+    <xsl:variable name="impl">
+      <xsl:if test="string-length($classname) > 0">
+	<xsl:text>true</xsl:text>
+      </xsl:if>
+    </xsl:variable>
     <xsl:variable name="type" select="@type"/>
-    <xsl:call-template name="cctype"/>
+    <xsl:call-template name="constcctyperef">
+      <xsl:with-param name="impl" select="$impl"/>
+    </xsl:call-template>
     <xsl:text> </xsl:text>
     <xsl:if test="string-length($classname) > 0">
       <xsl:value-of select="$classname"/>
@@ -152,7 +262,7 @@
     <xsl:call-template name="gettername"/>
     <xsl:text>() const</xsl:text>
   </xsl:template>
-
+  
   <xsl:template name="pushbacksig">
     <xsl:param name="classname"/>    
     <xsl:variable name="pushback">
@@ -168,8 +278,10 @@
 	</xsl:if>    
 	<xsl:value-of select="$pushback"/>
 	<xsl:text>(</xsl:text>
-	<xsl:call-template name="cctype"/>
-	<xsl:text>r_Element</xsl:text>
+	<xsl:call-template name="constcctyperef">
+	  <xsl:with-param name="deep">true</xsl:with-param>
+	</xsl:call-template>
+	<xsl:text> r_Element</xsl:text>
 	<xsl:text>)</xsl:text>
       </xsl:for-each>
     </xsl:for-each>
@@ -198,7 +310,7 @@
   <xsl:template name="memberdecls">
     <xsl:for-each select="member">
       <xsl:text>&#xa;    </xsl:text>
-      <xsl:value-of select="@type"/>
+      <xsl:call-template name="cctype"/>
       <xsl:text> </xsl:text>
       <xsl:call-template name="memberid"/>
       <xsl:text>;</xsl:text>
@@ -206,25 +318,69 @@
   </xsl:template>
 
   <xsl:template name="cctype">
+    <xsl:param name="deep"/>
+    <xsl:param name="impl"/>
     <xsl:variable name="type" select="@type"/>
     <xsl:variable name="try1">
-      <xsl:for-each select="ancestor::class/typedef[@name=$type]">
-	<xsl:for-each select="vector">
-	  <xsl:text>const </xsl:text>
-	  <xsl:value-of select="$type"/>
-	  <xsl:text> &amp;</xsl:text>
+      <xsl:if test="$deep='true'">
+	<xsl:for-each select="ancestor::class/typedef[@name=$type]">
+	  <xsl:for-each select="vector">
+	    <xsl:call-template name="cctype">
+	      <xsl:with-param name="impl" select="$impl"/>
+	      <xsl:with-param name="deep" select="$deep"/>
+	    </xsl:call-template>
+	  </xsl:for-each>
 	</xsl:for-each>
-      </xsl:for-each>
+      </xsl:if>
     </xsl:variable>
     <xsl:choose>
       <xsl:when test="string-length($try1) > 0">
 	<xsl:value-of select="$try1"/>
       </xsl:when>
       <xsl:when test="@type='OUString'">
-	<xsl:text>const ::rtl::OUString &amp;</xsl:text>
+	<xsl:text>rtl::OUString</xsl:text>
+      </xsl:when>
+      <xsl:otherwise>
+	<xsl:if test="$impl='true'">
+	  <xsl:for-each select="ancestor::class">
+	    <xsl:variable name="classname" select="@name"/>
+	    <xsl:for-each select="typedef[@name=$type]">
+	      <xsl:value-of select="$classname"/>
+	      <xsl:text>::</xsl:text>
+	    </xsl:for-each>
+	  </xsl:for-each>
+	</xsl:if>
+	<xsl:value-of select="@type"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+  <xsl:template name="constcctype">
+    <xsl:param name="impl"/>
+    <xsl:choose>
+      <xsl:when test="@type='bool' or @type='sal_uInt32'">
+	<xsl:value-of select="@type"/>
       </xsl:when>
       <xsl:otherwise>
+	<xsl:text>const </xsl:text>
+	<xsl:call-template name="cctype">
+	  <xsl:with-param name="impl" select="$impl"/>
+	</xsl:call-template>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+  <xsl:template name="constcctyperef">
+    <xsl:param name="impl"/>
+    <xsl:choose>
+      <xsl:when test="@type='bool' or @type='sal_uInt32'">
 	<xsl:value-of select="@type"/>
+      </xsl:when>
+      <xsl:otherwise>
+	<xsl:call-template name="constcctype">
+	  <xsl:with-param name="impl" select="$impl"/>
+	</xsl:call-template>
+	<xsl:text> &amp;</xsl:text>
       </xsl:otherwise>
     </xsl:choose>
   </xsl:template>
@@ -396,7 +552,7 @@
       <xsl:text>&#xa;    dmapper_logger->startElement("</xsl:text>
       <xsl:value-of select="$classname"/>
       <xsl:text>.sprm");</xsl:text>
-      <xsl:text>&#xa;    dmapper_logger->chars(rSprm.toString());</xsl:text>
+      <xsl:text>&#xa;    dmapper_logger->chars(r_Sprm.toString());</xsl:text>
       <xsl:text>&#xa;#endif</xsl:text>
       <xsl:text>&#xa;    switch(r_Sprm.getId())</xsl:text>
       <xsl:text>&#xa;    {</xsl:text>
@@ -406,7 +562,7 @@
 	<xsl:text>:</xsl:text>
 	<xsl:text>&#xa;    /* WRITERFILTERSTATUS done: 100, planned: 2, spent: 0 */</xsl:text>
 	<xsl:call-template name="sprmaction">
-	  <xsl:with-param name="valuePrefix">r_Sprm.getValue-&gt;</xsl:with-param>
+	  <xsl:with-param name="valuePrefix">r_Sprm.getValue()-&gt;</xsl:with-param>
 	</xsl:call-template>
 	<xsl:text>&#xa;        break;</xsl:text>
       </xsl:for-each>
@@ -426,7 +582,7 @@
       <xsl:value-of select="ancestor::class/@name"/>
       <xsl:text>::resolveSprm(Sprm &amp; r_Sprm)</xsl:text>
       <xsl:text>&#xa;{</xsl:text>
-      <xsl:text>&#xa;    writerfilter::Reference&lt;Properties&gt;::Pointer_t pProperties = rSprm.getProps();</xsl:text>
+      <xsl:text>&#xa;    writerfilter::Reference&lt;Properties&gt;::Pointer_t pProperties = r_Sprm.getProps();</xsl:text>
       <xsl:text>&#xa;    if( pProperties.get())</xsl:text>
       <xsl:text>&#xa;        pProperties->resolve(*this);</xsl:text>
       <xsl:text>&#xa;}&#xa;</xsl:text>
@@ -472,9 +628,69 @@
       <xsl:text>&#xa;}&#xa;&#xa;</xsl:text>
     </xsl:for-each>
   </xsl:template>
-    
+  
+  <xsl:template name="constructorimpl">
+    <xsl:text>&#xa;</xsl:text>
+    <xsl:value-of select="@name"/>
+    <xsl:text>::</xsl:text>
+    <xsl:value-of select="@name"/>
+    <xsl:text>()</xsl:text>
+    <xsl:variable name="memberinits">
+      <xsl:for-each select="member[@type='sal_uInt32' or @type='bool']">
+	<xsl:if test="position() > 1">
+	  <xsl:text>,</xsl:text>
+	  <xsl:text>&#xa;  </xsl:text>
+	</xsl:if>
+	<xsl:call-template name="memberid"/>	
+	<xsl:choose>
+	  <xsl:when test="@type='sal_uInt32'">
+	    <xsl:text>(0)</xsl:text>
+	  </xsl:when>
+	  <xsl:when test="@type='bool'">
+	    <xsl:text>(false)</xsl:text>
+	  </xsl:when>
+	</xsl:choose>
+      </xsl:for-each>
+    </xsl:variable>
+    <xsl:if test="string-length($memberinits) > 0">
+      <xsl:text>&#xa;: </xsl:text>
+      <xsl:value-of select="$memberinits"/>
+    </xsl:if>
+    <xsl:text>&#xa;{</xsl:text>
+    <xsl:text>&#xa;}&#xa;&#xa;</xsl:text>
+  </xsl:template>
+  
+  <xsl:template name="destructorimpl">
+    <xsl:text>&#xa;</xsl:text>
+    <xsl:value-of select="@name"/>
+    <xsl:text>::~</xsl:text>
+    <xsl:value-of select="@name"/>
+    <xsl:text>()</xsl:text>
+    <xsl:text>&#xa;{</xsl:text>
+    <xsl:text>&#xa;}&#xa;&#xa;</xsl:text>
+  </xsl:template>
+  
   <xsl:template name="classimpl">
     <xsl:variable name="classname" select="@name"/>
+    <xsl:variable name="comment">
+      <xsl:text>class: </xsl:text>
+      <xsl:value-of select="$classname"/>
+    </xsl:variable>
+    <xsl:variable name="commentfill">
+      <xsl:value-of select="translate($comment, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ: ', 
+			                        '******************************************************')"/>
+    </xsl:variable>
+    <xsl:text>&#xa;/***</xsl:text>
+    <xsl:value-of select="$commentfill"/>
+    <xsl:text>*</xsl:text>
+    <xsl:text>&#xa; * </xsl:text>
+    <xsl:value-of select="$comment"/>
+    <xsl:text> *</xsl:text>
+    <xsl:text>&#xa; **</xsl:text>
+    <xsl:value-of select="$commentfill"/>
+    <xsl:text>**/&#xa;</xsl:text>
+    <xsl:call-template name="constructorimpl"/>
+    <xsl:call-template name="destructorimpl"/>
     <xsl:for-each select="member">
       <xsl:text>// member: </xsl:text>
       <xsl:value-of select="$classname"/>
diff --git a/writerfilter/source/dmapper/makefile.mk b/writerfilter/source/dmapper/makefile.mk
index 18c34634fca3..aba816b41c7f 100755
--- a/writerfilter/source/dmapper/makefile.mk
+++ b/writerfilter/source/dmapper/makefile.mk
@@ -51,6 +51,7 @@ SLOFILES= \
     $(SLO)$/DomainMapperTableHandler.obj \
     $(SLO)$/DomainMapperTableManager.obj \
     $(SLO)$/DomainMapper_Impl.obj \
+    $(SLO)$/FFDataHandler.obj \
     $(SLO)$/FontTable.obj \
     $(SLO)$/GraphicHelpers.obj \
     $(SLO)$/GraphicImport.obj \
-- 
cgit 


From 8db519c0e0db06df6114796127572b18995d0ab9 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 10 Mar 2010 17:36:03 +0100
Subject: writerfilter08: added stdio.h to Protocol.cxx for Fedora

---
 writerfilter/source/resourcemodel/Protocol.cxx | 1 +
 1 file changed, 1 insertion(+)

diff --git a/writerfilter/source/resourcemodel/Protocol.cxx b/writerfilter/source/resourcemodel/Protocol.cxx
index d574931487d7..7ae3c06f2675 100644
--- a/writerfilter/source/resourcemodel/Protocol.cxx
+++ b/writerfilter/source/resourcemodel/Protocol.cxx
@@ -28,6 +28,7 @@
  *
  ************************************************************************/
 
+#include <stdio.h>
 #include <rtl/ustrbuf.hxx>
 #include <resourcemodel/Protocol.hxx>
 #include <resourcemodel/WW8ResourceModel.hxx>
-- 
cgit 


From a837386d24183cfe31b2468febb44657e62a027d Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 11 Mar 2010 14:18:31 +0100
Subject: writerfilter08: tokenize FFData and fill FFDataHandler

---
 writerfilter/source/dmapper/DomainMapper.cxx      | 12 ++++++++++++
 writerfilter/source/dmapper/DomainMapper_Impl.cxx | 17 +++++++++++++++++
 writerfilter/source/dmapper/DomainMapper_Impl.hxx |  7 +++++++
 writerfilter/source/ooxml/model.xml               |  3 +++
 4 files changed, 39 insertions(+)

diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 3d2c9a4acfff..ad8d958be769 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -4208,6 +4208,18 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
             /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
         //TODO: numbering style should apply current numbering level - not yet supported
     break;
+    case NS_ooxml::LN_ffdata:
+    {
+        writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+        if (pProperties.get() != NULL)
+        {
+            FFDataHandler::Pointer_t pFFDataHandler(new FFDataHandler());
+
+            pProperties->resolve(*pFFDataHandler);
+            m_pImpl->SetFieldFFData(pFFDataHandler);
+        }
+    }
+    break;
     default:
         {
 #ifdef DEBUG_DOMAINMAPPER
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 592f05071a54..36a379b0c97d 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -3479,6 +3479,23 @@ void DomainMapper_Impl::SetFieldResult( ::rtl::OUString& rResult )
     }
 }
 
+void DomainMapper_Impl::SetFieldFFData(FFDataHandler::Pointer_t pFFDataHandler)
+{
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->startElement("setFieldFFData");
+#endif
+
+    FieldContextPtr pContext = m_aFieldStack.top();
+    if (pContext.get())
+    {
+        pContext->setFFDataHandler(pFFDataHandler);
+    }
+
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->endElement("setFieldFFData");
+#endif
+}
+
 /*-- 29.01.2007 11:33:17---------------------------------------------------
 //the end of field is reached (0x15 appeared) - the command might still be open
   -----------------------------------------------------------------------*/
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 8312c6d029f3..b618d0977366 100755
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -53,6 +53,7 @@
 #include <SettingsTable.hxx>
 #include <GraphicImport.hxx>
 #include <OLEHandler.hxx>
+#include <FFDataHandler.hxx>
 #include <map>
 
 #include <string.h>
@@ -135,6 +136,7 @@ class FieldContext
     ::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;
+    FFDataHandler::Pointer_t                                                        m_pFFDataHandler;
 
 public:
     FieldContext(::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xStart);
@@ -160,6 +162,9 @@ public:
     void    SetHyperlinkURL( const ::rtl::OUString& rURL ) { m_sHyperlinkURL = rURL; }
     const ::rtl::OUString&                                                      GetHyperlinkURL() { return m_sHyperlinkURL; }
 
+    void setFFDataHandler(FFDataHandler::Pointer_t pFFDataHandler) { m_pFFDataHandler = pFFDataHandler; }
+    FFDataHandler::Pointer_t getFFDataHandler() const { return m_pFFDataHandler; }
+
     ::std::vector<rtl::OUString> GetCommandParts() const;
 };
 
@@ -490,6 +495,8 @@ public:
     bool IsFieldResultAsString();
     //apply the result text to the related field
     void SetFieldResult( ::rtl::OUString& rResult );
+    // set FFData of top field context
+    void SetFieldFFData( FFDataHandler::Pointer_t pFFDataHandler );
     //the end of field is reached (0x15 appeared) - the command might still be open
     void PopFieldContext();
 
diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
index adbd294ab023..64a1035abe85 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -19,6 +19,7 @@
   <token tokenid="ooxml:trackchange"/>
   <token tokenid="ooxml:object"/>
   <token tokenid="ooxml:tblStart"/>
+  <token tokenid="ooxml:ffdata"/>
   <namespace name="dml-stylesheet" url="http://schemas.openxmlformats.org/drawingml/2006/main" file="dml-stylesheet.rng">
     <start name="theme"/>
     <start name="themeOverride"/>
@@ -22055,6 +22056,8 @@
       <element name="checkBox" tokenid="ooxml:CT_FFData_checkBox"/>
       <element name="ddList" tokenid="ooxml:CT_FFData_ddList"/>
       <element name="textInput" tokenid="ooxml:CT_FFData_textInput"/>
+      <action name="end" action="propagateCharacterPropertiesAsSet" sendtokenid="ooxml:ffdata"/>
+      <action name="end" action="clearProps"/>
     </resource>
     <resource name="CT_FFHelpText" resource="Properties">
       <attribute name="type" tokenid="ooxml:CT_FFHelpText_type"/>
-- 
cgit 


From da74953f4492dec8ec08e78c271fea14a864bc4c Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Fri, 12 Mar 2010 10:46:55 +0100
Subject: writerfilter08: import of FORMTEXT first try

---
 writerfilter/source/dmapper/DomainMapper_Impl.cxx | 33 ++++++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 36a379b0c97d..770e2c59453d 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -162,6 +162,12 @@ enum FieldId
      todo find alternative field
      */
     ,FIELD_FORMULA
+    /* FORMCHECKBOX */
+    ,FIELD_FORMCHECKBOX
+    /* FORMDROPDOWN */
+    ,FIELD_FORMDROPDOWN
+    /* FORMTEXT */
+    ,FIELD_FORMTEXT
     /* GOTOBUTTON text \* MERGEFORMAT ->
         not imported in old ww8 filter
         todo find alternative field
@@ -2681,7 +2687,10 @@ void DomainMapper_Impl::CloseFieldCommand()
                 {::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("FORMULA")),     "",                           "", FIELD_FORMULA },
+    //            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMCHECKBOX")),     "",                           "", FIELD_FORMCHECKBOX},
+    //            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMDROPDOWN")),     "",                           "", FIELD_FORMDROWDOWN},
+                {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMTEXT")),     "User", "", FIELD_FORMTEXT},
     //            {::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           },
@@ -2753,6 +2762,13 @@ void DomainMapper_Impl::CloseFieldCommand()
                     //add the service prefix
                     OUString sServiceName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextField."));
                     sServiceName += ::rtl::OUString::createFromAscii(aIt->second.cFieldServiceName );
+
+#ifdef DEBUG_DOMAINMAPPER
+                    dmapper_logger->startElement("fieldService");
+                    dmapper_logger->chars(sServiceName);
+                    dmapper_logger->endElement("fieldService");
+#endif
+
                     xFieldInterface = m_xTextFactory->createInstance(sServiceName);
                     xFieldProperties = uno::Reference< beans::XPropertySet >( xFieldInterface, uno::UNO_QUERY_THROW);
                 }
@@ -2967,6 +2983,21 @@ void DomainMapper_Impl::CloseFieldCommand()
                     break;
                     case FIELD_FILESIZE     : break;
                     case FIELD_FORMULA : break;
+                    case FIELD_FORMCHECKBOX : break;
+                    case FIELD_FORMDROPDOWN : break;
+                    case FIELD_FORMTEXT :
+                    {
+                        ::rtl::OUString sMasterName(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMTEXT")));
+                        uno::Reference< beans::XPropertySet > xMaster =
+                            FindOrCreateFieldMaster( "com.sun.star.text.FieldMaster.User", sMasterName );
+                        uno::Reference< text::XDependentTextField > xDependentField( xFieldInterface, uno::UNO_QUERY_THROW );
+                        xDependentField->attachTextFieldMaster( xMaster );
+
+                        xFieldProperties->setPropertyValue
+                            (rPropNameSupplier.GetName(PROP_HINT),
+                            uno::makeAny(pContext->getFFDataHandler()->getTextDefault()));
+                    }
+                    break;
                     case FIELD_GOTOBUTTON   : break;
                     case FIELD_HYPERLINK:
                     {
-- 
cgit 


From a61debdf9f3894a8011343c348b25c06d47742d0 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Fri, 12 Mar 2010 15:07:31 +0100
Subject: writerfilter08: refactoring of DomainMapper_Impl::CloseFieldCommand

---
 writerfilter/source/dmapper/DomainMapper_Impl.cxx | 905 ++++++++++++----------
 writerfilter/source/dmapper/DomainMapper_Impl.hxx |  26 +
 2 files changed, 510 insertions(+), 421 deletions(-)

diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 770e2c59453d..09672212af9f 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -2651,6 +2651,483 @@ void DomainMapper_Impl::AppendFieldCommand(::rtl::OUString& rPartOfCommand)
 
   -----------------------------------------------------------------------*/
 typedef std::multimap < sal_Int32, ::rtl::OUString > TOCStyleMap;
+
+const FieldConversionMap_t & lcl_GetFieldConversion()
+{
+static FieldConversionMap_t aFieldConversionMap;
+static bool bFilled = 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("FORMCHECKBOX")),     "",                           "", FIELD_FORMCHECKBOX},
+//            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMDROPDOWN")),     "",                           "", FIELD_FORMDROWDOWN},
+            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMTEXT")),     "InputUser", "", FIELD_FORMTEXT},
+//            {::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;
+    }
+
+    return aFieldConversionMap;
+}
+
+void DomainMapper_Impl::handleFieldAsk
+    (FieldContextPtr pContext,
+     PropertyNameSupplier& rPropNameSupplier,
+     uno::Reference< uno::XInterface > & xFieldInterface,
+     uno::Reference< beans::XPropertySet > xFieldProperties)
+{
+    //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;
+    }
+}
+
+void DomainMapper_Impl::handleAutoNum
+    (FieldContextPtr pContext,
+    PropertyNameSupplier& rPropNameSupplier,
+    uno::Reference< uno::XInterface > & xFieldInterface,
+    uno::Reference< beans::XPropertySet > xFieldProperties)
+{
+    //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 );
+}
+
+void DomainMapper_Impl::handleAuthor
+    (FieldContextPtr pContext,
+    PropertyNameSupplier& rPropNameSupplier,
+    uno::Reference< uno::XInterface > & xFieldInterface,
+    uno::Reference< beans::XPropertySet > xFieldProperties)
+{
+    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
+    }
+}
+
+    void DomainMapper_Impl::handleDocProperty
+        (FieldContextPtr pContext,
+        PropertyNameSupplier& rPropNameSupplier,
+        uno::Reference< uno::XInterface > & xFieldInterface,
+        uno::Reference< beans::XPropertySet > xFieldProperties)
+{
+    //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
+}
+
+void DomainMapper_Impl::handleToc
+    (FieldContextPtr pContext,
+    PropertyNameSupplier& rPropNameSupplier,
+    uno::Reference< uno::XInterface > & xFieldInterface,
+    uno::Reference< beans::XPropertySet > xFieldProperties,
+    const ::rtl::OUString & sTOCServiceName)
+{
+    ::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"))
+            : sTOCServiceName),
+         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 );
+}
+
+
 /*-- 29.01.2007 11:33:16---------------------------------------------------
 //the field command has to be closed (0x14 appeared)
   -----------------------------------------------------------------------*/
@@ -2664,83 +3141,9 @@ void DomainMapper_Impl::CloseFieldCommand()
     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("FORMCHECKBOX")),     "",                           "", FIELD_FORMCHECKBOX},
-    //            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMDROPDOWN")),     "",                           "", FIELD_FORMDROWDOWN},
-                {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMTEXT")),     "User", "", FIELD_FORMTEXT},
-    //            {::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] ));
-            }
+        FieldConversionMap_t aFieldConversionMap = lcl_GetFieldConversion();
 
-            bFilled = true;
-        }
         try
         {
             uno::Reference< uno::XInterface > xFieldInterface;
@@ -2778,69 +3181,15 @@ void DomainMapper_Impl::CloseFieldCommand()
                     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;
-                        }
-                    }
+                        handleFieldAsk(pContext, rPropNameSupplier, xFieldInterface, xFieldProperties);
                     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 );
-                    }
+                        handleAutoNum(pContext, rPropNameSupplier, xFieldInterface, xFieldProperties);
                     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
-                        }
-                    }
+                        handleAuthor(pContext, rPropNameSupplier, xFieldInterface, xFieldProperties);
                     break;
                     case FIELD_DATE:
                     {
@@ -2871,86 +3220,7 @@ void DomainMapper_Impl::CloseFieldCommand()
                     }
                     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
+                        handleDocProperty(pContext, rPropNameSupplier, xFieldInterface, xFieldProperties);
                     break;
                     case FIELD_DOCVARIABLE  :
                     {
@@ -2992,10 +3262,6 @@ void DomainMapper_Impl::CloseFieldCommand()
                             FindOrCreateFieldMaster( "com.sun.star.text.FieldMaster.User", sMasterName );
                         uno::Reference< text::XDependentTextField > xDependentField( xFieldInterface, uno::UNO_QUERY_THROW );
                         xDependentField->attachTextFieldMaster( xMaster );
-
-                        xFieldProperties->setPropertyValue
-                            (rPropNameSupplier.GetName(PROP_HINT),
-                            uno::makeAny(pContext->getFFDataHandler()->getTextDefault()));
                     }
                     break;
                     case FIELD_GOTOBUTTON   : break;
@@ -3182,211 +3448,8 @@ void DomainMapper_Impl::CloseFieldCommand()
                     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 );
-                    }
+                        handleToc(pContext, rPropNameSupplier, xFieldInterface, xFieldProperties,
+                                  ::rtl::OUString::createFromAscii(aIt->second.cFieldServiceName));
                     break;
                     case FIELD_TC :
                     {
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index b618d0977366..1998d6bd76cb 100755
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -489,6 +489,32 @@ public:
     bool IsOpenField() const;
     //collect the pieces of the command
     void AppendFieldCommand(::rtl::OUString& rPartOfCommand);
+    void handleFieldAsk
+        (FieldContextPtr pContext,
+        PropertyNameSupplier& rPropNameSupplier,
+        uno::Reference< uno::XInterface > & xFieldInterface,
+        uno::Reference< beans::XPropertySet > xFieldProperties);
+    void handleAutoNum
+        (FieldContextPtr pContext,
+        PropertyNameSupplier& rPropNameSupplier,
+        uno::Reference< uno::XInterface > & xFieldInterface,
+        uno::Reference< beans::XPropertySet > xFieldProperties);
+    void handleAuthor
+        (FieldContextPtr pContext,
+        PropertyNameSupplier& rPropNameSupplier,
+        uno::Reference< uno::XInterface > & xFieldInterface,
+        uno::Reference< beans::XPropertySet > xFieldProperties);
+    void handleDocProperty
+        (FieldContextPtr pContext,
+        PropertyNameSupplier& rPropNameSupplier,
+        uno::Reference< uno::XInterface > & xFieldInterface,
+        uno::Reference< beans::XPropertySet > xFieldProperties);
+    void handleToc
+        (FieldContextPtr pContext,
+        PropertyNameSupplier& rPropNameSupplier,
+        uno::Reference< uno::XInterface > & xFieldInterface,
+        uno::Reference< beans::XPropertySet > xFieldProperties,
+        const ::rtl::OUString & sTOCServiceName);
     //the field command has to be closed (0x14 appeared)
     void CloseFieldCommand();
     //the _current_ fields require a string type result while TOCs accept richt results
-- 
cgit 


From 57eeea2e74a7228537c7a518111785fd4525861f Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Fri, 12 Mar 2010 16:34:12 +0100
Subject: writerfilter08: Use 'Input' as field type for FORMTEXT

---
 writerfilter/source/dmapper/DomainMapper_Impl.cxx | 19 +++++++++++++------
 writerfilter/source/dmapper/PropertyIds.cxx       |  2 +-
 writerfilter/source/dmapper/PropertyIds.hxx       |  1 +
 3 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 09672212af9f..7e6392fe7abf 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -2679,7 +2679,7 @@ if(!bFilled)
 //            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMULA")),     "",                           "", FIELD_FORMULA },
 //            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMCHECKBOX")),     "",                           "", FIELD_FORMCHECKBOX},
 //            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMDROPDOWN")),     "",                           "", FIELD_FORMDROWDOWN},
-            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMTEXT")),     "InputUser", "", FIELD_FORMTEXT},
+            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMTEXT")),     "Input", "", FIELD_FORMTEXT},
 //            {::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           },
@@ -3257,11 +3257,18 @@ void DomainMapper_Impl::CloseFieldCommand()
                     case FIELD_FORMDROPDOWN : break;
                     case FIELD_FORMTEXT :
                     {
-                        ::rtl::OUString sMasterName(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMTEXT")));
-                        uno::Reference< beans::XPropertySet > xMaster =
-                            FindOrCreateFieldMaster( "com.sun.star.text.FieldMaster.User", sMasterName );
-                        uno::Reference< text::XDependentTextField > xDependentField( xFieldInterface, uno::UNO_QUERY_THROW );
-                        xDependentField->attachTextFieldMaster( xMaster );
+                        FFDataHandler::Pointer_t pFFDataHandler
+                            (pContext->getFFDataHandler());
+
+                        xFieldProperties->setPropertyValue
+                            (rPropNameSupplier.GetName(PROP_HINT),
+                            uno::makeAny(pFFDataHandler->getStatusText()));
+                        xFieldProperties->setPropertyValue
+                            (rPropNameSupplier.GetName(PROP_HELP),
+                            uno::makeAny(pFFDataHandler->getHelpText()));
+                        xFieldProperties->setPropertyValue
+                            (rPropNameSupplier.GetName(PROP_CONTENT),
+                            uno::makeAny(pFFDataHandler->getTextDefault()));
                     }
                     break;
                     case FIELD_GOTOBUTTON   : break;
diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx
index 868b799277b2..ffe7c50be6be 100644
--- a/writerfilter/source/dmapper/PropertyIds.cxx
+++ b/writerfilter/source/dmapper/PropertyIds.cxx
@@ -320,7 +320,7 @@ const rtl::OUString& PropertyNameSupplier::GetName( PropertyIds eId ) const
             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 PROP_PARA_SPLIT:    sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaSplit")); break;
-//            case       :    sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
+            case PROP_HELP:    sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Help")); 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;
diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx
index ff4be6058018..b2b8635f72aa 100644
--- a/writerfilter/source/dmapper/PropertyIds.hxx
+++ b/writerfilter/source/dmapper/PropertyIds.hxx
@@ -283,6 +283,7 @@ enum PropertyIds
 /*247*/ ,PROP_LISTTAB_STOP_POSITION
 /*248*/ ,PROP_POSITION_AND_SPACE_MODE
 /*249*/ ,PROP_PARA_SPLIT
+/*250*/ ,PROP_HELP
 };
 struct PropertyNameSupplier_Impl;
 class PropertyNameSupplier
-- 
cgit 


From 0b418340cb35bac8daea1a709b9f938a82a96802 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Mon, 15 Mar 2010 17:44:14 +0100
Subject: writerfilter08: new class FormControlHelper for adding form controls

---
 writerfilter/source/dmapper/FormControlHelper.cxx | 106 ++++++++++++++++++++++
 writerfilter/source/dmapper/FormControlHelper.hxx |  56 ++++++++++++
 writerfilter/source/dmapper/makefile.mk           |   1 +
 3 files changed, 163 insertions(+)
 create mode 100644 writerfilter/source/dmapper/FormControlHelper.cxx
 create mode 100644 writerfilter/source/dmapper/FormControlHelper.hxx

diff --git a/writerfilter/source/dmapper/FormControlHelper.cxx b/writerfilter/source/dmapper/FormControlHelper.cxx
new file mode 100644
index 000000000000..d3dd982b3c1b
--- /dev/null
+++ b/writerfilter/source/dmapper/FormControlHelper.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 <com/sun/star/uno/Type.hxx>
+#include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/form/XFormComponent.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include "FormControlHelper.hxx"
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+
+struct FormControlHelper::FormControlHelper_Impl
+{
+    uno::Reference<lang::XMultiServiceFactory> rServiceFactory;
+    uno::Reference<form::XFormComponent> rFormComponent;
+    awt::Size aSize;
+};
+
+FormControlHelper::FormControlHelper(FFDataHandler::Pointer_t pFFData)
+    : m_pFFData(pFFData), m_pImpl(new FormControlHelper_Impl)
+{
+}
+
+FormControlHelper::~FormControlHelper()
+{
+}
+
+bool FormControlHelper::insertCheckBox()
+{
+    return true;
+}
+
+bool FormControlHelper::createCheckbox()
+{
+    uno::Reference<uno::XInterface> xInterface =
+        m_pImpl->rServiceFactory->createInstance
+        (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.form.component.CheckBox")));
+
+    if (!xInterface.is())
+        return false;
+
+    m_pImpl->rFormComponent = uno::Reference<form::XFormComponent>(xInterface, uno::UNO_QUERY);
+    if (!m_pImpl->rFormComponent.is())
+        return false;
+
+    uno::Reference<beans::XPropertySet> xPropSet(xInterface, uno::UNO_QUERY);
+
+    m_pImpl->aSize.Width = 16 * m_pFFData->getCheckboxHeight();
+    m_pImpl->aSize.Height = m_pImpl->aSize.Width;
+
+    uno::Any aAny;
+    if (m_pFFData->getStatusText().getLength())
+    {
+        aAny <<= m_pFFData->getStatusText();
+
+        xPropSet->setPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Name")), aAny);
+        xPropSet->setPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HelpText")), aAny);
+    }
+
+    aAny <<= m_pFFData->getCheckboxChecked();
+    xPropSet->setPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultState")), aAny);
+
+    if (m_pFFData->getHelpText().getLength())
+    {
+        aAny <<= m_pFFData->getHelpText();
+        xPropSet->setPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HelpF1Text")), aAny);
+    }
+
+    return true;
+}
+
+bool FormControlHelper::insertControl()
+{
+    return true;
+}
+
+}}
diff --git a/writerfilter/source/dmapper/FormControlHelper.hxx b/writerfilter/source/dmapper/FormControlHelper.hxx
new file mode 100644
index 000000000000..a4a785f09234
--- /dev/null
+++ b/writerfilter/source/dmapper/FormControlHelper.hxx
@@ -0,0 +1,56 @@
+/*************************************************************************
+ *
+ * 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_FORM_CONTROL_HELPER_HXX
+#define INCLUDED_FORM_CONTROL_HELPER_HXX
+
+#include <FFDataHandler.hxx>
+
+namespace writerfilter {
+namespace dmapper {
+
+class FormControlHelper
+{
+public:
+    FormControlHelper(FFDataHandler::Pointer_t pFFData);
+    ~FormControlHelper();
+
+    bool insertCheckBox();
+
+private:
+    FFDataHandler::Pointer_t m_pFFData;
+    struct FormControlHelper_Impl;
+    typedef boost::shared_ptr<FormControlHelper_Impl> ImplPointer_t;
+    ImplPointer_t m_pImpl;
+
+    bool createCheckbox();
+    bool insertControl();
+};
+
+}
+}
+
+#endif // INCLUDED_FORM_CONTROL_HELPER_HXX
diff --git a/writerfilter/source/dmapper/makefile.mk b/writerfilter/source/dmapper/makefile.mk
index 514cc04e09a3..a49298416a7f 100755
--- a/writerfilter/source/dmapper/makefile.mk
+++ b/writerfilter/source/dmapper/makefile.mk
@@ -48,6 +48,7 @@ SLOFILES= \
     $(SLO)$/DomainMapperTableManager.obj \
     $(SLO)$/DomainMapper_Impl.obj \
     $(SLO)$/FFDataHandler.obj \
+    $(SLO)$/FormControlHelper.obj \
     $(SLO)$/FontTable.obj \
     $(SLO)$/GraphicHelpers.obj \
     $(SLO)$/GraphicImport.obj \
-- 
cgit 


From 9734182d56ecf4ed94e5341f9a587f46f4b69007 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 16 Mar 2010 17:34:45 +0100
Subject: writerfilter08: More work on FormControlHelper

---
 writerfilter/source/dmapper/FormControlHelper.cxx | 105 ++++++++++++++++++++--
 writerfilter/source/dmapper/FormControlHelper.hxx |   7 +-
 2 files changed, 103 insertions(+), 9 deletions(-)

diff --git a/writerfilter/source/dmapper/FormControlHelper.cxx b/writerfilter/source/dmapper/FormControlHelper.cxx
index d3dd982b3c1b..f1d0ad97dcf0 100644
--- a/writerfilter/source/dmapper/FormControlHelper.cxx
+++ b/writerfilter/source/dmapper/FormControlHelper.cxx
@@ -25,12 +25,18 @@
  *
  ************************************************************************/
 
-#include <com/sun/star/uno/Type.hxx>
-#include <com/sun/star/uno/Any.hxx>
-#include <com/sun/star/uno/Reference.hxx>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/form/XFormComponent.hpp>
+#include <com/sun/star/awt/XControlModel.hpp>
 #include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/container/XIndexContainer.hpp>
+#include <com/sun/star/drawing/XControlShape.hpp>
+#include <com/sun/star/form/XForm.hpp>
+#include <com/sun/star/form/XFormComponent.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/text/TextContentAnchorType.hpp>
+#include <com/sun/star/text/VertOrientation.hpp>
+#include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/uno/Type.hxx>
+
 #include "FormControlHelper.hxx"
 
 namespace writerfilter {
@@ -40,14 +46,50 @@ using namespace ::com::sun::star;
 
 struct FormControlHelper::FormControlHelper_Impl
 {
-    uno::Reference<lang::XMultiServiceFactory> rServiceFactory;
-    uno::Reference<form::XFormComponent> rFormComponent;
     awt::Size aSize;
+    uno::Reference<form::XForm> rForm;
+    uno::Reference<form::XFormComponent> rFormComponent;
+    uno::Reference<lang::XMultiServiceFactory> rServiceFactory;
+    uno::Reference<text::XTextDocument> rTextDocument;
+    uno::Reference<text::XTextRange> rTextRange;
+
+    uno::Reference<lang::XMultiServiceFactory> getServiceFactory();
+    uno::Reference<form::XForm> getForm();
+    uno::Reference<container::XIndexContainer> getFormComps();
 };
 
-FormControlHelper::FormControlHelper(FFDataHandler::Pointer_t pFFData)
+uno::Reference<lang::XMultiServiceFactory> FormControlHelper::FormControlHelper_Impl::getServiceFactory()
+{
+    uno::Reference<lang::XMultiServiceFactory> xFactory(rTextDocument, uno::UNO_QUERY);
+
+    return xFactory;
+}
+
+uno::Reference<form::XForm> FormControlHelper::FormControlHelper_Impl::getForm()
+{
+    if (! rForm.is())
+    {
+        uno::Reference<uno::XInterface>
+            xRef(rServiceFactory->createInstance
+                 (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.form.component.Form"))));
+        rForm = uno::Reference<form::XForm>(xRef, uno::UNO_QUERY);
+    }
+
+    return rForm;
+}
+
+uno::Reference<container::XIndexContainer> FormControlHelper::FormControlHelper_Impl::getFormComps()
+{
+    uno::Reference<container::XIndexContainer> xIndexContainer(getForm(), uno::UNO_QUERY);
+
+    return xIndexContainer;
+}
+
+FormControlHelper::FormControlHelper(uno::Reference<text::XTextDocument> rTextDocument,
+                                     FFDataHandler::Pointer_t pFFData)
     : m_pFFData(pFFData), m_pImpl(new FormControlHelper_Impl)
 {
+    m_pImpl->rTextDocument = rTextDocument;
 }
 
 FormControlHelper::~FormControlHelper()
@@ -100,6 +142,53 @@ bool FormControlHelper::createCheckbox()
 
 bool FormControlHelper::insertControl()
 {
+    uno::Reference<container::XIndexContainer> xFormComps(m_pImpl->getFormComps());
+    if (! xFormComps.is())
+        return false;
+
+    uno::Any aAny;
+    aAny <<= m_pImpl->rFormComponent;
+    xFormComps->insertByIndex(xFormComps->getCount(), aAny);
+
+    if (! m_pImpl->getServiceFactory().is())
+        return false;
+
+    uno::Reference<uno::XInterface> xInterface =
+        m_pImpl->getServiceFactory()->createInstance
+        (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.ControlShape")));
+
+    if (! xInterface.is())
+        return false;
+
+    uno::Reference<drawing::XShape> xShape(xInterface, uno::UNO_QUERY);
+
+    if (! xShape.is())
+        return false;
+
+    xShape->setSize(m_pImpl->aSize);
+
+    uno::Reference<beans::XPropertySet> xShapeProps(xShape, uno::UNO_QUERY);
+
+    sal_uInt16 nTmp = text::TextContentAnchorType_AS_CHARACTER;
+    aAny <<= nTmp;
+
+    static const ::rtl::OUString sAnchorType(RTL_CONSTASCII_USTRINGPARAM("AnchorType"));
+    xShapeProps->setPropertyValue(sAnchorType, aAny);
+
+    static const ::rtl::OUString sVertOrient(RTL_CONSTASCII_USTRINGPARAM("VertOrient"));
+    nTmp = text::VertOrientation::TOP;
+    aAny <<= nTmp;
+    xShapeProps->setPropertyValue(sVertOrient, aAny);
+
+    aAny <<= m_pImpl->rTextRange;
+
+    static const ::rtl::OUString sTextRange(RTL_CONSTASCII_USTRINGPARAM("TextRange"));
+    xShapeProps->setPropertyValue(sTextRange, aAny);
+
+    uno::Reference<drawing::XControlShape> xControlShape(xShape, uno::UNO_QUERY);
+    uno::Reference<awt::XControlModel> xControlModel(m_pImpl->rFormComponent, uno::UNO_QUERY);
+    xControlShape->setControl(xControlModel);
+
     return true;
 }
 
diff --git a/writerfilter/source/dmapper/FormControlHelper.hxx b/writerfilter/source/dmapper/FormControlHelper.hxx
index a4a785f09234..6618921c62a0 100644
--- a/writerfilter/source/dmapper/FormControlHelper.hxx
+++ b/writerfilter/source/dmapper/FormControlHelper.hxx
@@ -28,14 +28,19 @@
 #define INCLUDED_FORM_CONTROL_HELPER_HXX
 
 #include <FFDataHandler.hxx>
+#include <com/sun/star/text/XTextDocument.hpp>
+#include <com/sun/star/uno/Reference.hxx>
 
 namespace writerfilter {
 namespace dmapper {
 
+using namespace ::com::sun::star;
+
 class FormControlHelper
 {
 public:
-    FormControlHelper(FFDataHandler::Pointer_t pFFData);
+    FormControlHelper(uno::Reference<text::XTextDocument> rTextDocument,
+                      FFDataHandler::Pointer_t pFFData);
     ~FormControlHelper();
 
     bool insertCheckBox();
-- 
cgit 


From b852f9853fd94204b3855552b5580c73750f47e0 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 18 Mar 2010 09:18:24 +0100
Subject: writerfilter08: first try to use FormControlHelper to insert checkbox

---
 writerfilter/source/dmapper/DomainMapper_Impl.cxx | 324 +++-------------------
 writerfilter/source/dmapper/DomainMapper_Impl.hxx |   5 +
 writerfilter/source/dmapper/FieldTypes.hxx        | 299 ++++++++++++++++++++
 writerfilter/source/dmapper/FormControlHelper.cxx |  43 ++-
 writerfilter/source/dmapper/FormControlHelper.hxx |   8 +-
 5 files changed, 382 insertions(+), 297 deletions(-)
 create mode 100644 writerfilter/source/dmapper/FieldTypes.hxx

diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 7e6392fe7abf..06c484e59bad 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -69,6 +69,7 @@
 #include <com/sun/star/util/XNumberFormats.hpp>
 #include <rtl/ustrbuf.hxx>
 #include <rtl/string.h>
+#include "FieldTypes.hxx"
 
 #include <tools/string.hxx>
 #ifdef DEBUG_DOMAINMAPPER
@@ -88,275 +89,6 @@ 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
-    /* FORMCHECKBOX */
-    ,FIELD_FORMCHECKBOX
-    /* FORMDROPDOWN */
-    ,FIELD_FORMDROPDOWN
-    /* FORMTEXT */
-    ,FIELD_FORMTEXT
-    /* GOTOBUTTON text \* MERGEFORMAT ->
-        not imported in old ww8 filter
-        todo find alternative field
-     */
-    ,FIELD_GOTOBUTTON
-    /* HYPERLINK "link" \* MERGEFORMAT ->
-        not imported in old ww8 filter
-        ww8filterimprovement: now imported as hyperlink
-     */
-    ,FIELD_HYPERLINK
-    /* IF condition "then text" "else text" ->
-        not imported in old ww8 filter
-        ww8filterimprovement: now imported
-        todo: condition, if text, else text still missing
-     */
-    ,FIELD_IF
-    /* INFO NameOfInfo \* MERGEFORMAT -> old
-        todo: filter imports wrong?
-     */
-    ,FIELD_INFO
-    /* INCLUDEPICTURE path \* MERGEFORMAT->
-     old filter imports an embedded picture
-     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;
@@ -2677,7 +2409,7 @@ if(!bFilled)
             {::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("FORMCHECKBOX")),     "",                           "", FIELD_FORMCHECKBOX},
+            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMCHECKBOX")),     "",                           "", FIELD_FORMCHECKBOX},
 //            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMDROPDOWN")),     "",                           "", FIELD_FORMDROWDOWN},
             {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMTEXT")),     "Input", "", FIELD_FORMTEXT},
 //            {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GOTOBUTTON")),    "",                         "", FIELD_GOTOBUTTON   },
@@ -3157,10 +2889,20 @@ void DomainMapper_Impl::CloseFieldCommand()
             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)
+                bool bCreateField = true;
+                switch (aIt->second.eFieldId)
+                {
+                case FIELD_HYPERLINK:
+                case FIELD_DOCPROPERTY:
+                case FIELD_TOC:
+                case FIELD_TC:
+                case FIELD_FORMCHECKBOX:
+                    bCreateField = false;
+                    break;
+                default:
+                    break;
+                }
+                if( bCreateField)
                 {
                     //add the service prefix
                     OUString sServiceName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextField."));
@@ -3253,7 +2995,17 @@ void DomainMapper_Impl::CloseFieldCommand()
                     break;
                     case FIELD_FILESIZE     : break;
                     case FIELD_FORMULA : break;
-                    case FIELD_FORMCHECKBOX : break;
+                    case FIELD_FORMCHECKBOX :
+                        {
+                            FFDataHandler::Pointer_t
+                                pFFDataHandler(pContext->getFFDataHandler());
+                            FormControlHelper::Pointer_t
+                                pFormControlHelper(new FormControlHelper
+                                                   (FIELD_FORMCHECKBOX,
+                                                    m_xTextDocument, pFFDataHandler));
+                            pContext->setFormControlHelper(pFormControlHelper);
+                        }
+                        break;
                     case FIELD_FORMDROPDOWN : break;
                     case FIELD_FORMTEXT :
                     {
@@ -3639,15 +3391,23 @@ void DomainMapper_Impl::PopFieldContext()
                         uno::Reference< text::XTextAppendAndConvert > xTextAppendAndConvert( xTextAppend, uno::UNO_QUERY_THROW );
                         xTextAppendAndConvert->appendTextContent( xToInsert, uno::Sequence< beans::PropertyValue >() );
                     }
-                    else if(pContext->GetHyperlinkURL().getLength())
+                    else
                     {
-                        PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
-                        xCrsr->gotoEnd( true );
+                        FormControlHelper::Pointer_t pFormControlHelper(pContext->getFormControlHelper());
+                        if (pFormControlHelper.get() != NULL)
+                        {
+                            pFormControlHelper->insertControl();
+                        }
+                        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()));
+                            uno::Reference< beans::XPropertySet > xCrsrProperties( xCrsr, uno::UNO_QUERY_THROW );
+                            xCrsrProperties->setPropertyValue(
+                                                              rPropNameSupplier.GetName(PROP_HYPER_LINK_U_R_L), uno::
+                                                              makeAny(pContext->GetHyperlinkURL()));
+                        }
                     }
                 }
             }
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 1998d6bd76cb..233b9d5c6d81 100755
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -54,6 +54,7 @@
 #include <GraphicImport.hxx>
 #include <OLEHandler.hxx>
 #include <FFDataHandler.hxx>
+#include <FormControlHelper.hxx>
 #include <map>
 
 #include <string.h>
@@ -137,6 +138,7 @@ class FieldContext
     ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >       m_xTC;//TOX entry
     ::rtl::OUString                                                                 m_sHyperlinkURL;
     FFDataHandler::Pointer_t                                                        m_pFFDataHandler;
+    FormControlHelper::Pointer_t                                                    m_pFormControlHelper;
 
 public:
     FieldContext(::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xStart);
@@ -165,6 +167,9 @@ public:
     void setFFDataHandler(FFDataHandler::Pointer_t pFFDataHandler) { m_pFFDataHandler = pFFDataHandler; }
     FFDataHandler::Pointer_t getFFDataHandler() const { return m_pFFDataHandler; }
 
+    void setFormControlHelper(FormControlHelper::Pointer_t pFormControlHelper) { m_pFormControlHelper = pFormControlHelper; }
+    FormControlHelper::Pointer_t getFormControlHelper() const { return m_pFormControlHelper; }
+
     ::std::vector<rtl::OUString> GetCommandParts() const;
 };
 
diff --git a/writerfilter/source/dmapper/FieldTypes.hxx b/writerfilter/source/dmapper/FieldTypes.hxx
new file mode 100644
index 000000000000..d0a98efcb0fb
--- /dev/null
+++ b/writerfilter/source/dmapper/FieldTypes.hxx
@@ -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.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_FIELD_TYPES_HXX
+#define INCLUDED_FIELD_TYPES_HXX
+
+namespace writerfilter {
+namespace dmapper {
+
+enum FieldId
+{
+    /* ADDRESSBLOCK \d \* MERGEFORMAT -> Addressblock completely unsupported*/
+    FIELD_ADDRESSBLOCK
+    /* ADVANCE \d downvalue \l leftvalue \r rightvalue \u upvalue \x xvalue \y yvalue -> unsupported*/
+    ,FIELD_ADVANCE
+    /* ASK bookmarkname "hint" \d defaultanswer \o \* MERGEFORMAT ->
+     the hint is not always quoted, inputfield with default answer, prompt before merge (\o)
+     */
+    ,FIELD_ASK
+    /* AUTONUM \* Numberingswitch ->
+     mapped to sequence field "AutoNr"
+     */
+    ,FIELD_AUTONUM
+    /* AUTONUMLGL \* Numberingswitch ->
+     mapped to sequence field "AutoNr"
+     */
+    ,FIELD_AUTONUMLGL
+    /* AUTONUMOUT \* Numberingswitch ->
+        mapped to sequence field "AutoNr"
+     */
+    ,FIELD_AUTONUMOUT
+    /* AUTHOR NewAuthor \* defaultswitch \* MERGEFORMAT ->
+        mapped to sequence field "AutoNr"
+     */
+    ,FIELD_AUTHOR
+    /* COMMENTS "comment" \* MERGEFORMAT ->
+        Docinfo-Comments
+     */
+    ,FIELD_COMMENTS
+    /* CREATEDATE \h \* MERGEFORMAT ->
+     docinfo-created-date
+     */
+    ,FIELD_CREATEDATE
+    /* DATE \@ "number format" \s \* MERGEFORMAT ->
+        ww8filterimprovement: multiple languages now supported
+     */
+    ,FIELD_DATE
+    /* DOCPROPERTY propertyname \* MERGEFORMAT ->
+        ww8filterimprovement: some fields imported as functionally equivalent fields if possible,
+        the others imported as UserField
+     */
+    ,FIELD_DOCPROPERTY
+    /* DOCVARIABLE Name \* MERGEFORMAT ->
+     ww8filterimprovement: now imported as user fields
+     */
+    ,FIELD_DOCVARIABLE
+    /* EDITTIME \# "displayformat" \* Numberingswitch \* MERGEFORMAT ->
+        DocInfo-Modified-Date
+        ww8filterimprovement: multiple languages now supported
+     */
+    ,FIELD_EDITTIME
+    /* FILLIN "text to fill in" \d defaultanswer \o \* MERGEFORMAT ->
+        Function-InputField
+     */
+    ,FIELD_FILLIN
+    /* FILENAME \p \* * MERGEFORMAT ->
+        file name (\p with path)
+     */
+    ,FIELD_FILENAME
+    /* FILESIZE \* NumberingType \* MERGEFORMAT ->
+     not imported in old ww8 filter, see lcl_ParseNumberingType
+     todo find alternative field
+     */
+    ,FIELD_FILESIZE
+    /* =formula \# "number format"
+     todo find alternative field
+     */
+    ,FIELD_FORMULA
+    /* FORMCHECKBOX */
+    ,FIELD_FORMCHECKBOX
+    /* FORMDROPDOWN */
+    ,FIELD_FORMDROPDOWN
+    /* FORMTEXT */
+    ,FIELD_FORMTEXT
+    /* GOTOBUTTON text \* MERGEFORMAT ->
+        not imported in old ww8 filter
+        todo find alternative field
+     */
+    ,FIELD_GOTOBUTTON
+    /* HYPERLINK "link" \* MERGEFORMAT ->
+        not imported in old ww8 filter
+        ww8filterimprovement: now imported as hyperlink
+     */
+    ,FIELD_HYPERLINK
+    /* IF condition "then text" "else text" ->
+        not imported in old ww8 filter
+        ww8filterimprovement: now imported
+        todo: condition, if text, else text still missing
+     */
+    ,FIELD_IF
+    /* INFO NameOfInfo \* MERGEFORMAT -> old
+        todo: filter imports wrong?
+     */
+    ,FIELD_INFO
+    /* INCLUDEPICTURE path \* MERGEFORMAT->
+     old filter imports an embedded picture
+     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
+};
+
+}}
+#endif // INCLUDED_FIELD_TYPES_HXX
diff --git a/writerfilter/source/dmapper/FormControlHelper.cxx b/writerfilter/source/dmapper/FormControlHelper.cxx
index f1d0ad97dcf0..62e062ababf0 100644
--- a/writerfilter/source/dmapper/FormControlHelper.cxx
+++ b/writerfilter/source/dmapper/FormControlHelper.cxx
@@ -46,6 +46,7 @@ using namespace ::com::sun::star;
 
 struct FormControlHelper::FormControlHelper_Impl
 {
+    FieldId m_eFieldId;
     awt::Size aSize;
     uno::Reference<form::XForm> rForm;
     uno::Reference<form::XFormComponent> rFormComponent;
@@ -60,9 +61,10 @@ struct FormControlHelper::FormControlHelper_Impl
 
 uno::Reference<lang::XMultiServiceFactory> FormControlHelper::FormControlHelper_Impl::getServiceFactory()
 {
-    uno::Reference<lang::XMultiServiceFactory> xFactory(rTextDocument, uno::UNO_QUERY);
+    if (! rServiceFactory.is())
+        rServiceFactory = uno::Reference<lang::XMultiServiceFactory>(rTextDocument, uno::UNO_QUERY);
 
-    return xFactory;
+    return rServiceFactory;
 }
 
 uno::Reference<form::XForm> FormControlHelper::FormControlHelper_Impl::getForm()
@@ -70,7 +72,7 @@ uno::Reference<form::XForm> FormControlHelper::FormControlHelper_Impl::getForm()
     if (! rForm.is())
     {
         uno::Reference<uno::XInterface>
-            xRef(rServiceFactory->createInstance
+            xRef(getServiceFactory()->createInstance
                  (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.form.component.Form"))));
         rForm = uno::Reference<form::XForm>(xRef, uno::UNO_QUERY);
     }
@@ -85,10 +87,12 @@ uno::Reference<container::XIndexContainer> FormControlHelper::FormControlHelper_
     return xIndexContainer;
 }
 
-FormControlHelper::FormControlHelper(uno::Reference<text::XTextDocument> rTextDocument,
+FormControlHelper::FormControlHelper(FieldId eFieldId,
+                                     uno::Reference<text::XTextDocument> rTextDocument,
                                      FFDataHandler::Pointer_t pFFData)
     : m_pFFData(pFFData), m_pImpl(new FormControlHelper_Impl)
 {
+    m_pImpl->m_eFieldId = eFieldId;
     m_pImpl->rTextDocument = rTextDocument;
 }
 
@@ -96,15 +100,16 @@ FormControlHelper::~FormControlHelper()
 {
 }
 
-bool FormControlHelper::insertCheckBox()
-{
-    return true;
-}
-
 bool FormControlHelper::createCheckbox()
 {
+    uno::Reference<lang::XMultiServiceFactory>
+        xServiceFactory(m_pImpl->getServiceFactory());
+
+    if (! xServiceFactory.is())
+        return false;
+
     uno::Reference<uno::XInterface> xInterface =
-        m_pImpl->rServiceFactory->createInstance
+        xServiceFactory->createInstance
         (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.form.component.CheckBox")));
 
     if (!xInterface.is())
@@ -142,12 +147,26 @@ bool FormControlHelper::createCheckbox()
 
 bool FormControlHelper::insertControl()
 {
+    bool bCreated = false;
+
+    switch (m_pImpl->m_eFieldId)
+    {
+    case FIELD_FORMCHECKBOX:
+        bCreated = createCheckbox();
+        break;
+    default:
+        break;
+    }
+
+    if (!bCreated)
+        return false;
+
     uno::Reference<container::XIndexContainer> xFormComps(m_pImpl->getFormComps());
     if (! xFormComps.is())
         return false;
 
-    uno::Any aAny;
-    aAny <<= m_pImpl->rFormComponent;
+    uno::Any aAny(&m_pImpl->rFormComponent,
+                  ::getCppuType((const uno::Reference<form::XFormComponent >*)0));
     xFormComps->insertByIndex(xFormComps->getCount(), aAny);
 
     if (! m_pImpl->getServiceFactory().is())
diff --git a/writerfilter/source/dmapper/FormControlHelper.hxx b/writerfilter/source/dmapper/FormControlHelper.hxx
index 6618921c62a0..7f6a72fb553f 100644
--- a/writerfilter/source/dmapper/FormControlHelper.hxx
+++ b/writerfilter/source/dmapper/FormControlHelper.hxx
@@ -30,6 +30,7 @@
 #include <FFDataHandler.hxx>
 #include <com/sun/star/text/XTextDocument.hpp>
 #include <com/sun/star/uno/Reference.hxx>
+#include "FieldTypes.hxx"
 
 namespace writerfilter {
 namespace dmapper {
@@ -39,11 +40,13 @@ using namespace ::com::sun::star;
 class FormControlHelper
 {
 public:
-    FormControlHelper(uno::Reference<text::XTextDocument> rTextDocument,
+    typedef boost::shared_ptr<FormControlHelper> Pointer_t;
+    FormControlHelper(FieldId eFieldId,
+                      uno::Reference<text::XTextDocument> rTextDocument,
                       FFDataHandler::Pointer_t pFFData);
     ~FormControlHelper();
 
-    bool insertCheckBox();
+    bool insertControl();
 
 private:
     FFDataHandler::Pointer_t m_pFFData;
@@ -52,7 +55,6 @@ private:
     ImplPointer_t m_pImpl;
 
     bool createCheckbox();
-    bool insertControl();
 };
 
 }
-- 
cgit 


From 8331c76624ad2e72df162979aaf683f4b576e1db Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 18 Mar 2010 18:39:24 +0100
Subject: writerfilter08: second try to insert checkbox

---
 writerfilter/source/dmapper/DomainMapper_Impl.cxx |  6 +--
 writerfilter/source/dmapper/FormControlHelper.cxx | 64 ++++++++++++++++++++---
 writerfilter/source/dmapper/FormControlHelper.hxx |  2 +-
 3 files changed, 61 insertions(+), 11 deletions(-)

diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 06c484e59bad..3b024fee2f2c 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -3396,7 +3396,8 @@ void DomainMapper_Impl::PopFieldContext()
                         FormControlHelper::Pointer_t pFormControlHelper(pContext->getFormControlHelper());
                         if (pFormControlHelper.get() != NULL)
                         {
-                            pFormControlHelper->insertControl();
+                            uno::Reference<text::XTextRange> xTxtRange(xCrsr, uno::UNO_QUERY);
+                            pFormControlHelper->insertControl(xTxtRange);
                         }
                         else if(pContext->GetHyperlinkURL().getLength())
                         {
@@ -3404,8 +3405,7 @@ void DomainMapper_Impl::PopFieldContext()
                             xCrsr->gotoEnd( true );
 
                             uno::Reference< beans::XPropertySet > xCrsrProperties( xCrsr, uno::UNO_QUERY_THROW );
-                            xCrsrProperties->setPropertyValue(
-                                                              rPropNameSupplier.GetName(PROP_HYPER_LINK_U_R_L), uno::
+                            xCrsrProperties->setPropertyValue(rPropNameSupplier.GetName(PROP_HYPER_LINK_U_R_L), uno::
                                                               makeAny(pContext->GetHyperlinkURL()));
                         }
                     }
diff --git a/writerfilter/source/dmapper/FormControlHelper.cxx b/writerfilter/source/dmapper/FormControlHelper.cxx
index 62e062ababf0..50ce8f20d53a 100644
--- a/writerfilter/source/dmapper/FormControlHelper.cxx
+++ b/writerfilter/source/dmapper/FormControlHelper.cxx
@@ -29,8 +29,11 @@
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/container/XIndexContainer.hpp>
 #include <com/sun/star/drawing/XControlShape.hpp>
+#include <com/sun/star/drawing/XDrawPage.hpp>
+#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
 #include <com/sun/star/form/XForm.hpp>
 #include <com/sun/star/form/XFormComponent.hpp>
+#include <com/sun/star/form/XFormsSupplier.hpp>
 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
 #include <com/sun/star/text/TextContentAnchorType.hpp>
 #include <com/sun/star/text/VertOrientation.hpp>
@@ -48,17 +51,31 @@ struct FormControlHelper::FormControlHelper_Impl
 {
     FieldId m_eFieldId;
     awt::Size aSize;
+    uno::Reference<drawing::XDrawPage> rDrawPage;
     uno::Reference<form::XForm> rForm;
     uno::Reference<form::XFormComponent> rFormComponent;
     uno::Reference<lang::XMultiServiceFactory> rServiceFactory;
     uno::Reference<text::XTextDocument> rTextDocument;
-    uno::Reference<text::XTextRange> rTextRange;
 
+    uno::Reference<drawing::XDrawPage> getDrawPage();
     uno::Reference<lang::XMultiServiceFactory> getServiceFactory();
     uno::Reference<form::XForm> getForm();
     uno::Reference<container::XIndexContainer> getFormComps();
 };
 
+uno::Reference<drawing::XDrawPage> FormControlHelper::FormControlHelper_Impl::getDrawPage()
+{
+    if (! rDrawPage.is())
+    {
+        uno::Reference<drawing::XDrawPageSupplier>
+            xDrawPageSupplier(rTextDocument, uno::UNO_QUERY);
+        if (xDrawPageSupplier.is())
+            rDrawPage = xDrawPageSupplier->getDrawPage();
+    }
+
+    return rDrawPage;
+}
+
 uno::Reference<lang::XMultiServiceFactory> FormControlHelper::FormControlHelper_Impl::getServiceFactory()
 {
     if (! rServiceFactory.is())
@@ -71,10 +88,43 @@ uno::Reference<form::XForm> FormControlHelper::FormControlHelper_Impl::getForm()
 {
     if (! rForm.is())
     {
-        uno::Reference<uno::XInterface>
-            xRef(getServiceFactory()->createInstance
-                 (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.form.component.Form"))));
-        rForm = uno::Reference<form::XForm>(xRef, uno::UNO_QUERY);
+        uno::Reference<form::XFormsSupplier> xFormsSupplier(getDrawPage(), uno::UNO_QUERY);
+
+        if (xFormsSupplier.is())
+        {
+            uno::Reference<container::XNameContainer> xFormsNamedContainer(xFormsSupplier->getForms());
+            static ::rtl::OUString sDOCXForm(RTL_CONSTASCII_USTRINGPARAM("DOCX-Standard"));
+
+            ::rtl::OUString sFormName(sDOCXForm);
+            sal_uInt16 nUnique = 0;
+
+            while (xFormsNamedContainer->hasByName(sFormName))
+            {
+                ++nUnique;
+                sFormName = sDOCXForm;
+                sFormName += ::rtl::OUString::valueOf(nUnique);
+            }
+
+            uno::Reference<uno::XInterface>
+                xForm(getServiceFactory()->createInstance
+                      (::rtl::OUString
+                       (RTL_CONSTASCII_USTRINGPARAM
+                        ("com.sun.star.form.component.Form"))));
+            if (xForm.is())
+            {
+                uno::Reference<beans::XPropertySet>
+                    xFormProperties(xForm, uno::UNO_QUERY);
+                uno::Any aAny(&sFormName, ::getCppuType((::rtl::OUString *) 0));
+                static ::rtl::OUString sName(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Name")));
+                xFormProperties->setPropertyValue(sName, aAny);
+            }
+
+            rForm = uno::Reference<form::XForm>(xForm, uno::UNO_QUERY);
+
+            uno::Reference<container::XIndexContainer> xForms(xFormsNamedContainer, uno::UNO_QUERY);
+            uno::Any aAny(&xForm, ::getCppuType((uno::Reference<form::XForm>*)0));
+            xForms->insertByIndex(xForms->getCount(), aAny);
+        }
     }
 
     return rForm;
@@ -145,7 +195,7 @@ bool FormControlHelper::createCheckbox()
     return true;
 }
 
-bool FormControlHelper::insertControl()
+bool FormControlHelper::insertControl(uno::Reference<text::XTextRange> xTextRange)
 {
     bool bCreated = false;
 
@@ -199,7 +249,7 @@ bool FormControlHelper::insertControl()
     aAny <<= nTmp;
     xShapeProps->setPropertyValue(sVertOrient, aAny);
 
-    aAny <<= m_pImpl->rTextRange;
+    aAny <<= xTextRange;
 
     static const ::rtl::OUString sTextRange(RTL_CONSTASCII_USTRINGPARAM("TextRange"));
     xShapeProps->setPropertyValue(sTextRange, aAny);
diff --git a/writerfilter/source/dmapper/FormControlHelper.hxx b/writerfilter/source/dmapper/FormControlHelper.hxx
index 7f6a72fb553f..be54be989c1a 100644
--- a/writerfilter/source/dmapper/FormControlHelper.hxx
+++ b/writerfilter/source/dmapper/FormControlHelper.hxx
@@ -46,7 +46,7 @@ public:
                       FFDataHandler::Pointer_t pFFData);
     ~FormControlHelper();
 
-    bool insertControl();
+    bool insertControl(uno::Reference<text::XTextRange> xTextRange);
 
 private:
     FFDataHandler::Pointer_t m_pFFData;
-- 
cgit 


From e365d2f280bd4f93d03de4f2c0b834fdfcbca29d Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Mon, 22 Mar 2010 13:46:48 +0100
Subject: writerfilter08: FormCheckBox inserted, but size needs work

---
 writerfilter/source/dmapper/FormControlHelper.cxx | 69 +++++++++++++++++++----
 writerfilter/source/dmapper/FormControlHelper.hxx |  3 +-
 2 files changed, 59 insertions(+), 13 deletions(-)

diff --git a/writerfilter/source/dmapper/FormControlHelper.cxx b/writerfilter/source/dmapper/FormControlHelper.cxx
index 50ce8f20d53a..04ce7cc91d8a 100644
--- a/writerfilter/source/dmapper/FormControlHelper.cxx
+++ b/writerfilter/source/dmapper/FormControlHelper.cxx
@@ -25,6 +25,8 @@
  *
  ************************************************************************/
 
+#include <math.h>
+
 #include <com/sun/star/awt/XControlModel.hpp>
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/container/XIndexContainer.hpp>
@@ -114,7 +116,7 @@ uno::Reference<form::XForm> FormControlHelper::FormControlHelper_Impl::getForm()
             {
                 uno::Reference<beans::XPropertySet>
                     xFormProperties(xForm, uno::UNO_QUERY);
-                uno::Any aAny(&sFormName, ::getCppuType((::rtl::OUString *) 0));
+                uno::Any aAny(sFormName);
                 static ::rtl::OUString sName(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Name")));
                 xFormProperties->setPropertyValue(sName, aAny);
             }
@@ -122,7 +124,7 @@ uno::Reference<form::XForm> FormControlHelper::FormControlHelper_Impl::getForm()
             rForm = uno::Reference<form::XForm>(xForm, uno::UNO_QUERY);
 
             uno::Reference<container::XIndexContainer> xForms(xFormsNamedContainer, uno::UNO_QUERY);
-            uno::Any aAny(&xForm, ::getCppuType((uno::Reference<form::XForm>*)0));
+            uno::Any aAny(xForm);
             xForms->insertByIndex(xForms->getCount(), aAny);
         }
     }
@@ -150,7 +152,8 @@ FormControlHelper::~FormControlHelper()
 {
 }
 
-bool FormControlHelper::createCheckbox()
+bool FormControlHelper::createCheckbox(uno::Reference<text::XTextRange> xTextRange,
+                                       const ::rtl::OUString & rControlName)
 {
     uno::Reference<lang::XMultiServiceFactory>
         xServiceFactory(m_pImpl->getServiceFactory());
@@ -171,7 +174,25 @@ bool FormControlHelper::createCheckbox()
 
     uno::Reference<beans::XPropertySet> xPropSet(xInterface, uno::UNO_QUERY);
 
-    m_pImpl->aSize.Width = 16 * m_pFFData->getCheckboxHeight();
+    sal_uInt32 nCheckBoxHeight = 16 * m_pFFData->getCheckboxHeight();
+
+    if (m_pFFData->getCheckboxAutoHeight())
+    {
+        uno::Reference<beans::XPropertySet> xTextRangeProps(xTextRange, uno::UNO_QUERY);
+
+        try
+        {
+            static ::rtl::OUString sCharHeight(RTL_CONSTASCII_USTRINGPARAM("CharHeight"));
+            float fCheckBoxHeight;
+            xTextRangeProps->getPropertyValue(sCharHeight) >>= fCheckBoxHeight;
+            nCheckBoxHeight = floor(fCheckBoxHeight * 16);
+        }
+        catch (beans::UnknownPropertyException & rException)
+        {
+        }
+    }
+
+    m_pImpl->aSize.Width = nCheckBoxHeight;
     m_pImpl->aSize.Height = m_pImpl->aSize.Width;
 
     uno::Any aAny;
@@ -179,7 +200,6 @@ bool FormControlHelper::createCheckbox()
     {
         aAny <<= m_pFFData->getStatusText();
 
-        xPropSet->setPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Name")), aAny);
         xPropSet->setPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HelpText")), aAny);
     }
 
@@ -192,6 +212,9 @@ bool FormControlHelper::createCheckbox()
         xPropSet->setPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HelpF1Text")), aAny);
     }
 
+    aAny <<= rControlName;
+    xPropSet->setPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Name")), aAny);
+
     return true;
 }
 
@@ -199,10 +222,35 @@ bool FormControlHelper::insertControl(uno::Reference<text::XTextRange> xTextRang
 {
     bool bCreated = false;
 
+    uno::Reference<container::XNameContainer> xFormCompsByName(m_pImpl->getForm(), uno::UNO_QUERY);
+    uno::Reference<container::XIndexContainer> xFormComps(m_pImpl->getFormComps());
+    if (! xFormComps.is())
+        return false;
+
+    static ::rtl::OUString sControl(RTL_CONSTASCII_USTRINGPARAM("Control"));
+
+    sal_Int32 nControl = 0;
+    bool bDone = false;
+    ::rtl::OUString sControlName;
+
+    do
+    {
+        ::rtl::OUString sTmp(sControl);
+        sTmp += ::rtl::OUString::valueOf(nControl);
+
+        nControl++;
+        if (! xFormCompsByName->hasByName(sTmp))
+        {
+            sControlName = sTmp;
+            bDone = true;
+        }
+    }
+    while (! bDone);
+
     switch (m_pImpl->m_eFieldId)
     {
     case FIELD_FORMCHECKBOX:
-        bCreated = createCheckbox();
+        bCreated = createCheckbox(xTextRange, sControlName);
         break;
     default:
         break;
@@ -211,12 +259,7 @@ bool FormControlHelper::insertControl(uno::Reference<text::XTextRange> xTextRang
     if (!bCreated)
         return false;
 
-    uno::Reference<container::XIndexContainer> xFormComps(m_pImpl->getFormComps());
-    if (! xFormComps.is())
-        return false;
-
-    uno::Any aAny(&m_pImpl->rFormComponent,
-                  ::getCppuType((const uno::Reference<form::XFormComponent >*)0));
+    uno::Any aAny(m_pImpl->rFormComponent);
     xFormComps->insertByIndex(xFormComps->getCount(), aAny);
 
     if (! m_pImpl->getServiceFactory().is())
@@ -258,6 +301,8 @@ bool FormControlHelper::insertControl(uno::Reference<text::XTextRange> xTextRang
     uno::Reference<awt::XControlModel> xControlModel(m_pImpl->rFormComponent, uno::UNO_QUERY);
     xControlShape->setControl(xControlModel);
 
+    m_pImpl->getDrawPage()->add(xShape);
+
     return true;
 }
 
diff --git a/writerfilter/source/dmapper/FormControlHelper.hxx b/writerfilter/source/dmapper/FormControlHelper.hxx
index be54be989c1a..21b50912a039 100644
--- a/writerfilter/source/dmapper/FormControlHelper.hxx
+++ b/writerfilter/source/dmapper/FormControlHelper.hxx
@@ -54,7 +54,8 @@ private:
     typedef boost::shared_ptr<FormControlHelper_Impl> ImplPointer_t;
     ImplPointer_t m_pImpl;
 
-    bool createCheckbox();
+    bool createCheckbox(uno::Reference<text::XTextRange> xTextRange,
+                        const ::rtl::OUString & rControlName);
 };
 
 }
-- 
cgit 


From 7e8e16dae3a72cddd56658f7f6cb77c894aa3fe0 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 24 Mar 2010 11:27:45 +0100
Subject: writerfilter08: corrected size and position of form checkbox

---
 writerfilter/source/dmapper/FormControlHelper.cxx | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/writerfilter/source/dmapper/FormControlHelper.cxx b/writerfilter/source/dmapper/FormControlHelper.cxx
index 04ce7cc91d8a..f14da458cea3 100644
--- a/writerfilter/source/dmapper/FormControlHelper.cxx
+++ b/writerfilter/source/dmapper/FormControlHelper.cxx
@@ -185,7 +185,7 @@ bool FormControlHelper::createCheckbox(uno::Reference<text::XTextRange> xTextRan
             static ::rtl::OUString sCharHeight(RTL_CONSTASCII_USTRINGPARAM("CharHeight"));
             float fCheckBoxHeight;
             xTextRangeProps->getPropertyValue(sCharHeight) >>= fCheckBoxHeight;
-            nCheckBoxHeight = floor(fCheckBoxHeight * 16);
+            nCheckBoxHeight = floor(fCheckBoxHeight * 35.3);
         }
         catch (beans::UnknownPropertyException & rException)
         {
@@ -288,7 +288,7 @@ bool FormControlHelper::insertControl(uno::Reference<text::XTextRange> xTextRang
     xShapeProps->setPropertyValue(sAnchorType, aAny);
 
     static const ::rtl::OUString sVertOrient(RTL_CONSTASCII_USTRINGPARAM("VertOrient"));
-    nTmp = text::VertOrientation::TOP;
+    nTmp = text::VertOrientation::CENTER;
     aAny <<= nTmp;
     xShapeProps->setPropertyValue(sVertOrient, aAny);
 
-- 
cgit 


From b6f4d0aebbb1642c42edae74b391e6f3576c4c4f Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Mon, 26 Apr 2010 14:16:52 +0200
Subject: writerfilter08: handle unused methods in ooxml and dmapper

---
 writerfilter/inc/resourcemodel/Protocol.hxx        |   4 +
 writerfilter/inc/resourcemodel/TagLogger.hxx       |   4 +
 writerfilter/inc/resourcemodel/util.hxx            |   2 +
 writerfilter/source/dmapper/PropertyMapHelper.cxx  |   4 +-
 writerfilter/source/dmapper/PropertyMapHelper.hxx  |   2 +
 writerfilter/source/dmapper/dmapperLoggers.hxx     |   2 +
 writerfilter/source/doctok/WW8DocumentImpl.cxx     |   2 +
 writerfilter/source/doctok/WW8StreamImpl.cxx       |   4 +-
 writerfilter/source/doctok/doctokLoggers.hxx       |   4 +-
 writerfilter/source/ooxml/OOXMLDocumentImpl.cxx    |   4 +
 .../source/ooxml/OOXMLFastContextHandler.cxx       | 161 +--------------------
 .../source/ooxml/OOXMLFastContextHandler.hxx       |  45 ++----
 .../source/ooxml/OOXMLFastDocumentHandler.cxx      |   7 -
 .../source/ooxml/OOXMLFastDocumentHandler.hxx      |   2 -
 writerfilter/source/ooxml/OOXMLFastHelper.hxx      |   7 -
 writerfilter/source/ooxml/OOXMLParserState.cxx     |  70 +++------
 writerfilter/source/ooxml/OOXMLParserState.hxx     |  18 ++-
 writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx |  22 ---
 writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx |   9 --
 writerfilter/source/ooxml/OOXMLStreamImpl.cxx      |  16 --
 writerfilter/source/ooxml/OOXMLStreamImpl.hxx      |   4 -
 writerfilter/source/ooxml/ooxmlLoggers.hxx         |   3 +
 writerfilter/source/resourcemodel/Protocol.cxx     |   2 +
 writerfilter/source/resourcemodel/TagLogger.cxx    |   2 +
 writerfilter/source/resourcemodel/util.cxx         |  95 ++++++------
 25 files changed, 137 insertions(+), 358 deletions(-)

diff --git a/writerfilter/inc/resourcemodel/Protocol.hxx b/writerfilter/inc/resourcemodel/Protocol.hxx
index d0405861f695..2f4c9f6261ba 100644
--- a/writerfilter/inc/resourcemodel/Protocol.hxx
+++ b/writerfilter/inc/resourcemodel/Protocol.hxx
@@ -30,6 +30,8 @@
 #ifndef INCLUDE_WRITERFILTER_PROTOCOL_HXX
 #define INCLUDE_WRITERFILTER_PROTOCOL_HXX
 
+#ifdef DEBUG
+
 #include <boost/shared_ptr.hpp>
 #include "WW8ResourceModel.hxx"
 #include "TagLogger.hxx"
@@ -95,4 +97,6 @@ public:
 };
 
 }
+
+#endif // DEBUG
 #endif // INCLUDE_WRITERFILTER_PROTOCOL_HXX
diff --git a/writerfilter/inc/resourcemodel/TagLogger.hxx b/writerfilter/inc/resourcemodel/TagLogger.hxx
index 382a3c16ce8e..387d4e0e156a 100644
--- a/writerfilter/inc/resourcemodel/TagLogger.hxx
+++ b/writerfilter/inc/resourcemodel/TagLogger.hxx
@@ -28,6 +28,8 @@
 #ifndef INCLUDED_TAG_LOGGER_HXX
 #define INCLUDED_TAG_LOGGER_HXX
 
+#ifdef DEBUG
+
 #include <rtl/ustring.hxx>
 #include <WriterFilterDllApi.hxx>
 #include <resourcemodel/WW8ResourceModel.hxx>
@@ -146,4 +148,6 @@ namespace writerfilter
         virtual void sprm(Sprm & sprm);
     };
 }
+
+#endif // DEBUG
 #endif // INCLUDED_TAG_LOGGER_HXX
diff --git a/writerfilter/inc/resourcemodel/util.hxx b/writerfilter/inc/resourcemodel/util.hxx
index 360dfc3d4113..0a700513576a 100644
--- a/writerfilter/inc/resourcemodel/util.hxx
+++ b/writerfilter/inc/resourcemodel/util.hxx
@@ -39,10 +39,12 @@ namespace writerfilter
 
     string WRITERFILTER_DLLPUBLIC xmlify(const string & str);
 
+#ifdef DEBUG
     string WRITERFILTER_DLLPUBLIC propertysetToString
     (uno::Reference<beans::XPropertySet> const & rProps);
 
     string toString(uno::Reference< text::XTextRange > textRange);
     string toString(const string & rString);
+#endif
 }
 #endif // INCLUDED_RESOURCEMODEL_UTIL_HXX
diff --git a/writerfilter/source/dmapper/PropertyMapHelper.cxx b/writerfilter/source/dmapper/PropertyMapHelper.cxx
index 555003774113..4fb4c759289d 100644
--- a/writerfilter/source/dmapper/PropertyMapHelper.cxx
+++ b/writerfilter/source/dmapper/PropertyMapHelper.cxx
@@ -32,6 +32,7 @@
 #include <resourcemodel/TagLogger.hxx>
 #include "PropertyMapHelper.hxx"
 
+#ifdef DEBUG
 namespace writerfilter
 {
 namespace dmapper
@@ -39,7 +40,7 @@ namespace dmapper
 
 using namespace ::com::sun::star;
 
-    XMLTag::Pointer_t lcl_TableColumnSeparatorsToTag(const uno::Any & rTableColumnSeparators)
+XMLTag::Pointer_t lcl_TableColumnSeparatorsToTag(const uno::Any & rTableColumnSeparators)
 {
     uno::Sequence<text::TableColumnSeparator> aSeq;
     rTableColumnSeparators >>= aSeq;
@@ -127,3 +128,4 @@ XMLTag::Pointer_t lcl_PropertyValueSeqSeqToTag(PropertyValueSeqSeq_t rPropValSeq
 
 }
 }
+#endif // DEBUG
diff --git a/writerfilter/source/dmapper/PropertyMapHelper.hxx b/writerfilter/source/dmapper/PropertyMapHelper.hxx
index fc9ea0a85bb4..4a528f1736c0 100644
--- a/writerfilter/source/dmapper/PropertyMapHelper.hxx
+++ b/writerfilter/source/dmapper/PropertyMapHelper.hxx
@@ -28,6 +28,7 @@
  *
  ************************************************************************/
 
+#ifdef DEBUG
 #include "PropertyMap.hxx"
 #include <com/sun/star/beans/PropertyValues.hpp>
 
@@ -46,3 +47,4 @@ typedef uno::Sequence<PropertyValueSeq_t> PropertyValueSeqSeq_t;
 XMLTag::Pointer_t lcl_PropertyValueSeqSeqToTag(PropertyValueSeqSeq_t & rPropValSeqSeq);
 }
 }
+#endif // DEBUG
diff --git a/writerfilter/source/dmapper/dmapperLoggers.hxx b/writerfilter/source/dmapper/dmapperLoggers.hxx
index a19ff4832370..fd9ed722de4a 100644
--- a/writerfilter/source/dmapper/dmapperLoggers.hxx
+++ b/writerfilter/source/dmapper/dmapperLoggers.hxx
@@ -31,6 +31,7 @@
 #ifndef INCLUDED_DMAPPER_LOGGERS_HXX
 #define INCLUDED_DMAPPER_LOGGERS_HXX
 
+#ifdef DEBUG
 #include <resourcemodel/TagLogger.hxx>
 
 namespace writerfilter {
@@ -38,4 +39,5 @@ namespace writerfilter {
         extern TagLogger::Pointer_t dmapper_logger;
     }
 }
+#endif // DEBUG
 #endif // INCLUDED_DMAPPER_LOGGERS_HXX
diff --git a/writerfilter/source/doctok/WW8DocumentImpl.cxx b/writerfilter/source/doctok/WW8DocumentImpl.cxx
index cda79dad1cdf..256a0766b66c 100644
--- a/writerfilter/source/doctok/WW8DocumentImpl.cxx
+++ b/writerfilter/source/doctok/WW8DocumentImpl.cxx
@@ -157,6 +157,7 @@ WW8Document::~WW8Document()
 {
 }
 
+#ifdef DEBUG
 class WW8IdToString : public IdToString
 {
 public:
@@ -173,6 +174,7 @@ public:
         return s;
     }
 };
+#endif
 
 WW8DocumentImpl::~WW8DocumentImpl()
 {
diff --git a/writerfilter/source/doctok/WW8StreamImpl.cxx b/writerfilter/source/doctok/WW8StreamImpl.cxx
index 4418839919d4..585673bfa887 100644
--- a/writerfilter/source/doctok/WW8StreamImpl.cxx
+++ b/writerfilter/source/doctok/WW8StreamImpl.cxx
@@ -39,7 +39,9 @@ namespace doctok
 {
 using namespace ::com::sun::star;
 
-    TagLogger::Pointer_t debug_logger(TagLogger::getInstance("DEBUG"));
+#ifdef DEBUG
+TagLogger::Pointer_t debug_logger(TagLogger::getInstance("DEBUG"));
+#endif
 
 WW8Stream::~WW8Stream()
 {
diff --git a/writerfilter/source/doctok/doctokLoggers.hxx b/writerfilter/source/doctok/doctokLoggers.hxx
index 8df90348a249..b7dc7e0aa48f 100644
--- a/writerfilter/source/doctok/doctokLoggers.hxx
+++ b/writerfilter/source/doctok/doctokLoggers.hxx
@@ -28,6 +28,8 @@
 #ifndef INCLUDED_DOCTOK_LOGGERS_HXX
 #define INCLUDED_DOCTOK_LOGGERS_HXX
 
+#ifdef DEBUG
+
 #include <resourcemodel/TagLogger.hxx>
 
 namespace writerfilter {
@@ -36,5 +38,5 @@ namespace writerfilter {
     }
 }
 
-
+#endif // DEBUG
 #endif // INCLUDED_DOCTOK_LOGGERS_HXX
diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
index 90c878e3b8e2..87319b596ac0 100644
--- a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
+++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
@@ -42,7 +42,11 @@ using ::com::sun::star::xml::sax::SAXException;
 namespace writerfilter {
 namespace ooxml
 {
+
+#ifdef DEBUG
 TagLogger::Pointer_t debug_logger(TagLogger::getInstance("DEBUG"));
+#endif
+
 using namespace ::std;
 
 OOXMLDocumentImpl::OOXMLDocumentImpl
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
index 51960959d185..eb4e3e026618 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
@@ -100,7 +100,7 @@ static string resourceToString
 
 set<OOXMLFastContextHandler *> aSetContexts;
 
-
+#ifdef DEBUG
 class OOXMLIdToString : public IdToString
 {
 public:
@@ -119,6 +119,7 @@ public:
         return s;
     }
 };
+#endif
 
 /*
   class OOXMLFastContextHandler
@@ -136,8 +137,7 @@ OOXMLFastContextHandler::OOXMLFastContextHandler
   mnTableDepth(0),
   mnInstanceNumber(mnInstanceCount),
   mnRefCount(0),
-  m_xContext(context),
-  mbFallback(false)
+  m_xContext(context)
 {
     mnInstanceCount++;
     aSetContexts.insert(this);
@@ -157,8 +157,7 @@ OOXMLFastContextHandler::OOXMLFastContextHandler
   mnTableDepth(0),
   mnInstanceNumber(mnInstanceCount),
   mnRefCount(0),
-  m_xContext(pContext->m_xContext),
-  mbFallback(false)
+  m_xContext(pContext->m_xContext)
 {
     if (pContext != NULL)
     {
@@ -181,29 +180,6 @@ 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 ()
@@ -231,11 +207,6 @@ void SAL_CALL OOXMLFastContextHandler::release()
 }
 #endif
 
-sal_uInt32 OOXMLFastContextHandler::getInstanceNumber() const
-{
-    return mnInstanceNumber;
-}
-
 // ::com::sun::star::xml::sax::XFastContextHandler:
 void SAL_CALL OOXMLFastContextHandler::startFastElement
 (Token_t Element,
@@ -465,6 +436,7 @@ void OOXMLFastContextHandler::lcl_endAction(Token_t Element)
     OOXMLFactory::getInstance()->endAction(this, Element);
 }
 
+#ifdef DEBUG
 XMLTag::Pointer_t OOXMLFastContextHandler::toPropertiesTag
     (OOXMLPropertySet::Pointer_t pProps)
 {
@@ -514,6 +486,7 @@ string OOXMLFastContextHandler::toString() const
 {
     return toTag()->toString();
 }
+#endif
 
 string OOXMLFastContextHandler::getResourceString() const
 {
@@ -551,16 +524,6 @@ Id OOXMLFastContextHandler::getDefine() const
     return mnDefine;
 }
 
-void OOXMLFastContextHandler::setFallback(bool bFallback)
-{
-    mbFallback = bFallback;
-}
-
-bool OOXMLFastContextHandler::isFallback() const
-{
-    return mbFallback;
-}
-
 OOXMLParserState::Pointer_t OOXMLFastContextHandler::getParserState() const
 {
     return mpParserState;
@@ -1032,26 +995,6 @@ void OOXMLFastContextHandler::sendTableProperties()
 #endif
 }
 
-void OOXMLFastContextHandler::clearCellProps()
-{
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("clearCellProps");
-#endif
-
-    mpParserState->setCellProperties(OOXMLPropertySet::Pointer_t
-                                     (new OOXMLPropertySetImpl()));
-}
-
-void OOXMLFastContextHandler::clearRowProps()
-{
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("clearRowProps");
-#endif
-
-    mpParserState->setRowProperties(OOXMLPropertySet::Pointer_t
-                                    (new OOXMLPropertySetImpl()));
-}
-
 void OOXMLFastContextHandler::clearTableProps()
 {
 #ifdef DEBUG_ELEMENT
@@ -1109,11 +1052,6 @@ void OOXMLFastContextHandler::setDefaultStringValue()
 {
 }
 
-const ::rtl::OUString & OOXMLFastContextHandler::getText() const
-{
-    return aEmptyStr;
-}
-
 void OOXMLFastContextHandler::setDocument(OOXMLDocument * pDocument)
 {
     mpParserState->setDocument(pDocument);
@@ -1297,19 +1235,6 @@ OOXMLFastContextHandler::getComponentContext()
     return m_xContext;
 }
 
-/*
-  class OOXMLFastContextHandlerNoResource
- */
-OOXMLFastContextHandlerNoResource::OOXMLFastContextHandlerNoResource
-(OOXMLFastContextHandler * pContext)
-: OOXMLFastContextHandler(pContext)
-{
-}
-
-OOXMLFastContextHandlerNoResource::~OOXMLFastContextHandlerNoResource()
-{
-}
-
 /*
   class OOXMLFastContextHandlerStream
  */
@@ -1354,12 +1279,6 @@ void OOXMLFastContextHandlerStream::sendProperty(Id nId)
                     sText.getLength());
 }
 
-void OOXMLFastContextHandlerStream::setPropertySetAttrs
-(OOXMLPropertySet::Pointer_t pPropertySetAttrs)
-{
-    mpPropertySetAttrs = pPropertySetAttrs;
-}
-
 OOXMLPropertySet::Pointer_t
 OOXMLFastContextHandlerStream::getPropertySetAttrs() const
 {
@@ -1441,6 +1360,7 @@ OOXMLValue::Pointer_t OOXMLFastContextHandlerProperties::getValue() const
     return OOXMLValue::Pointer_t(new OOXMLPropertySetValue(mpPropertySet));
 }
 
+#ifdef DEBUG
 XMLTag::Pointer_t OOXMLFastContextHandlerProperties::toTag() const
 {
     XMLTag::Pointer_t pTag(OOXMLFastContextHandler::toTag());
@@ -1448,6 +1368,7 @@ XMLTag::Pointer_t OOXMLFastContextHandlerProperties::toTag() const
 
     return pTag;
 }
+#endif
 
 void OOXMLFastContextHandlerProperties::newProperty
 (const Id & rId, OOXMLValue::Pointer_t pVal)
@@ -1982,72 +1903,6 @@ void OOXMLFastContextHandlerTextTable::lcl_endFastElement
   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 ),
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
index b67f86fda3e7..0c441f62a180 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
@@ -132,10 +132,6 @@ public:
 
     virtual ResourceEnum_t getResource() const { return STREAM; }
 
-    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);
@@ -179,18 +175,9 @@ public:
 
     void setDefine(Id nDefine);
     Id getDefine() 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;
-
     void sendTableDepth() const;
     void setHandle();
 
@@ -227,8 +214,6 @@ public:
     void sendCellProperties();
     void sendRowProperties();
     void sendTableProperties();
-    void clearCellProps();
-    void clearRowProps();
     void clearTableProps();
     void clearProps();
 
@@ -237,10 +222,18 @@ public:
     virtual void setDefaultHexValue();
     virtual void setDefaultStringValue();
 
-    const ::rtl::OUString & getText() const;
-
     void sendPropertyToParent();
-    static void dumpOpenContexts();
+
+#ifdef DEBUG
+    static XMLTag::Pointer_t toPropertiesTag(OOXMLPropertySet::Pointer_t);
+    virtual XMLTag::Pointer_t toTag() const;
+    virtual string toString() const;
+#endif
+
+#ifdef DEBUG_MEMORY
+    virtual void SAL_CALL acquire() throw();
+    virtual void SAL_CALL release() throw();
+#endif
 
 protected:
     OOXMLFastContextHandler * mpParent;
@@ -302,14 +295,6 @@ private:
 
     static sal_uInt32 mnInstanceCount;
 
-    bool mbFallback;
-};
-
-class OOXMLFastContextHandlerNoResource : public OOXMLFastContextHandler
-{
-public:
-    OOXMLFastContextHandlerNoResource(OOXMLFastContextHandler * pContext);
-    virtual ~OOXMLFastContextHandlerNoResource();
 };
 
 class OOXMLFastContextHandlerStream : public OOXMLFastContextHandler
@@ -329,10 +314,10 @@ public:
     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;
 };
@@ -346,8 +331,6 @@ public:
     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();
@@ -360,6 +343,10 @@ public:
     virtual void setPropertySet(OOXMLPropertySet::Pointer_t pPropertySet);
     virtual OOXMLPropertySet::Pointer_t getPropertySet() const;
 
+#ifdef DEBUG
+    virtual XMLTag::Pointer_t toTag() const;
+#endif
+
 protected:
     /// the properties
     OOXMLPropertySet::Pointer_t mpPropertySet;
diff --git a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx
index f4feddf341ac..0536590145f8 100644
--- a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx
+++ b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx
@@ -152,13 +152,6 @@ uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
     return OOXMLFactory::getInstance()->createFastChildContextFromStart(getContextHandler().get(), Element);
 }
 
-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 &
diff --git a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx
index 86f835c5c0a4..2fb6ee5e6abb 100644
--- a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx
+++ b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx
@@ -95,8 +95,6 @@ public:
     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
diff --git a/writerfilter/source/ooxml/OOXMLFastHelper.hxx b/writerfilter/source/ooxml/OOXMLFastHelper.hxx
index 2d21083487ff..5d4587922a54 100644
--- a/writerfilter/source/ooxml/OOXMLFastHelper.hxx
+++ b/writerfilter/source/ooxml/OOXMLFastHelper.hxx
@@ -84,8 +84,6 @@ OOXMLFastHelper<T>::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());
@@ -119,8 +117,6 @@ OOXMLFastHelper<T>::createAndSetParentAndDefine
     snprintf(buffer, sizeof(buffer), "0x%08" SAL_PRIxUINT32, nId);
 
     debug_logger->attribute("idnum", buffer);
-    if (pTmp->isFallback())
-        debug_logger->attribute("fallback", "yes");
 
     debug_logger->startElement("created");
     debug_logger->addTag(pTmp->toTag());
@@ -158,9 +154,6 @@ OOXMLFastHelper<T>::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");
diff --git a/writerfilter/source/ooxml/OOXMLParserState.cxx b/writerfilter/source/ooxml/OOXMLParserState.cxx
index e38593777a55..fb347d02048e 100644
--- a/writerfilter/source/ooxml/OOXMLParserState.cxx
+++ b/writerfilter/source/ooxml/OOXMLParserState.cxx
@@ -103,11 +103,6 @@ bool OOXMLParserState::isForwardEvents() const
     return mbForwardEvents;
 }
 
-void OOXMLParserState::incContextCount()
-{
-    mnContexts++;
-}
-
 const string OOXMLParserState::getHandle() const
 {
     char sBuffer[256];
@@ -122,11 +117,6 @@ void OOXMLParserState::setHandle()
     mnHandle = mnContexts;
 }
 
-unsigned int OOXMLParserState::getContextCount() const
-{
-    return mnContexts;
-}
-
 void OOXMLParserState::setDocument(OOXMLDocument * pDocument)
 {
     mpDocument = pDocument;
@@ -147,44 +137,11 @@ 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)
@@ -202,11 +159,6 @@ void OOXMLParserState::resolveCharacterProperties(Stream & rStream)
     }
 }
 
-OOXMLPropertySet::Pointer_t OOXMLParserState::getCharacterProperties() const
-{
-    return mpCharacterProps;
-}
-
 void OOXMLParserState::setCharacterProperties
 (OOXMLPropertySet::Pointer_t pProps)
 {
@@ -317,6 +269,22 @@ void OOXMLParserState::endTable()
     mTableProps.pop();
 }
 
+void OOXMLParserState::incContextCount()
+{
+    mnContexts++;
+}
+
+#ifdef DEBUG
+unsigned int OOXMLParserState::getContextCount() const
+{
+    return mnContexts;
+}
+
+string OOXMLParserState::toString() const
+{
+    return toTag()->toString();
+}
+
 XMLTag::Pointer_t OOXMLParserState::toTag() const
 {
     XMLTag::Pointer_t pTag(new XMLTag("parserstate"));
@@ -352,10 +320,6 @@ XMLTag::Pointer_t OOXMLParserState::toTag() const
 
     return pTag;
  }
-
-string OOXMLParserState::toString() const
-{
-    return toTag()->toString();
-}
+#endif
 
 }}
diff --git a/writerfilter/source/ooxml/OOXMLParserState.hxx b/writerfilter/source/ooxml/OOXMLParserState.hxx
index affdd7dbe61c..2dd118a5b96b 100644
--- a/writerfilter/source/ooxml/OOXMLParserState.hxx
+++ b/writerfilter/source/ooxml/OOXMLParserState.hxx
@@ -29,9 +29,12 @@
 
 #include <stack>
 #include <ooxml/OOXMLDocument.hxx>
-#include <resourcemodel/TagLogger.hxx>
 #include "OOXMLPropertySetImpl.hxx"
 
+#ifdef DEBUG
+#include <resourcemodel/TagLogger.hxx>
+#endif
+
 namespace writerfilter {
 namespace ooxml
 {
@@ -76,24 +79,18 @@ public:
     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 resolveCellProperties(Stream & rStream);
     void setCellProperties(OOXMLPropertySet::Pointer_t pProps);
@@ -105,8 +102,15 @@ public:
     void startTable();
     void endTable();
 
+    void incContextCount();
+
+#ifdef DEBUG
+public:
+    unsigned int getContextCount() const;
     string toString() const;
     XMLTag::Pointer_t toTag() const;
+#endif
+
 };
 
 }}
diff --git a/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx b/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx
index 2f8844f1af01..f106972b23c0 100644
--- a/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx
+++ b/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx
@@ -198,10 +198,6 @@ OOXMLValue::OOXMLValue()
 {
 }
 
-OOXMLValue::OOXMLValue(const rtl::OUString & /*rValue*/)
-{
-}
-
 OOXMLValue::~OOXMLValue()
 {
 }
@@ -658,24 +654,6 @@ string OOXMLHexValue::toString() const
     return buffer;
 }
 
-/*
-  class OOXMLListValue
-*/
-OOXMLListValue::OOXMLListValue()
-: OOXMLIntegerValue(0)
-{
-}
-
-OOXMLListValue::OOXMLListValue(sal_Int32 nValue)
-: OOXMLIntegerValue(nValue)
-{
-}
-
-
-OOXMLListValue::~OOXMLListValue()
-{
-}
-
 /*
   class OOXMLShapeValue
  */
diff --git a/writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx b/writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx
index 78c39b79d515..a04fc5f5d1af 100644
--- a/writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx
+++ b/writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx
@@ -48,7 +48,6 @@ class OOXMLValue : public Value
 {
 public:
     typedef boost::shared_ptr<OOXMLValue> Pointer_t;
-    OOXMLValue(const rtl::OUString & rValue);
     OOXMLValue();
     virtual ~OOXMLValue();
 
@@ -222,14 +221,6 @@ public:
     virtual OOXMLValue * clone() const;
 };
 
-class OOXMLListValue : public OOXMLIntegerValue
-{
-public:
-    OOXMLListValue();
-    OOXMLListValue(sal_Int32 nValue);
-    virtual ~OOXMLListValue();
-};
-
 class OOXMLShapeValue : public OOXMLValue
 {
 protected:
diff --git a/writerfilter/source/ooxml/OOXMLStreamImpl.cxx b/writerfilter/source/ooxml/OOXMLStreamImpl.cxx
index 91188eeda701..8b879f4b0aec 100644
--- a/writerfilter/source/ooxml/OOXMLStreamImpl.cxx
+++ b/writerfilter/source/ooxml/OOXMLStreamImpl.cxx
@@ -68,22 +68,6 @@ OOXMLStreamImpl::OOXMLStreamImpl
     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),
diff --git a/writerfilter/source/ooxml/OOXMLStreamImpl.hxx b/writerfilter/source/ooxml/OOXMLStreamImpl.hxx
index 64682fab250c..15409fe8ae2a 100644
--- a/writerfilter/source/ooxml/OOXMLStreamImpl.hxx
+++ b/writerfilter/source/ooxml/OOXMLStreamImpl.hxx
@@ -71,10 +71,6 @@ public:
      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();
 
diff --git a/writerfilter/source/ooxml/ooxmlLoggers.hxx b/writerfilter/source/ooxml/ooxmlLoggers.hxx
index b58a41bdabcd..54191244b968 100644
--- a/writerfilter/source/ooxml/ooxmlLoggers.hxx
+++ b/writerfilter/source/ooxml/ooxmlLoggers.hxx
@@ -28,6 +28,8 @@
 #ifndef INCLUDED_OOXML_LOGGERS_HXX
 #define INCLUDED_OOXML_LOGGERS_HXX
 
+#ifdef DEBUG
+
 #include <resourcemodel/TagLogger.hxx>
 
 namespace writerfilter {
@@ -35,4 +37,5 @@ namespace writerfilter {
         extern TagLogger::Pointer_t debug_logger;
     }
 }
+#endif
 #endif // INCLUDED_OOXML_LOGGERS_HXX
diff --git a/writerfilter/source/resourcemodel/Protocol.cxx b/writerfilter/source/resourcemodel/Protocol.cxx
index 7ae3c06f2675..51d12eb4f2d6 100644
--- a/writerfilter/source/resourcemodel/Protocol.cxx
+++ b/writerfilter/source/resourcemodel/Protocol.cxx
@@ -28,6 +28,7 @@
  *
  ************************************************************************/
 
+#ifdef DEBUG
 #include <stdio.h>
 #include <rtl/ustrbuf.hxx>
 #include <resourcemodel/Protocol.hxx>
@@ -214,3 +215,4 @@ void TableProtocol::entry(int pos,
 }
 
 }
+#endif // DEBUG
diff --git a/writerfilter/source/resourcemodel/TagLogger.cxx b/writerfilter/source/resourcemodel/TagLogger.cxx
index bee3c0b7b39a..fa61d7635efb 100644
--- a/writerfilter/source/resourcemodel/TagLogger.cxx
+++ b/writerfilter/source/resourcemodel/TagLogger.cxx
@@ -25,6 +25,7 @@
  *
  ************************************************************************/
 
+#ifdef DEBUG
 #include <fstream>
 #include <string.h>
 #include <resourcemodel/TagLogger.hxx>
@@ -365,3 +366,4 @@ namespace writerfilter
 
 
 }
+#endif // DEBUG
diff --git a/writerfilter/source/resourcemodel/util.cxx b/writerfilter/source/resourcemodel/util.cxx
index 47d325654d5b..3d041d18c126 100644
--- a/writerfilter/source/resourcemodel/util.cxx
+++ b/writerfilter/source/resourcemodel/util.cxx
@@ -64,6 +64,37 @@ void logger(string prefix, string message)
     logger_stream().flush();
 }
 
+    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;
+    }
+
+#ifdef DEBUG
 string propertysetToString(uno::Reference<beans::XPropertySet> const & xPropSet)
 {
     string sResult;
@@ -368,57 +399,29 @@ string propertysetToString(uno::Reference<beans::XPropertySet> const & xPropSet)
 
     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;
-    }
+string toString(uno::Reference< text::XTextRange > textRange)
+{
+    string result;
 
-    string toString(uno::Reference< text::XTextRange > textRange)
+    if (textRange.get())
     {
-        string result;
-
-        if (textRange.get())
-        {
-            rtl::OUString aOUStr = textRange->getString();
-            rtl::OString aOStr(aOUStr.getStr(), aOUStr.getLength(),  RTL_TEXTENCODING_ASCII_US );
-
-            result = aOStr.getStr();
-        }
-        else
-        {
-            result="(nil)";
-        }
+        rtl::OUString aOUStr = textRange->getString();
+        rtl::OString aOStr(aOUStr.getStr(), aOUStr.getLength(),  RTL_TEXTENCODING_ASCII_US );
 
-        return result;
+        result = aOStr.getStr();
     }
-
-    string toString(const string & rString)
+    else
     {
-        return rString;
+        result="(nil)";
     }
+
+    return result;
+}
+
+string toString(const string & rString)
+{
+    return rString;
+}
+#endif
 }
-- 
cgit 


From f799d8944cafe6aceb48ea71e711c91a0cc98b16 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 28 Apr 2010 17:50:42 +0200
Subject: writerfilter08: removed unused functions from reourcemodel.[hc]xx

---
 writerfilter/source/resourcemodel/resourcemodel.cxx | 6 ------
 writerfilter/source/resourcemodel/resourcemodel.hxx | 2 --
 2 files changed, 8 deletions(-)

diff --git a/writerfilter/source/resourcemodel/resourcemodel.cxx b/writerfilter/source/resourcemodel/resourcemodel.cxx
index 9b45834c5ce3..096792c76b8e 100644
--- a/writerfilter/source/resourcemodel/resourcemodel.cxx
+++ b/writerfilter/source/resourcemodel/resourcemodel.cxx
@@ -481,12 +481,6 @@ void WW8PropertiesHandler::attribute(Id name, Value & val)
     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=\"";
diff --git a/writerfilter/source/resourcemodel/resourcemodel.hxx b/writerfilter/source/resourcemodel/resourcemodel.hxx
index b316f4c912f9..9f59e68b9e1f 100644
--- a/writerfilter/source/resourcemodel/resourcemodel.hxx
+++ b/writerfilter/source/resourcemodel/resourcemodel.hxx
@@ -76,8 +76,6 @@ public:
 
     void dumpSprm(SprmSharedPointer_t sprm);
     void dumpSprms();
-
-    static bool compare(SprmSharedPointer_t sprm1, SprmSharedPointer_t sprm2);
 };
 
 class WW8BinaryObjHandler : public BinaryObj
-- 
cgit 


From e15ab07cb65cdf9e26a30e57a1fa9a676b3cb61f Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 29 Apr 2010 13:36:57 +0200
Subject: writerfilter08: removed unused functions *::calcPayloadSize

---
 writerfilter/source/doctok/WW8FontTable.cxx  |  5 -----
 writerfilter/source/doctok/WW8LFOTable.cxx   |  7 -------
 writerfilter/source/doctok/WW8ListTable.cxx  |  5 -----
 writerfilter/source/doctok/WW8StyleSheet.cxx |  5 -----
 writerfilter/source/doctok/resources.xmi     | 12 ++++++++++++
 writerfilter/source/doctok/resources.xsl     | 10 ++++++----
 6 files changed, 18 insertions(+), 26 deletions(-)

diff --git a/writerfilter/source/doctok/WW8FontTable.cxx b/writerfilter/source/doctok/WW8FontTable.cxx
index f29d2ea4a343..7391763f347e 100644
--- a/writerfilter/source/doctok/WW8FontTable.cxx
+++ b/writerfilter/source/doctok/WW8FontTable.cxx
@@ -52,11 +52,6 @@ void WW8FontTable::initPayload()
     mnPlcfPayloadOffset = nOffset;
 }
 
-sal_uInt32 WW8FontTable::calcPayloadOffset()
-{
-    return 0;
-}
-
 sal_uInt32 WW8FontTable::getEntryCount()
 {
     return entryOffsets.size() - 1;
diff --git a/writerfilter/source/doctok/WW8LFOTable.cxx b/writerfilter/source/doctok/WW8LFOTable.cxx
index 2164c4887c8b..1197ef7f190d 100644
--- a/writerfilter/source/doctok/WW8LFOTable.cxx
+++ b/writerfilter/source/doctok/WW8LFOTable.cxx
@@ -62,13 +62,6 @@ void WW8LFOTable::initPayload()
     payloadOffsets.push_back(nOffsetLFOData);
 }
 
-sal_uInt32 WW8LFOTable::calcPayloadOffset()
-{
-    sal_uInt32 nResult = 4 + getEntryCount() * WW8LFO::getSize();
-
-    return nResult;
-}
-
 sal_uInt32 WW8LFOTable::getEntryCount()
 {
     return getU32(0);
diff --git a/writerfilter/source/doctok/WW8ListTable.cxx b/writerfilter/source/doctok/WW8ListTable.cxx
index f70c7740dff2..15ef3039d8da 100644
--- a/writerfilter/source/doctok/WW8ListTable.cxx
+++ b/writerfilter/source/doctok/WW8ListTable.cxx
@@ -68,11 +68,6 @@ void WW8ListTable::initPayload()
     entryOffsets.push_back(nOffset);
 }
 
-sal_uInt32 WW8ListTable::calcPayloadOffset()
-{
-    return 0;
-}
-
 sal_uInt32 WW8ListTable::getEntryCount()
 {
     return getU16(0);
diff --git a/writerfilter/source/doctok/WW8StyleSheet.cxx b/writerfilter/source/doctok/WW8StyleSheet.cxx
index 797554f984e3..3bf08eee430c 100644
--- a/writerfilter/source/doctok/WW8StyleSheet.cxx
+++ b/writerfilter/source/doctok/WW8StyleSheet.cxx
@@ -46,11 +46,6 @@ void WW8StyleSheet::initPayload()
     entryOffsets.push_back(nOffset);
 }
 
-sal_uInt32 WW8StyleSheet::calcPayloadOffset()
-{
-    return 0;
-}
-
 sal_uInt32 WW8StyleSheet::calcSize()
 {
     return getCount();
diff --git a/writerfilter/source/doctok/resources.xmi b/writerfilter/source/doctok/resources.xmi
index bc3bd81761a5..f07da9641624 100644
--- a/writerfilter/source/doctok/resources.xmi
+++ b/writerfilter/source/doctok/resources.xmi
@@ -2322,6 +2322,9 @@
           <UML:ModelElement.stereotype>
             <UML:Stereotype xmi.idref="plcf"/>
           </UML:ModelElement.stereotype>
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8nopayloadoffset"/>
+          </UML:ModelElement.stereotype>
           <UML:ModelElement.taggedValue>
             <UML:TaggedValue>
               <UML:TaggedValue.dataValue>rtf:LISTTABLE</UML:TaggedValue.dataValue>
@@ -3116,6 +3119,9 @@
           <UML:ModelElement.stereotype>
             <UML:Stereotype xmi.idref="plcf"/>
           </UML:ModelElement.stereotype>
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8nopayloadoffset"/>
+          </UML:ModelElement.stereotype>
           <UML:ModelElement.taggedValue>
             <UML:TaggedValue>
               <UML:TaggedValue.dataValue>rtf:LFOTABLE</UML:TaggedValue.dataValue>
@@ -3139,6 +3145,9 @@
           <UML:ModelElement.stereotype>
             <UML:Stereotype xmi.idref="ww8resource"/>
           </UML:ModelElement.stereotype>
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8nopayloadoffset"/>
+          </UML:ModelElement.stereotype>
           <UML:ModelElement.stereotype>
             <UML:Stereotype xmi.idref="plcf"/>
           </UML:ModelElement.stereotype>
@@ -4784,6 +4793,9 @@
           <UML:ModelElement.stereotype>
             <UML:Stereotype xmi.idref="plcf"/>
           </UML:ModelElement.stereotype>
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8nopayloadoffset"/>
+          </UML:ModelElement.stereotype>
           <UML:Classifier.feature>
             <UML:Attribute name="size">
               <UML:ModelElement.taggedValue>
diff --git a/writerfilter/source/doctok/resources.xsl b/writerfilter/source/doctok/resources.xsl
index e1fc68ba5323..53cc3861c1cf 100644
--- a/writerfilter/source/doctok/resources.xsl
+++ b/writerfilter/source/doctok/resources.xsl
@@ -319,13 +319,15 @@ class </xsl:text>
     sal_uInt32 getEntryOffset(sal_uInt32 nIndex)
     {
         return entryOffsets[nIndex];
-    }   
-
+    }</xsl:text>
+    <xsl:if test="not(.//UML:Stereotype[@xmi.idref='ww8nopayloadoffset'])">
+      <xsl:text>
     /**
         Calculate offset for payload.
     */
-    sal_uInt32 calcPayloadOffset();
-
+    sal_uInt32 calcPayloadOffset();</xsl:text>
+    </xsl:if>
+    <xsl:text>
     /**
     Set offset for payloads.
 
-- 
cgit 


From b2594980cac8ed87984b6609910ffa9cbae30147 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 29 Apr 2010 14:00:02 +0200
Subject: writerfilter08: removed unsed functions *::calcSize

---
 writerfilter/source/doctok/resources.xmi | 30 ++++++++++++++++++++++++++++++
 writerfilter/source/doctok/resources.xsl | 11 ++++++-----
 2 files changed, 36 insertions(+), 5 deletions(-)

diff --git a/writerfilter/source/doctok/resources.xmi b/writerfilter/source/doctok/resources.xmi
index f07da9641624..8386f68ce59a 100644
--- a/writerfilter/source/doctok/resources.xmi
+++ b/writerfilter/source/doctok/resources.xmi
@@ -4797,6 +4797,9 @@
             <UML:Stereotype xmi.idref="ww8nopayloadoffset"/>
           </UML:ModelElement.stereotype>
           <UML:Classifier.feature>
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+          </UML:ModelElement.stereotype>
             <UML:Attribute name="size">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
@@ -22909,6 +22912,9 @@
           <UML:ModelElement.stereotype>
             <UML:Stereotype xmi.idref="ww8resource"/>
           </UML:ModelElement.stereotype>
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+          </UML:ModelElement.stereotype>
           <UML:ModelElement.taggedValue>
             <UML:TaggedValue>
               <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
@@ -32226,6 +32232,9 @@
           <UML:ModelElement.stereotype>
             <UML:Stereotype xmi.idref="ww8resource"/>
           </UML:ModelElement.stereotype>
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8nopayloadoffset"/>
+          </UML:ModelElement.stereotype>
           <UML:ModelElement.taggedValue>
             <UML:TaggedValue>
               <UML:TaggedValue.dataValue>0xC60D</UML:TaggedValue.dataValue>
@@ -38875,6 +38884,9 @@
           <UML:ModelElement.stereotype>
             <UML:Stereotype xmi.idref="ww8resource"/>
           </UML:ModelElement.stereotype>
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+          </UML:ModelElement.stereotype>
           <UML:ModelElement.taggedValue>
             <UML:TaggedValue>
               <UML:TaggedValue.dataValue>0xD609</UML:TaggedValue.dataValue>
@@ -40206,6 +40218,9 @@
           <UML:ModelElement.stereotype>
             <UML:Stereotype xmi.idref="ww8resource"/>
           </UML:ModelElement.stereotype>
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+          </UML:ModelElement.stereotype>
           <UML:ModelElement.taggedValue>
             <UML:TaggedValue>
               <UML:TaggedValue.dataValue>0xD61A</UML:TaggedValue.dataValue>
@@ -40270,6 +40285,9 @@
           <UML:ModelElement.stereotype>
             <UML:Stereotype xmi.idref="ww8resource"/>
           </UML:ModelElement.stereotype>
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+          </UML:ModelElement.stereotype>
           <UML:ModelElement.taggedValue>
             <UML:TaggedValue>
               <UML:TaggedValue.dataValue>0xD61B</UML:TaggedValue.dataValue>
@@ -40334,6 +40352,9 @@
           <UML:ModelElement.stereotype>
             <UML:Stereotype xmi.idref="ww8resource"/>
           </UML:ModelElement.stereotype>
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+          </UML:ModelElement.stereotype>
           <UML:ModelElement.taggedValue>
             <UML:TaggedValue>
               <UML:TaggedValue.dataValue>0xD61C</UML:TaggedValue.dataValue>
@@ -40398,6 +40419,9 @@
           <UML:ModelElement.stereotype>
             <UML:Stereotype xmi.idref="ww8resource"/>
           </UML:ModelElement.stereotype>
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+          </UML:ModelElement.stereotype>
           <UML:ModelElement.taggedValue>
             <UML:TaggedValue>
               <UML:TaggedValue.dataValue>0xD61D</UML:TaggedValue.dataValue>
@@ -40462,6 +40486,9 @@
           <UML:ModelElement.stereotype>
             <UML:Stereotype xmi.idref="ww8resource"/>
           </UML:ModelElement.stereotype>
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+          </UML:ModelElement.stereotype>
           <UML:ModelElement.taggedValue>
             <UML:TaggedValue>
               <UML:TaggedValue.dataValue>0xD613</UML:TaggedValue.dataValue>
@@ -40975,6 +41002,9 @@
           <UML:ModelElement.stereotype>
             <UML:Stereotype xmi.idref="ww8sprm"/>
           </UML:ModelElement.stereotype>
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+          </UML:ModelElement.stereotype>
           <UML:ModelElement.taggedValue>
             <UML:TaggedValue>
               <UML:TaggedValue.dataValue>0xd670</UML:TaggedValue.dataValue>
diff --git a/writerfilter/source/doctok/resources.xsl b/writerfilter/source/doctok/resources.xsl
index 53cc3861c1cf..5ff0efe0edd1 100644
--- a/writerfilter/source/doctok/resources.xsl
+++ b/writerfilter/source/doctok/resources.xsl
@@ -301,14 +301,15 @@ class </xsl:text>
     */
     static sal_uInt32 getSize() { return </xsl:text>
     <xsl:value-of select='$size'/>
-    <xsl:text>; }
-
+    <xsl:text>; }</xsl:text>
+    <xsl:if test="not(.//UML:Stereotype[@xmi.ref='ww8nocalcsize'])">
+      <xsl:text>
     /**
         Calculate actual size.
     */  
-    sal_uInt32 calcSize();
-
-    </xsl:text>
+    sal_uInt32 calcSize(); 
+      </xsl:text>
+    </xsl:if>
     <xsl:if test='.//UML:Stereotype[@xmi.idref ="plcf"]'>
       <xsl:text>
     /**
-- 
cgit 


From 3d28a6dfed188e84d4017df6802f0072c9d7dbae Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 29 Apr 2010 14:26:04 +0200
Subject: writerfilter08: removed doctokutil.cxx/util.hxx: not used anymore

---
 .../source/doctok/WW8ResourceModelImpl.cxx         |  1 -
 writerfilter/source/doctok/WW8StructBase.cxx       |  1 -
 writerfilter/source/doctok/doctokutil.cxx          | 53 --------------------
 writerfilter/source/doctok/makefile.mk             |  1 -
 writerfilter/source/doctok/util.hxx                | 57 ----------------------
 5 files changed, 113 deletions(-)
 delete mode 100644 writerfilter/source/doctok/doctokutil.cxx
 delete mode 100644 writerfilter/source/doctok/util.hxx

diff --git a/writerfilter/source/doctok/WW8ResourceModelImpl.cxx b/writerfilter/source/doctok/WW8ResourceModelImpl.cxx
index a576640905ce..da72435d5efb 100644
--- a/writerfilter/source/doctok/WW8ResourceModelImpl.cxx
+++ b/writerfilter/source/doctok/WW8ResourceModelImpl.cxx
@@ -27,7 +27,6 @@
 
 #include <WW8ResourceModelImpl.hxx>
 #include <resources.hxx>
-#include <util.hxx>
 #include <WW8OutputWithDepth.hxx>
 #include <resourcemodel/TableManager.hxx>
 #include <rtl/string.hxx>
diff --git a/writerfilter/source/doctok/WW8StructBase.cxx b/writerfilter/source/doctok/WW8StructBase.cxx
index 7d03e8763c69..746034f4b177 100644
--- a/writerfilter/source/doctok/WW8StructBase.cxx
+++ b/writerfilter/source/doctok/WW8StructBase.cxx
@@ -26,7 +26,6 @@
  ************************************************************************/
 
 #include <WW8StructBase.hxx>
-#include <util.hxx>
 
 namespace writerfilter {
 namespace doctok {
diff --git a/writerfilter/source/doctok/doctokutil.cxx b/writerfilter/source/doctok/doctokutil.cxx
deleted file mode 100644
index 7d94b525550b..000000000000
--- a/writerfilter/source/doctok/doctokutil.cxx
+++ /dev/null
@@ -1,53 +0,0 @@
-/*************************************************************************
- *
- * 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/makefile.mk b/writerfilter/source/doctok/makefile.mk
index 6a407a0b91ea..ff03079f2c7a 100644
--- a/writerfilter/source/doctok/makefile.mk
+++ b/writerfilter/source/doctok/makefile.mk
@@ -58,7 +58,6 @@ SLOFILES= \
     $(SLO)$/WW8LFOTable.obj \
     $(SLO)$/WW8ListTable.obj \
     $(SLO)$/resources.obj \
-    $(SLO)$/doctokutil.obj \
     $(SLO)$/WW8CpAndFc.obj \
     $(SLO)$/WW8StructBase.obj \
     $(SLO)$/WW8Clx.obj \
diff --git a/writerfilter/source/doctok/util.hxx b/writerfilter/source/doctok/util.hxx
deleted file mode 100644
index df534b28a5bc..000000000000
--- a/writerfilter/source/doctok/util.hxx
+++ /dev/null
@@ -1,57 +0,0 @@
-/*************************************************************************
- *
- * 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
-- 
cgit 


From 7209623a6ee752a1d1c8158902a3c477808097bc Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Fri, 7 May 2010 11:10:33 +0200
Subject: writerfilter08: resolve SttbfAssoc

---
 writerfilter/source/doctok/WW8DocumentImpl.cxx | 23 +++++++++++++++++++++++
 writerfilter/source/doctok/WW8DocumentImpl.hxx |  5 +++++
 writerfilter/source/doctok/resources.xmi       | 21 ++++++++++++++++++---
 3 files changed, 46 insertions(+), 3 deletions(-)

diff --git a/writerfilter/source/doctok/WW8DocumentImpl.cxx b/writerfilter/source/doctok/WW8DocumentImpl.cxx
index 256a0766b66c..eb8e1f776ca0 100644
--- a/writerfilter/source/doctok/WW8DocumentImpl.cxx
+++ b/writerfilter/source/doctok/WW8DocumentImpl.cxx
@@ -1079,6 +1079,24 @@ writerfilter::Reference<Table>::Pointer_t WW8DocumentImpl::getStyleSheet() const
     return pResult;
 }
 
+writerfilter::Reference<Table>::Pointer_t WW8DocumentImpl::getAssocTable() const
+{
+    writerfilter::Reference<Table>::Pointer_t pResult;
+
+    if (mpFib->get_lcbSttbfAssoc() > 0)
+    {
+        WW8Sttbf::Pointer_t pSttbfAssoc
+            (new WW8Sttbf(*mpTableStream,
+                          mpFib->get_fcSttbfAssoc(),
+                          mpFib->get_lcbSttbfAssoc()));
+
+        pResult = writerfilter::Reference<Table>::Pointer_t
+            (new WW8SttbTableResource(pSttbfAssoc));
+    }
+
+    return pResult;
+}
+
 sal_uInt32 WW8DocumentImpl::getHeaderCount() const
 {
     sal_uInt32 nResult = 0;
@@ -1754,6 +1772,11 @@ void WW8DocumentImpl::resolve(Stream & rStream)
         {
             clog << e.getText() << endl;
         }
+
+        writerfilter::Reference<Table>::Pointer_t pAssocTable = getAssocTable();
+
+        if (pAssocTable.get() != NULL)
+            rStream.table(NS_rtf::LN_SttbAssoc, pAssocTable);
     }
 
     WW8DocumentIterator::Pointer_t pIt = begin();
diff --git a/writerfilter/source/doctok/WW8DocumentImpl.hxx b/writerfilter/source/doctok/WW8DocumentImpl.hxx
index 9b123ae54cde..eaaf7b98cff1 100644
--- a/writerfilter/source/doctok/WW8DocumentImpl.hxx
+++ b/writerfilter/source/doctok/WW8DocumentImpl.hxx
@@ -553,6 +553,11 @@ public:
     */
     writerfilter::Reference<Table>::Pointer_t getStyleSheet() const;
 
+    /**
+       Return reference to associated data.
+     */
+    writerfilter::Reference<Table>::Pointer_t getAssocTable() const;
+
     /**
        Return count of headers/footers.
     */
diff --git a/writerfilter/source/doctok/resources.xmi b/writerfilter/source/doctok/resources.xmi
index 8386f68ce59a..3ee3f05af4f2 100644
--- a/writerfilter/source/doctok/resources.xmi
+++ b/writerfilter/source/doctok/resources.xmi
@@ -552,6 +552,21 @@
               </UML:ModelElement.stereotype>
             </UML:Attribute>
           </UML:Classifier.feature>
+          <UML:Classifier.feature>
+            <UML:Attribute name="SttbAssoc">
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>rtf:SttbAssoc</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-->
@@ -4797,9 +4812,9 @@
             <UML:Stereotype xmi.idref="ww8nopayloadoffset"/>
           </UML:ModelElement.stereotype>
           <UML:Classifier.feature>
-          <UML:ModelElement.stereotype>
-            <UML:Stereotype xmi.idref="ww8nocalcsize"/>
-          </UML:ModelElement.stereotype>
+            <UML:ModelElement.stereotype>
+              <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+            </UML:ModelElement.stereotype>
             <UML:Attribute name="size">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-- 
cgit 


From 5a3ed8802f170d3d3b23695670f257c74edf1fa6 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 12 May 2010 13:10:03 +0200
Subject: writerfilter08: resolve WW8DopBase

---
 writerfilter/source/doctok/WW8DocumentImpl.cxx |   26 +-
 writerfilter/source/doctok/WW8DocumentImpl.hxx |   10 +
 writerfilter/source/doctok/dopbase.xml         |   91 +
 writerfilter/source/doctok/resources.xmi       | 4603 ++++++++++++++++++++++++
 4 files changed, 4729 insertions(+), 1 deletion(-)
 create mode 100644 writerfilter/source/doctok/dopbase.xml

diff --git a/writerfilter/source/doctok/WW8DocumentImpl.cxx b/writerfilter/source/doctok/WW8DocumentImpl.cxx
index eb8e1f776ca0..3aa9dc7576a8 100644
--- a/writerfilter/source/doctok/WW8DocumentImpl.cxx
+++ b/writerfilter/source/doctok/WW8DocumentImpl.cxx
@@ -187,6 +187,9 @@ mbInSection(false), mbInParagraphGroup(false), mbInCharacterGroup(false)
     mpDocStream = getSubStream(::rtl::OUString::createFromAscii
                                ("WordDocument"));
 
+    mpSummaryInformationStream = getSubStream(::rtl::OUString::createFromAscii
+                                              ("\5SummaryInformation"));
+
     try
     {
         mpDataStream = getSubStream(::rtl::OUString::createFromAscii
@@ -1301,6 +1304,19 @@ WW8DocumentImpl::getField(const CpAndFc & rCpAndFc) const
     return mpFieldHelper->getField(rCpAndFc);
 }
 
+writerfilter::Reference<Properties>::Pointer_t
+WW8DocumentImpl::getDocumentProperties() const
+{
+    writerfilter::Reference<Properties>::Pointer_t pResult;
+
+    if (mpFib->get_lcbDop() > 0)
+    {
+        pResult.reset(new WW8DopBase(*mpTableStream, mpFib->get_fcDop(), mpFib->get_lcbDop()));
+    }
+
+    return pResult;
+}
+
 WW8FLD::Pointer_t WW8DocumentImpl::getCurrentFLD() const
 {
     return mpFLD;
@@ -1652,7 +1668,7 @@ void WW8DocumentImpl::resolve(Stream & rStream)
 
         //output.addItem(mTextboxHeaderEndCpAndFc.toString());
 
-#if 0
+#if 1
         output.addItem("<substream-names>");
         output.addItem(mpStream->getSubStreamNames());
         output.addItem("</substream-names>");
@@ -1661,6 +1677,11 @@ void WW8DocumentImpl::resolve(Stream & rStream)
         {
             mpDocStream->dump(output);
         }
+
+        if (mpSummaryInformationStream.get() != NULL)
+        {
+            mpSummaryInformationStream->dump(output);
+        }
 #endif
 
         writerfilter::Reference<Properties>::Pointer_t pFib
@@ -1870,6 +1891,9 @@ void WW8DocumentImpl::resolve(Stream & rStream)
                 startSectionGroup(rStream);
                 rStream.info(pIt->toString());
 
+                if (nSectionIndex == 0)
+                    rStream.props(getDocumentProperties());
+
                 sal_uInt32 nHeaderStartIndex = 6 + nSectionIndex * 6;
                 sal_uInt32 nHeaderEndIndex = nHeaderStartIndex + 6;
 
diff --git a/writerfilter/source/doctok/WW8DocumentImpl.hxx b/writerfilter/source/doctok/WW8DocumentImpl.hxx
index eaaf7b98cff1..a1f7e8abb2b4 100644
--- a/writerfilter/source/doctok/WW8DocumentImpl.hxx
+++ b/writerfilter/source/doctok/WW8DocumentImpl.hxx
@@ -284,6 +284,9 @@ class WW8DocumentImpl : public WW8Document
     /// pointer to the compound object stream of the document
     WW8Stream::Pointer_t mpCompObjStream;
 
+    /// pointer to the summayry information stream of the document
+    WW8Stream::Pointer_t mpSummaryInformationStream;
+
     /// pointer to the piece table
     WW8PieceTable::Pointer_t mpPieceTable;
 
@@ -681,6 +684,13 @@ public:
     writerfilter::Reference<Properties>::Pointer_t
     getField(const CpAndFc & rCpAndFc) const;
 
+    /**
+       Return document properties.
+
+    */
+    writerfilter::Reference<Properties>::Pointer_t
+    getDocumentProperties() const;
+
     /**
        Return current field descriptor.
     */
diff --git a/writerfilter/source/doctok/dopbase.xml b/writerfilter/source/doctok/dopbase.xml
new file mode 100644
index 000000000000..8beb21d8cf08
--- /dev/null
+++ b/writerfilter/source/doctok/dopbase.xml
@@ -0,0 +1,91 @@
+<model>
+  <ww8resource name="DopBase" resource="Properties">
+    <bitfield size="4" type="U32">
+      <bits name="fFacingPages" bits="1" token="rtf:fFacingPages"/>
+      <bits name="unused1" bits="1" token="rtf:unused1"/>
+      <bits name="fPMHMainDoc" bits="1" token="rtf:fPMHMainDoc"/>
+      <bits name="unused2" bits="2" token="rtf:unused2"/>
+      <bits name="fpc" bits="2" token="rtf:fpc"/>
+      <bits name="unused3" bits="1" token="rtf:unused3"/>
+      <bits name="unused4" bits="8" token="rtf:unused4"/>
+      <bits name="rncFtn" bits="2" token="rtf:rncFtn"/>
+      <bits name="nFtn" bits="14" token="rtf:nFtn"/>
+    </bitfield>
+    <bitfield size="4" type="U32">
+      <bits name="unused5" bits="1" token="rtf:unused5"/>
+      <bits name="unused6" bits="1" token="rtf:unused6"/>
+      <bits name="unused7" bits="1" token="rtf:unused7"/>
+      <bits name="unused8" bits="1" token="rtf:unused8"/>
+      <bits name="unused9" bits="1" token="rtf:unused9"/>
+      <bits name="unused10" bits="1" token="rtf:unused10"/>
+      <bits name="fSplAllDone" bits="1" token="rtf:fSplAllDone"/>
+      <bits name="fSplAllClean" bits="1" token="rtf:fSplAllClean"/>
+      <bits name="fSplHideErrors" bits="1" token="rtf:fSplHideErrors"/>
+      <bits name="fGramHideErrors" bits="1" token="rtf:fGramHideErrors"/>
+      <bits name="fLabelDoc" bits="1" token="rtf:fLabelDoc"/>
+      <bits name="fHyphCapitals" bits="1" token="rtf:fHyphCapitals"/>
+      <bits name="fAutoHyphen" bits="1" token="rtf:fAutoHyphen"/>
+      <bits name="fFormNoFields" bits="1" token="rtf:fFormNoFields"/>
+      <bits name="fLinkStyles" bits="1" token="rtf:fLinkStyles"/>
+      <bits name="fRevMarking" bits="1" token="rtf:fRevMarking"/>
+      <bits name="unused11" bits="1" token="rtf:unused11"/>
+      <bits name="fExactCWords" bits="1" token="rtf:fExactCWords"/>
+      <bits name="fPagHidden" bits="1" token="rtf:fPagHidden"/>
+      <bits name="fPagResults" bits="1" token="rtf:fPagResults"/>
+      <bits name="fLockAtn" bits="1" token="rtf:fLockAtn"/>
+      <bits name="fMirrorMargins" bits="1" token="rtf:fMirrorMargins"/>
+      <bits name="fWord97Compat" bits="1" token="rtf:fWord97Compat"/>
+      <bits name="unused12" bits="1" token="rtf:unused12"/>
+      <bits name="unused13" bits="1" token="rtf:unused13"/>
+      <bits name="fProtEnabled" bits="1" token="rtf:fProtEnabled"/>
+      <bits name="fDispFormFldSel" bits="1" token="rtf:fDispFormFldSel"/>
+      <bits name="fRMView" bits="1" token="rtf:fRMView"/>
+      <bits name="fRMPrint" bits="1" token="rtf:fRMPrint"/>
+      <bits name="fLockVbaProj" bits="1" token="rtf:fLockVbaProj"/>
+      <bits name="fLockRev" bits="1" token="rtf:fLockRev"/>
+      <bits name="fEmbedFonts" bits="1" token="rtf:fEmbedFonts"/>
+    </bitfield>
+    <attribute name="copts60" type="U16" size="2" token="rtf:copts60"/>
+    <attribute name="dxaTab" type="U16" size="2" token="rtf:dxaTab"/>
+    <attribute name="cpgWebOpt" type="U16" size="2" token="rtf:cpgWebOpt"/>
+    <attribute name="dxaHotZ" type="U16" size="2" token="rtf:dxaHotZ"/>
+    <attribute name="cConsecHypLim" type="U16" size="2" token="rtf:cConsecHypLim"/>
+    <attribute name="wSpare2" type="U16" size="2" token="rtf:wSpare2"/>
+    <attribute name="dttmCreated" type="U32" size="4" token="rtf:dttmCreated"/>
+    <attribute name="dttmRevised" type="U32" size="4" token="rtf:dttmRevised"/>
+    <attribute name="dttmLastPrint" type="U32" size="4" token="rtf:dttmLastPrint"/>
+    <attribute name="nRevision" type="U16" size="2" token="rtf:nRevision"/>
+    <attribute name="tmEdited" type="U32" size="4" token="rtf:tmEdited"/>
+    <attribute name="cWords" type="U32" size="4" token="rtf:cWords"/>
+    <attribute name="cCh" type="U32" size="4" token="rtf:cCh"/>
+    <attribute name="cPg" type="U16" size="2" token="rtf:cPg"/>
+    <attribute name="cParas" type="U32" size="4" token="rtf:cParas"/>
+    <bitfield size="4" type="U32">
+      <bits name="rncEdn" bits="2" token="rtf:rncEdn"/>
+      <bits name="nEdn" bits="14" token="rtf:"/>
+      <bits name="epc" bits="2" token="rtf:"/>
+      <bits name="unused14" bits="4" token="rtf:unused14"/>
+      <bits name="unused15" bits="4" token="rtf:unused15"/>
+      <bits name="fPrintFormData" bits="1" token="rtf:fPrintFormData"/>
+      <bits name="fSaveFormData" bits="1" token="rtf:fSaveFormData"/>
+      <bits name="fShadeFormData" bits="1" token="rtf:fShadeFormData"/>
+      <bits name="fShadeMergeFields" bits="1" token="rtf:fShadeMergeFields"/>
+      <bits name="reserved2" bits="1" token="rtf:reserved2"/>
+      <bits name="fIncludeSubdocsInStats" bits="1" token="rtf:fIncludeSubdocsInStats"/>
+    </bitfield>
+    <attribute name="cLines" type="U32" size="4" token="rtf:cLines"/>
+    <attribute name="cWordsWithSubdocs" type="U32" size="4" token="rtf:cWordsWithSubdocs"/>
+    <attribute name="cChWithSubdocs" type="U32" size="4" token="rtf:cChWithSubdocs"/>
+    <attribute name="cPgWithSubdocs" type="U16" size="2" token="rtf:cPgWithSubdocs"/>
+    <attribute name="cParasWithSubdocs" type="U32" size="4" token="rtf:cParasWithSubdocs"/>
+    <attribute name="cLinesWithSubdocs" type="U32" size="4" token="rtf:cLinesWithSubdocs"/>
+    <attribute name="lKeyProtDoc" type="U32" size="4" token="rtf:lKeyProtDoc"/>
+    <bitfield size="2" type="U16">
+      <bits name="wvkoSaved" bits="3" token="rtf:wvkoSaved"/>
+      <bits name="pctWwdSaved" bits="9" token="rtf:pctWwdSaved"/>
+      <bits name="zkSaved" bits="2" token="rtf:zkSaved"/>
+      <bits name="unused16" bits="1" token="rtf:unused16"/>
+      <bits name="iGutterPos" bits="1" token="rtf:iGutterPos"/>
+    </bitfield>
+  </ww8resource>
+</model>
\ No newline at end of file
diff --git a/writerfilter/source/doctok/resources.xmi b/writerfilter/source/doctok/resources.xmi
index 3ee3f05af4f2..bfb1939a8c74 100644
--- a/writerfilter/source/doctok/resources.xmi
+++ b/writerfilter/source/doctok/resources.xmi
@@ -593,6 +593,4609 @@
         </UML:Class>
         <!--Resources-->
         <!--WW8 resources-->
+  <UML:Class xmi.id="DopBase" name="DopBase">
+    <UML:ModelElement.stereotype>
+      <UML:Stereotype xmi.idref="ww8resource"/>
+    </UML:ModelElement.stereotype>
+    <UML:ModelElement.taggedValue>
+      <UML:TaggedValue>
+        <UML:TaggedValue.dataValue>84</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="fFacingPages">
+        <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>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>31</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x80000000</UML:TaggedValue.dataValue>
+            <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:fFacingPages</UML:TaggedValue.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="unused1">
+        <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>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>30</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x40000000</UML:TaggedValue.dataValue>
+            <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</UML:TaggedValue.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="fPMHMainDoc">
+        <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>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>29</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x20000000</UML:TaggedValue.dataValue>
+            <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:fPMHMainDoc</UML:TaggedValue.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="unused2">
+        <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>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>27</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x18000000</UML:TaggedValue.dataValue>
+            <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:unused2</UML:TaggedValue.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="fpc">
+        <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>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>25</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x6000000</UML:TaggedValue.dataValue>
+            <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:fpc</UML:TaggedValue.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="unused3">
+        <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>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>24</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x000000</UML:TaggedValue.dataValue>
+            <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:unused3</UML:TaggedValue.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="unused4">
+        <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>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>16</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0xff0000</UML:TaggedValue.dataValue>
+            <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: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="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="rncFtn">
+        <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>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>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>0xc000</UML:TaggedValue.dataValue>
+            <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:rncFtn</UML:TaggedValue.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="nFtn">
+        <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>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>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>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:nFtn</UML:TaggedValue.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="unused5">
+        <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>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>31</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x80000000</UML:TaggedValue.dataValue>
+            <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</UML:TaggedValue.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="unused6">
+        <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>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>30</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x40000000</UML:TaggedValue.dataValue>
+            <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:unused6</UML:TaggedValue.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="unused7">
+        <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>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>29</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x20000000</UML:TaggedValue.dataValue>
+            <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:unused7</UML:TaggedValue.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="unused8">
+        <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>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>28</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x0000000</UML:TaggedValue.dataValue>
+            <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: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="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="unused9">
+        <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>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>27</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x8000000</UML:TaggedValue.dataValue>
+            <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:unused9</UML:TaggedValue.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="unused10">
+        <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>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>26</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x4000000</UML:TaggedValue.dataValue>
+            <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:unused10</UML:TaggedValue.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="fSplAllDone">
+        <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>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>25</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x2000000</UML:TaggedValue.dataValue>
+            <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:fSplAllDone</UML:TaggedValue.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="fSplAllClean">
+        <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>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>24</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x000000</UML:TaggedValue.dataValue>
+            <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:fSplAllClean</UML:TaggedValue.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="fSplHideErrors">
+        <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>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>23</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x800000</UML:TaggedValue.dataValue>
+            <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:fSplHideErrors</UML:TaggedValue.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="fGramHideErrors">
+        <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>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>22</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x400000</UML:TaggedValue.dataValue>
+            <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:fGramHideErrors</UML:TaggedValue.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="fLabelDoc">
+        <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>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>21</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x200000</UML:TaggedValue.dataValue>
+            <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:fLabelDoc</UML:TaggedValue.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="fHyphCapitals">
+        <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>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>20</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x00000</UML:TaggedValue.dataValue>
+            <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:fHyphCapitals</UML:TaggedValue.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="fAutoHyphen">
+        <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>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>19</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x80000</UML:TaggedValue.dataValue>
+            <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:fAutoHyphen</UML:TaggedValue.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="fFormNoFields">
+        <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>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>18</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x40000</UML:TaggedValue.dataValue>
+            <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:fFormNoFields</UML:TaggedValue.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="fLinkStyles">
+        <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>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>17</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x20000</UML:TaggedValue.dataValue>
+            <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:fLinkStyles</UML:TaggedValue.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="fRevMarking">
+        <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>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>16</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x0000</UML:TaggedValue.dataValue>
+            <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:fRevMarking</UML:TaggedValue.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="unused11">
+        <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>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>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>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>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:unused11</UML:TaggedValue.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="fExactCWords">
+        <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>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>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>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>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:fExactCWords</UML:TaggedValue.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="fPagHidden">
+        <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>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>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>0x2000</UML:TaggedValue.dataValue>
+            <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:fPagHidden</UML:TaggedValue.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="fPagResults">
+        <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>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>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>0x000</UML:TaggedValue.dataValue>
+            <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:fPagResults</UML:TaggedValue.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="fLockAtn">
+        <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>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>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>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>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:fLockAtn</UML:TaggedValue.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="fMirrorMargins">
+        <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>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>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>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>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:fMirrorMargins</UML:TaggedValue.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="fWord97Compat">
+        <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>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>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>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>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:fWord97Compat</UML:TaggedValue.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="unused12">
+        <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>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>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>0x00</UML:TaggedValue.dataValue>
+            <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:unused12</UML:TaggedValue.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="unused13">
+        <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>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>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:unused13</UML:TaggedValue.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="fProtEnabled">
+        <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>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>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:fProtEnabled</UML:TaggedValue.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="fDispFormFldSel">
+        <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>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:fDispFormFldSel</UML:TaggedValue.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="fRMView">
+        <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>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>0x0</UML:TaggedValue.dataValue>
+            <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:fRMView</UML:TaggedValue.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="fRMPrint">
+        <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>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>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>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>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:fRMPrint</UML:TaggedValue.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="fLockVbaProj">
+        <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>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>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>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>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:fLockVbaProj</UML:TaggedValue.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="fLockRev">
+        <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>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>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>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="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:fLockRev</UML:TaggedValue.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="fEmbedFonts">
+        <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>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>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>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:fEmbedFonts</UML:TaggedValue.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="copts60">
+        <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>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/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:copts60</UML:TaggedValue.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="dxaTab">
+        <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>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/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:dxaTab</UML:TaggedValue.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="cpgWebOpt">
+        <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/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:cpgWebOpt</UML:TaggedValue.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="dxaHotZ">
+        <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>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/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:dxaHotZ</UML:TaggedValue.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="cConsecHypLim">
+        <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>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/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:cConsecHypLim</UML:TaggedValue.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="wSpare2">
+        <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>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/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:wSpare2</UML:TaggedValue.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="dttmCreated">
+        <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>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/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:dttmCreated</UML:TaggedValue.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="dttmRevised">
+        <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>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/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:dttmRevised</UML:TaggedValue.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="dttmLastPrint">
+        <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>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/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:dttmLastPrint</UML:TaggedValue.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="nRevision">
+        <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>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/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:nRevision</UML:TaggedValue.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="tmEdited">
+        <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>34</UML:TaggedValue.dataValue>
+            <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="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:tmEdited</UML:TaggedValue.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="cWords">
+        <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>38</UML:TaggedValue.dataValue>
+            <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="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:cWords</UML:TaggedValue.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="cCh">
+        <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>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/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:cCh</UML:TaggedValue.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="cPg">
+        <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>46</UML:TaggedValue.dataValue>
+            <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="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:cPg</UML:TaggedValue.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="cParas">
+        <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>48</UML:TaggedValue.dataValue>
+            <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="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:cParas</UML:TaggedValue.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="rncEdn">
+        <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>52</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="offset"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>30</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0xc0000000</UML:TaggedValue.dataValue>
+            <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:rncEdn</UML:TaggedValue.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="nEdn">
+        <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>52</UML:TaggedValue.dataValue>
+            <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="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0x3fff0000</UML:TaggedValue.dataValue>
+            <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:</UML:TaggedValue.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="epc">
+        <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>52</UML:TaggedValue.dataValue>
+            <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>0xc000</UML:TaggedValue.dataValue>
+            <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:</UML:TaggedValue.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="unused14">
+        <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>52</UML:TaggedValue.dataValue>
+            <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>0x3c00</UML:TaggedValue.dataValue>
+            <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:unused14</UML:TaggedValue.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="unused15">
+        <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>52</UML:TaggedValue.dataValue>
+            <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>0x3c0</UML:TaggedValue.dataValue>
+            <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:unused15</UML:TaggedValue.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="fPrintFormData">
+        <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>52</UML:TaggedValue.dataValue>
+            <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:fPrintFormData</UML:TaggedValue.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="fSaveFormData">
+        <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>52</UML:TaggedValue.dataValue>
+            <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>0x0</UML:TaggedValue.dataValue>
+            <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:fSaveFormData</UML:TaggedValue.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="fShadeFormData">
+        <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>52</UML:TaggedValue.dataValue>
+            <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>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>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:fShadeFormData</UML:TaggedValue.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="fShadeMergeFields">
+        <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>52</UML:TaggedValue.dataValue>
+            <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>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>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:fShadeMergeFields</UML:TaggedValue.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="reserved2">
+        <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>52</UML:TaggedValue.dataValue>
+            <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>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="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:reserved2</UML:TaggedValue.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="fIncludeSubdocsInStats">
+        <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>52</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="offset"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </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>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:fIncludeSubdocsInStats</UML:TaggedValue.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="cLines">
+        <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>56</UML:TaggedValue.dataValue>
+            <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="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:cLines</UML:TaggedValue.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="cWordsWithSubdocs">
+        <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>60</UML:TaggedValue.dataValue>
+            <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="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:cWordsWithSubdocs</UML:TaggedValue.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="cChWithSubdocs">
+        <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>64</UML:TaggedValue.dataValue>
+            <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="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:cChWithSubdocs</UML:TaggedValue.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="cPgWithSubdocs">
+        <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>68</UML:TaggedValue.dataValue>
+            <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="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:cPgWithSubdocs</UML:TaggedValue.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="cParasWithSubdocs">
+        <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>70</UML:TaggedValue.dataValue>
+            <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="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:cParasWithSubdocs</UML:TaggedValue.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="cLinesWithSubdocs">
+        <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>74</UML:TaggedValue.dataValue>
+            <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="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:cLinesWithSubdocs</UML:TaggedValue.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="lKeyProtDoc">
+        <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>78</UML:TaggedValue.dataValue>
+            <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="shift"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="mask"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue/>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:lKeyProtDoc</UML:TaggedValue.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="wvkoSaved">
+        <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>82</UML:TaggedValue.dataValue>
+            <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>0xe000</UML:TaggedValue.dataValue>
+            <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:wvkoSaved</UML:TaggedValue.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="pctWwdSaved">
+        <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>82</UML:TaggedValue.dataValue>
+            <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>0x1ff0</UML:TaggedValue.dataValue>
+            <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:pctWwdSaved</UML:TaggedValue.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="zkSaved">
+        <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>82</UML:TaggedValue.dataValue>
+            <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>0xc</UML:TaggedValue.dataValue>
+            <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:zkSaved</UML:TaggedValue.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="unused16">
+        <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>82</UML:TaggedValue.dataValue>
+            <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>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="bits"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>rtf:unused16</UML:TaggedValue.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="iGutterPos">
+        <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>82</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="offset"/>
+            </UML:TaggedValue.type>
+          </UML:TaggedValue>
+        </UML:ModelElement.taggedValue>
+        <UML:ModelElement.taggedValue>
+          <UML:TaggedValue>
+            <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+            <UML:TaggedValue.type>
+              <UML:TagDefinition xmi.idref="shift"/>
+            </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>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:iGutterPos</UML:TaggedValue.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="DopBase-Properties">
+    <UML:Generalization.child>
+      <UML:Class xmi.idref="DopBase"/>
+    </UML:Generalization.child>
+    <UML:Generalization.parent>
+      <UML:Class xmi.idref="Properties"/>
+    </UML:Generalization.parent>
+  </UML:Generalization>
         <!--Class ListLevel-->
         <UML:Class xmi.id="ListLevel" name="ListLevel">
           <UML:ModelElement.stereotype>
-- 
cgit 


From 3240e00e81ae9566bcbc4007b843e773494eabd0 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 18 May 2010 15:20:51 +0200
Subject: writerfilter08: TagLogger: log uno property sets

---
 writerfilter/inc/resourcemodel/TagLogger.hxx    |   6 ++
 writerfilter/source/resourcemodel/TagLogger.cxx | 102 +++++++++++++++++++++++-
 2 files changed, 106 insertions(+), 2 deletions(-)

diff --git a/writerfilter/inc/resourcemodel/TagLogger.hxx b/writerfilter/inc/resourcemodel/TagLogger.hxx
index 387d4e0e156a..055656832761 100644
--- a/writerfilter/inc/resourcemodel/TagLogger.hxx
+++ b/writerfilter/inc/resourcemodel/TagLogger.hxx
@@ -31,6 +31,7 @@
 #ifdef DEBUG
 
 #include <rtl/ustring.hxx>
+#include <com/sun/star/beans/XPropertySet.hpp>
 #include <WriterFilterDllApi.hxx>
 #include <resourcemodel/WW8ResourceModel.hxx>
 #include <string>
@@ -78,8 +79,10 @@ namespace writerfilter
         void addAttr(string name, string value);
         void addAttr(string name, const ::rtl::OUString & value);
         void addAttr(string name, sal_uInt32 nValue);
+        void addAttr(string name, uno::Any rAny);
         void addTag(Pointer_t pTag);
         void chars(const string & rChars);
+        void chars(const ::rtl::OUString & rChars);
         const string & getTag() const;
         string toString() const;
 
@@ -112,6 +115,7 @@ namespace writerfilter
         void attribute(const string & name, const string & value);
         void attribute(const string & name, const ::rtl::OUString & value);
         void attribute(const string & name, sal_uInt32 value);
+        void attribute(const string & name, const uno::Any aAny);
         void addTag(XMLTag::Pointer_t pTag);
         void chars(const string & chars);
         void chars(const ::rtl::OUString & chars);
@@ -147,6 +151,8 @@ namespace writerfilter
         virtual void attribute(Id name, Value & val);
         virtual void sprm(Sprm & sprm);
     };
+
+WRITERFILTER_DLLPUBLIC XMLTag::Pointer_t unoPropertySetToTag(uno::Reference<beans::XPropertySet> rPropSet);
 }
 
 #endif // DEBUG
diff --git a/writerfilter/source/resourcemodel/TagLogger.cxx b/writerfilter/source/resourcemodel/TagLogger.cxx
index fa61d7635efb..f19bef7c01d1 100644
--- a/writerfilter/source/resourcemodel/TagLogger.cxx
+++ b/writerfilter/source/resourcemodel/TagLogger.cxx
@@ -52,11 +52,65 @@ namespace writerfilter
 
     void XMLTag::addAttr(string sName, sal_uInt32 nValue)
     {
-        char buffer[256];
+        static char buffer[256];
         snprintf(buffer, sizeof(buffer), "%" SAL_PRIdINT32, nValue);
         addAttr(sName, buffer);
     }
 
+void XMLTag::addAttr(string sName, uno::Any aAny)
+{
+    string aTmpStrInt;
+    string aTmpStrFloat;
+    string aTmpStrString;
+
+    static char buffer[256];
+
+    try
+    {
+        sal_Int32 nInt = 0;
+        aAny >>= nInt;
+
+        snprintf(buffer, sizeof(buffer), "%" SAL_PRIdINT32,
+                 nInt);
+
+        aTmpStrInt = buffer;
+    }
+    catch (uno::Exception aExcept)
+    {
+        aTmpStrInt = "exception";
+    }
+
+    try
+    {
+        float nFloat = 0.0;
+        aAny >>= nFloat;
+
+        snprintf(buffer, sizeof(buffer), "%f",
+                 nFloat);
+
+        aTmpStrFloat = buffer;
+    }
+    catch (uno::Exception aExcept)
+    {
+        aTmpStrFloat = "exception";
+    }
+
+    try
+    {
+        ::rtl::OUString aStr;
+        aAny >>= aStr;
+
+        aTmpStrString = OUStringToOString(aStr, RTL_TEXTENCODING_ASCII_US).getStr();
+    }
+    catch (uno::Exception aExcept)
+    {
+        aTmpStrString = "exception";
+    }
+
+    addAttr(sName, "i:" + aTmpStrInt + " f:" + aTmpStrFloat + " s:" +
+            aTmpStrString);
+}
+
     void XMLTag::addTag(XMLTag::Pointer_t pTag)
     {
         if (pTag != XMLTag::Pointer_t())
@@ -65,9 +119,14 @@ namespace writerfilter
 
     void XMLTag::chars(const string & rChars)
     {
-        mChars = rChars;
+        mChars += rChars;
     }
 
+void XMLTag::chars(const ::rtl::OUString & rChars)
+{
+    chars(OUStringToOString(rChars, RTL_TEXTENCODING_ASCII_US).getStr());
+}
+
     const string & XMLTag::getTag() const
     {
         return mTag;
@@ -240,6 +299,11 @@ namespace writerfilter
         currentTag()->addAttr(name, value);
     }
 
+void TagLogger::attribute(const string & name, const uno::Any aAny)
+{
+    currentTag()->addAttr(name, aAny);
+}
+
     void TagLogger::addTag(XMLTag::Pointer_t pTag)
     {
         currentTag()->addTag(pTag);
@@ -365,5 +429,39 @@ namespace writerfilter
     }
 
 
+XMLTag::Pointer_t unoPropertySetToTag(uno::Reference<beans::XPropertySet> rPropSet)
+{
+    uno::Reference<beans::XPropertySetInfo> xPropSetInfo(rPropSet->getPropertySetInfo());
+    uno::Sequence<beans::Property> aProps(xPropSetInfo->getProperties());
+
+    XMLTag::Pointer_t pResult(new XMLTag("unoPropertySet"));
+
+    for (int i = 0; i < aProps.getLength(); ++i)
+    {
+        XMLTag::Pointer_t pPropTag(new XMLTag("property"));
+
+        ::rtl::OUString sName(aProps[i].Name);
+
+        pPropTag->addAttr("name", sName);
+        try
+        {
+            pPropTag->addAttr("value", rPropSet->getPropertyValue(sName));
+        }
+        catch (uno::Exception aException)
+        {
+            XMLTag::Pointer_t pException(new XMLTag("exception"));
+
+            pException->chars("getPropertyValue(\"");
+            pException->chars(sName);
+            pException->chars("\")");
+            pPropTag->addTag(pException);
+        }
+
+        pResult->addTag(pPropTag);
+    }
+
+    return pResult;
+}
+
 }
 #endif // DEBUG
-- 
cgit 


From 4c6087d46f3e6e655dfb5d4be64be7651ed9dabc Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 18 May 2010 15:24:16 +0200
Subject: writerfilter08: ooxml: resolve documentProtection

---
 writerfilter/source/ooxml/factoryimpl_ns.xsl | 9 +++++++++
 writerfilter/source/ooxml/model.xml          | 2 +-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/writerfilter/source/ooxml/factoryimpl_ns.xsl b/writerfilter/source/ooxml/factoryimpl_ns.xsl
index 69bc3281e3fa..533c3d16ae23 100644
--- a/writerfilter/source/ooxml/factoryimpl_ns.xsl
+++ b/writerfilter/source/ooxml/factoryimpl_ns.xsl
@@ -150,6 +150,7 @@ for a rng:define
 
  -->
 <xsl:template name="factoryattributetoresourcemapinner">
+  <xsl:variable name="defname" select="@name"/>
   <xsl:for-each select=".//rng:ref[not(ancestor::rng:element or ancestor::rng:attribute)]">
     <xsl:variable name="name" select="@name"/>
     <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$name]">
@@ -158,6 +159,11 @@ for a rng:define
   </xsl:for-each>
 
   <xsl:for-each select=".//rng:attribute">
+    <xsl:if test="position()=1">
+      <xsl:text>
+      // </xsl:text>
+      <xsl:value-of select="$defname"/>
+    </xsl:if>
     <xsl:variable name="mynsid" select="generate-id(ancestor::namespace)"/>
     <xsl:variable name="resource">
       <xsl:for-each select="rng:ref">
@@ -168,6 +174,9 @@ for a rng:define
       <xsl:for-each select=".//rng:text">
         <xsl:text>String</xsl:text>
       </xsl:for-each>
+      <xsl:for-each select=".//rng:data[@type='base64Binary']">
+        <xsl:text>String</xsl:text>
+      </xsl:for-each>
     </xsl:variable>
 
     <xsl:variable name="refdefine1">
diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
index 64a1035abe85..19ca07df9251 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -14106,7 +14106,7 @@
           <xs:documentation>Cryptographic Hashing Algorithm</xs:documentation>
         </attribute>
         <attribute name="cryptSpinCount">
-          <text/>
+          <ref name="ST_DecimalNumber"/>
           <xs:documentation>Iterations to Run Hashing Algorithm</xs:documentation>
         </attribute>
         <attribute name="cryptProvider">
-- 
cgit 


From f5559a4812645b2a7da9932e6cc7ac0c3e621c17 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 18 May 2010 15:26:20 +0200
Subject: writerfilter08: PropertyMap::toTag(): consider unsigned, float and
 string values

---
 writerfilter/source/dmapper/PropertyMap.cxx | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx
index 9033f30e3f71..ee420d96ff1d 100644
--- a/writerfilter/source/dmapper/PropertyMap.cxx
+++ b/writerfilter/source/dmapper/PropertyMap.cxx
@@ -153,6 +153,18 @@ XMLTag::Pointer_t PropertyMap::toTag() const
                     sal_Int32 aInt;
                     aMapIter->second >>= aInt;
                     pTag->addAttr("value", aInt);
+
+                    sal_uInt32 auInt;
+                    aMapIter->second >>= auInt;
+                    pTag->addAttr("unsignedValue", auInt);
+
+                    float aFloat;
+                    aMapIter->second >>= aFloat;
+                    pTag->addAttr("floatValue", aFloat);
+
+                    ::rtl::OUString aStr;
+                    aMapIter->second >>= auInt;
+                    pTag->addAttr("stringValue", aStr);
                 }
                 catch (...) {
                 }
-- 
cgit 


From d009c2a0f84d28a9d3e922b38593efd37e2d42b9 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 18 May 2010 15:37:25 +0200
Subject: writerfilter08: debugging code

---
 writerfilter/source/dmapper/StyleSheetTable.cxx | 49 +++++++++++++++++++------
 1 file changed, 38 insertions(+), 11 deletions(-)

diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index 4613582b8715..2bd8f8fbbe3b 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -680,20 +680,22 @@ void StyleSheetTable::sprm(Sprm & rSprm)
         break;
         case NS_ooxml::LN_CT_Style_pPr:
         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+            // no break
         case NS_ooxml::LN_CT_Style_rPr:
         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+            // no break
         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 );
+                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( );
+                    m_pImpl->m_rDMapper.PopStyleSheetProperties( );
+                }
             }
-    }
 
 #ifdef DEBUG_DOMAINMAPPER
     dmapper_logger->endElement("StyleSheetTable.sprm");
@@ -961,11 +963,24 @@ void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable )
                         PropValVector aSortedPropVals;
                         for( sal_Int32 nProp = 0; nProp < aPropValues.getLength(); ++nProp)
                         {
-                            // Don't add the style name properties
+#ifdef DEBUG_DOMAINMAPPER
+                            dmapper_logger->startElement("propvalue");
+                            dmapper_logger->attribute("name", aPropValues[nProp].Name);
+                            dmapper_logger->attribute("value", aPropValues[nProp].Value);
+#endif
+                                // 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 )
+                            if ( !bInsert && !bIsParaStyleName && !bIsCharStyleName )
+                            {
+#ifdef DEBUG_DOMAINMAPPER
+                                dmapper_logger->element("insert");
+#endif
                                 aSortedPropVals.Insert( aPropValues[nProp] );
+                            }
+#ifdef DEBUG_DOMAINMAPPER
+                            dmapper_logger->endElement("propvalue");
+#endif
                         }
                         if(bAddFollowStyle)
                         {
@@ -1014,7 +1029,15 @@ void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable )
                         }
                     }
                     if(bInsert)
+                    {
                         xStyles->insertByName( sConvertedStyleName, uno::makeAny( xStyle) );
+#ifdef DEBUG_DOMAINMAPPER
+                        uno::Reference<beans::XPropertySet> xProps(xStyle, uno::UNO_QUERY);
+                        dmapper_logger->startElement("insertStyle");
+                        dmapper_logger->addTag(unoPropertySetToTag(xProps));
+                        dmapper_logger->endElement("insertStyle");
+#endif
+                    }
                 }
                 ++aIt;
             }
@@ -1025,6 +1048,10 @@ void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable )
         (void)rEx;
         OSL_ENSURE( false, "Styles could not be imported completely");
     }
+
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->endElement("applyStyleSheets");
+#endif
 }
 /*-- 22.06.2006 15:56:56---------------------------------------------------
 
-- 
cgit 


From 5963ef17ca2f1a3d103024685b40d06a0563670e Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 18 May 2010 15:42:23 +0200
Subject: writerfilter08: #b6950197#: ApplyStyleSheets: apply style no matter
 if it is newly inserted or not

---
 writerfilter/source/dmapper/StyleSheetTable.cxx | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index 2bd8f8fbbe3b..9624f061e7a0 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -685,17 +685,26 @@ void StyleSheetTable::sprm(Sprm & rSprm)
         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
             // no break
         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 );
+
+                    PropertyMapPtr pProps(new PropertyMap());
+                    m_pImpl->m_rDMapper.sprm( rSprm, pProps );
+
+                    m_pImpl->m_pCurrentEntry->pProperties->insert(pProps);
+
                     m_pImpl->m_rDMapper.PopStyleSheetProperties( );
                 }
             }
+            break;
+    }
 
 #ifdef DEBUG_DOMAINMAPPER
     dmapper_logger->endElement("StyleSheetTable.sprm");
@@ -971,7 +980,7 @@ void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable )
                                 // 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 )
+                            if ( !bIsParaStyleName && !bIsCharStyleName )
                             {
 #ifdef DEBUG_DOMAINMAPPER
                                 dmapper_logger->element("insert");
-- 
cgit 


From bef85918411cc9e73eb7a27b0b41848e29321ece Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 18 May 2010 15:42:52 +0200
Subject: writerfilter08: debugging code

---
 writerfilter/source/dmapper/StyleSheetTable.cxx | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index 9624f061e7a0..33aaf17705fa 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -807,6 +807,10 @@ uno::Sequence< ::rtl::OUString > PropValVector::getNames()
   -----------------------------------------------------------------------*/
 void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable )
 {
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->startElement("applyStyleSheets");
+#endif
+
     try
     {
         uno::Reference< style::XStyleFamiliesSupplier > xStylesSupplier( m_pImpl->m_xTextDocument, uno::UNO_QUERY_THROW );
-- 
cgit 


From b15b04d8cc4bcf66447d19eaecbc89e2a2456b10 Mon Sep 17 00:00:00 2001
From: hb <hbrinkm@openoffice.org>
Date: Wed, 19 May 2010 11:26:41 +0200
Subject: writerfilter08: compiling issues on unxlngi6

---
 writerfilter/source/dmapper/DomainMapper_Impl.cxx | 36 +++++++++++------------
 writerfilter/source/dmapper/FFDataHandler.cxx     |  4 +--
 2 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 3b024fee2f2c..8578a86d95e9 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -2533,8 +2533,8 @@ void DomainMapper_Impl::handleAutoNum
 void DomainMapper_Impl::handleAuthor
     (FieldContextPtr pContext,
     PropertyNameSupplier& rPropNameSupplier,
-    uno::Reference< uno::XInterface > & xFieldInterface,
-    uno::Reference< beans::XPropertySet > xFieldProperties)
+     uno::Reference< uno::XInterface > & /*xFieldInterface*/,
+     uno::Reference< beans::XPropertySet > xFieldProperties)
 {
     xFieldProperties->setPropertyValue
         ( rPropNameSupplier.GetName(PROP_FULL_NAME), uno::makeAny( true ));
@@ -2649,8 +2649,8 @@ void DomainMapper_Impl::handleAuthor
 void DomainMapper_Impl::handleToc
     (FieldContextPtr pContext,
     PropertyNameSupplier& rPropNameSupplier,
-    uno::Reference< uno::XInterface > & xFieldInterface,
-    uno::Reference< beans::XPropertySet > xFieldProperties,
+     uno::Reference< uno::XInterface > & /*xFieldInterface*/,
+     uno::Reference< beans::XPropertySet > /*xFieldProperties*/,
     const ::rtl::OUString & sTOCServiceName)
 {
     ::rtl::OUString sValue;
@@ -3028,40 +3028,40 @@ void DomainMapper_Impl::CloseFieldCommand()
                     {
                         ::std::vector<rtl::OUString> aParts = pContext->GetCommandParts();
                         ::std::vector<rtl::OUString>::const_iterator aItEnd = aParts.end();
-                        ::std::vector<rtl::OUString>::const_iterator aIt = aParts.begin();
+                        ::std::vector<rtl::OUString>::const_iterator aPartIt = aParts.begin();
 
                         OUString sURL;
 
-                        while (aIt != aItEnd)
+                        while (aPartIt != aItEnd)
                         {
-                            if (aIt->equalsAscii("\\l"))
+                            if (aPartIt->equalsAscii("\\l"))
                             {
-                                aIt++;
+                                aPartIt++;
 
-                                if (aIt == aItEnd)
+                                if (aPartIt == aItEnd)
                                     break;
 
                                 sURL = OUString('#');
-                                sURL += *aIt;
+                                sURL += *aPartIt;
                             }
-                            else if (aIt->equalsAscii("\\m") ||
-                                     aIt->equalsAscii("\\n"))
+                            else if (aPartIt->equalsAscii("\\m") ||
+                                     aPartIt->equalsAscii("\\n"))
                             {
                             }
-                            else if (aIt->equalsAscii("\\o") ||
-                                     aIt->equalsAscii("\\t"))
+                            else if (aPartIt->equalsAscii("\\o") ||
+                                     aPartIt->equalsAscii("\\t"))
                             {
-                                aIt++;
+                                aPartIt++;
 
-                                if (aIt == aItEnd)
+                                if (aPartIt == aItEnd)
                                     break;
                             }
                             else
                             {
-                                sURL = *aIt;
+                                sURL = *aPartIt;
                             }
 
-                            aIt++;
+                            aPartIt++;
                         }
 
                         if (sURL.getLength() > 0)
diff --git a/writerfilter/source/dmapper/FFDataHandler.cxx b/writerfilter/source/dmapper/FFDataHandler.cxx
index f90f1eaf4f9b..9f9430401161 100644
--- a/writerfilter/source/dmapper/FFDataHandler.cxx
+++ b/writerfilter/source/dmapper/FFDataHandler.cxx
@@ -423,7 +423,7 @@ void FFDataHandler::sprm(Sprm & r_Sprm)
     default:
 #ifdef DEBUG_DOMAINMAPPER
         dmapper_logger->element("unhandled");
-#endif DEBUG_DOMAINMAPPER
+#endif
         break;
     }
 #ifdef DEBUG_DOMAINMAPPER
@@ -475,7 +475,7 @@ void FFDataHandler::attribute(Id name, Value & val)
     default:
 #ifdef DEBUG_DOMAINMAPPER
         dmapper_logger->element("unhandled");
-#endif DEBUG_DOMAINMAPPER
+#endif
         break;
     }
 }
-- 
cgit 


From d06a40321a453a5ac1cf57522fa6a973eec8e46a Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 19 May 2010 14:15:48 +0200
Subject: writerfilter08: FormControlHelper::createCheckbox: resolved warning

---
 writerfilter/source/dmapper/FormControlHelper.cxx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/writerfilter/source/dmapper/FormControlHelper.cxx b/writerfilter/source/dmapper/FormControlHelper.cxx
index f14da458cea3..eebf921f4963 100644
--- a/writerfilter/source/dmapper/FormControlHelper.cxx
+++ b/writerfilter/source/dmapper/FormControlHelper.cxx
@@ -183,7 +183,7 @@ bool FormControlHelper::createCheckbox(uno::Reference<text::XTextRange> xTextRan
         try
         {
             static ::rtl::OUString sCharHeight(RTL_CONSTASCII_USTRINGPARAM("CharHeight"));
-            float fCheckBoxHeight;
+            float fCheckBoxHeight = 0.0;
             xTextRangeProps->getPropertyValue(sCharHeight) >>= fCheckBoxHeight;
             nCheckBoxHeight = floor(fCheckBoxHeight * 35.3);
         }
-- 
cgit 


From 918910ed9d6c0646f8847be6da4e3fc9749ef6b4 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 19 May 2010 14:17:43 +0200
Subject: writerfilter08: debugging code

---
 writerfilter/source/dmapper/DomainMapper.cxx | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index ad8d958be769..4280e045c123 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -2195,7 +2195,7 @@ void DomainMapper::sprm(Sprm & rSprm)
 void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmType )
 {
 #ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("sprm");
+    dmapper_logger->startElement("DomainMapper.sprm");
     dmapper_logger->chars(rSprm.toString());
 #endif
     OSL_ENSURE(rContext.get(), "PropertyMap has to be valid!");
@@ -2867,6 +2867,13 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
                         /* WRITERFILTERSTATUS: */
                     {
                         uno::Any aBold( uno::makeAny( nIntValue ? awt::FontWeight::BOLD : awt::FontWeight::NORMAL ) );
+
+#ifdef DEBUG_DOMAINMAPPER
+                        dmapper_logger->startElement("charWeight");
+                        dmapper_logger->attribute("weight", nIntValue ? awt::FontWeight::BOLD : awt::FontWeight::NORMAL);
+                        dmapper_logger->endElement("charWeight");
+#endif
+
                         rContext->Insert(ePropertyId, true, aBold );
                         if( nSprmId != NS_sprm::LN_CFBoldBi ) // sprmCFBoldBi
                             rContext->Insert(PROP_CHAR_WEIGHT_ASIAN, true, aBold );
@@ -4231,7 +4238,8 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
     }
 
 #ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("sprm");
+    dmapper_logger->addTag(rContext->toTag());
+    dmapper_logger->endElement("DomainMapper.sprm");
 #endif
 }
 /*-- 09.06.2006 09:52:13---------------------------------------------------
@@ -4241,13 +4249,13 @@ void DomainMapper::entry(int /*pos*/,
                          writerfilter::Reference<Properties>::Pointer_t ref)
 {
 #ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("entry");
+    dmapper_logger->startElement("DomainMapper.entry");
 #endif
 
     ref->resolve(*this);
 
 #ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("entry");
+    dmapper_logger->endElement("DomainMapper.entry");
 #endif
 }
 /*-- 09.06.2006 09:52:13---------------------------------------------------
-- 
cgit 


From 943ea0d09c655b4c2ed9e01655fc8b817aefe8f3 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 20 May 2010 12:51:20 +0200
Subject: writerfilter08: SettingsTable_Impl: members for documentProtection

---
 writerfilter/source/dmapper/SettingsTable.cxx | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/writerfilter/source/dmapper/SettingsTable.cxx b/writerfilter/source/dmapper/SettingsTable.cxx
index 10fc83e22dea..812c7a62a068 100755
--- a/writerfilter/source/dmapper/SettingsTable.cxx
+++ b/writerfilter/source/dmapper/SettingsTable.cxx
@@ -57,6 +57,21 @@ struct SettingsTable_Impl
     bool                m_bNoPunctuationKerning;
     bool                m_doNotIncludeSubdocsInStats; // Do Not Include Content in Text Boxes, Footnotes, and Endnotes in Document Statistics)
     bool                m_bRecordChanges;
+    int                 m_nEdit;
+    bool                m_bFormatting;
+    bool                m_bEnforcement;
+    int                 m_nCryptProviderType;
+    int                 m_nCryptAlgorithmClass;
+    int                 m_nCryptAlgorithmType;
+    ::rtl::OUString     m_sCryptAlgorithmSid;
+    int                 m_nCryptSpinCount;
+    ::rtl::OUString     m_sCryptProvider;
+    ::rtl::OUString     m_sAlgIdExt;
+    ::rtl::OUString     m_sAlgIdExtSource;
+    ::rtl::OUString     m_sCryptProviderTypeExt;
+    ::rtl::OUString     m_sCryptProviderTypeExtSource;
+    ::rtl::OUString     m_sHash;
+    ::rtl::OUString     m_sSalt;
 
     SettingsTable_Impl( DomainMapper& rDMapper, const uno::Reference< lang::XMultiServiceFactory > xTextFactory ) :
     m_rDMapper( rDMapper )
@@ -66,6 +81,13 @@ struct SettingsTable_Impl
     , m_bNoPunctuationKerning(false)
     , m_doNotIncludeSubdocsInStats(false)
     , m_bRecordChanges(false)
+    , m_nEdit(NS_ooxml::LN_Value_wordprocessingml_ST_DocProtect_none)
+    , m_bFormatting(false)
+    , m_bEnforcement(false)
+    , m_nCryptProviderType(NS_ooxml::LN_Value_wordprocessingml_ST_CryptProv_rsaAES)
+    , m_nCryptAlgorithmClass(NS_ooxml::LN_Value_wordprocessingml_ST_AlgClass_hash)
+    , m_nCryptAlgorithmType(NS_ooxml::LN_Value_wordprocessingml_ST_AlgType_typeAny)
+    , m_nCryptSpinCount(0)
     {}
 
     ListTablePtr GetListTable()
@@ -208,7 +230,8 @@ void SettingsTable::sprm(Sprm& rSprm)
     }
 }
 
-void SettingsTable::entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
+void SettingsTable::entry(int /*pos*/, writerfilte        break;
+r::Reference<Properties>::Pointer_t ref)
 {
     // printf ( "SettingsTable::entry\n");
     ref->resolve(*this);
-- 
cgit 


From 279f97e712f0d00b1800f9cca96fbd56d765711a Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 20 May 2010 13:10:04 +0200
Subject: writerfilter08: debug output for SettingsTable

---
 writerfilter/source/dmapper/SettingsTable.cxx | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/writerfilter/source/dmapper/SettingsTable.cxx b/writerfilter/source/dmapper/SettingsTable.cxx
index 10fc83e22dea..1b74465dd673 100755
--- a/writerfilter/source/dmapper/SettingsTable.cxx
+++ b/writerfilter/source/dmapper/SettingsTable.cxx
@@ -36,6 +36,11 @@
 #include <ConversionHelper.hxx>
 #include <rtl/ustring.hxx>
 
+#ifdef DEBUG_DOMAINMAPPER
+#include <resourcemodel/QNameToString.hxx>
+#include "dmapperLoggers.hxx"
+#endif
+
 namespace writerfilter {
 namespace dmapper
 {
@@ -88,8 +93,15 @@ SettingsTable::~SettingsTable()
     delete m_pImpl;
 }
 
-void SettingsTable::attribute(Id /*Name*/, Value & val)
+void SettingsTable::attribute(Id nName, Value & val)
 {
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->startElement("SettingsTable.attribute");
+    dmapper_logger->attribute("name", (*QNameToString::Instance())(nName));
+    dmapper_logger->attribute("value", val.toString());
+#endif
+
+    (void) nName;
     int nIntValue = val.getInt();
     (void)nIntValue;
     ::rtl::OUString sValue = val.getString();
@@ -108,10 +120,18 @@ void SettingsTable::attribute(Id /*Name*/, Value & val)
     }
     }
 #endif
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->endElement("SettingsTable.attribute");
+#endif
 }
 
 void SettingsTable::sprm(Sprm& rSprm)
 {
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->startElement("SettingsTable.sprm");
+    dmapper_logger->chars(rSprm.toString());
+#endif
+
     sal_uInt32 nSprmId = rSprm.getId();
 
     Value::Pointer_t pValue = rSprm.getValue();
@@ -206,6 +226,10 @@ void SettingsTable::sprm(Sprm& rSprm)
         OSL_ENSURE( false, "unknown sprmid in SettingsTable::sprm()");
     }
     }
+
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->endElement("SettingsTable.sprm");
+#endif
 }
 
 void SettingsTable::entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
-- 
cgit 


From 17fe50c993de7bd11b6418b936312bf27db20b84 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 20 May 2010 16:00:10 +0200
Subject: writerfilter08: move resolveSprmProps and resolveAttributeProperties
 to namespace resourcemodel

---
 writerfilter/inc/dmapper/DomainMapper.hxx          |  2 -
 .../inc/resourcemodel/ResourceModelHelper.hxx      | 40 +++++++++++++++++
 writerfilter/source/dmapper/DomainMapper.cxx       | 52 +++++++++-------------
 writerfilter/source/dmapper/SettingsTable.cxx      |  9 ++++
 .../source/resourcemodel/ResourceModelHelper.cxx   | 48 ++++++++++++++++++++
 writerfilter/source/resourcemodel/makefile.mk      |  1 +
 6 files changed, 119 insertions(+), 33 deletions(-)
 create mode 100644 writerfilter/inc/resourcemodel/ResourceModelHelper.hxx
 create mode 100644 writerfilter/source/resourcemodel/ResourceModelHelper.cxx

diff --git a/writerfilter/inc/dmapper/DomainMapper.hxx b/writerfilter/inc/dmapper/DomainMapper.hxx
index 76d1fb046354..994d4ab4adb8 100644
--- a/writerfilter/inc/dmapper/DomainMapper.hxx
+++ b/writerfilter/inc/dmapper/DomainMapper.hxx
@@ -140,8 +140,6 @@ private:
     rtl::OUString getBracketStringFromEnum(const sal_Int32 nIntValue, const bool bIsPrefix = true);
     com::sun::star::style::TabAlign getTabAlignFromValue(const sal_Int32 nIntValue);
     sal_Unicode getFillCharFromValue(const sal_Int32 nIntValue);
-    void resolveAttributeProperties(Value & val);
-    void resolveSprmProps(Sprm & sprm_);
     sal_Int32 mnBackgroundColor;
     bool mbIsHighlightSet;
 };
diff --git a/writerfilter/inc/resourcemodel/ResourceModelHelper.hxx b/writerfilter/inc/resourcemodel/ResourceModelHelper.hxx
new file mode 100644
index 000000000000..c1c500545055
--- /dev/null
+++ b/writerfilter/inc/resourcemodel/ResourceModelHelper.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_RESOURCE_MODEL_HELPER_HXX
+#define INCLUDED_RESOURCE_MODEL_HELPER_HXX
+
+#include <resourcemodel/WW8ResourceModel.hxx>
+
+namespace writerfilter {
+namespace resourcemodel {
+
+void WRITERFILTER_DLLPUBLIC resolveSprmProps(Properties & rHandler, Sprm & rSprm);
+void  WRITERFILTER_DLLPUBLIC resolveAttributeProperties(Properties & rHandler, Value & rValue);
+
+}}
+
+#endif // INCLUDED_RESOURCE_MODEL_HELPER_HXX
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 4280e045c123..f8d3bab02aff 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -27,6 +27,7 @@
 #include "PageBordersHandler.hxx"
 
 #include <dmapper/DomainMapper.hxx>
+#include <resourcemodel/ResourceModelHelper.hxx>
 #include <DomainMapper_Impl.hxx>
 #include <ConversionHelper.hxx>
 #include <ThemeTable.hxx>
@@ -98,6 +99,10 @@ using namespace ::com::sun::star;
 using namespace ::rtl;
 
 namespace writerfilter {
+
+using resourcemodel::resolveSprmProps;
+using resourcemodel::resolveAttributeProperties;
+
 namespace dmapper{
 
 #ifdef DEBUG_DOMAINMAPPER
@@ -1462,7 +1467,7 @@ void DomainMapper::attribute(Id nName, Value & val)
         case NS_rtf::LN_sed:
             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
             //section properties
-            resolveAttributeProperties(val);
+            resolveAttributeProperties(*this, val);
             break;
         case NS_rtf::LN_tbdAdd:
             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
@@ -2313,7 +2318,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
             }
 
             //create a new tab stop property - this is done with the contained properties
-            resolveSprmProps(rSprm);
+            resolveSprmProps(*this, rSprm);
             //add this property
             rContext->Insert(PROP_PARA_TAB_STOPS, true, uno::makeAny( m_pImpl->GetCurrentTabStopAndClear()));
         }
@@ -2446,7 +2451,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
 
     case NS_ooxml::LN_CT_PrBase_pBdr: //paragraph border
         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
-        resolveSprmProps(rSprm);
+        resolveSprmProps(*this, rSprm);
     break;
         /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
     case NS_sprm::LN_PBrcTop:   // sprmPBrcTop
@@ -2716,7 +2721,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
         break;  // sprmCChs
     case NS_sprm::LN_CSymbol: // sprmCSymbol
         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
-        resolveSprmProps(rSprm); //resolves LN_FONT and LN_CHAR
+        resolveSprmProps(*this, rSprm); //resolves LN_FONT and LN_CHAR
     break;
     case NS_sprm::LN_CFOle2:
         /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
@@ -3759,11 +3764,11 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
         break;//undocumented section properties
     case NS_sprm::LN_CEastAsianLayout:
         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
-        resolveSprmProps(rSprm);
+        resolveSprmProps(*this, rSprm);
         break;
     case NS_ooxml::LN_CT_Tabs_tab:
         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
-        resolveSprmProps(rSprm);
+        resolveSprmProps(*this, rSprm);
         m_pImpl->IncorporateTabStop(m_pImpl->m_aCurrentTabStop);
         m_pImpl->m_aCurrentTabStop = DeletableTabStop();
     break;
@@ -3780,7 +3785,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
                 m_pImpl->InitTabStopFromStyle( aStyleTabStops );
             }
         }
-        resolveSprmProps(rSprm);
+        resolveSprmProps(*this, rSprm);
         rContext->Insert(PROP_PARA_TAB_STOPS, true, uno::makeAny( m_pImpl->GetCurrentTabStopAndClear()));
     }
     break;
@@ -3819,19 +3824,19 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
     case NS_ooxml::LN_CT_PPrBase_numPr:
         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
-        resolveSprmProps(rSprm);
+        resolveSprmProps(*this, rSprm);
     break;
     case NS_ooxml::LN_EG_SectPrContents_footnotePr:
         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
     case NS_ooxml::LN_EG_SectPrContents_endnotePr:
         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
         m_pImpl->SetInFootnoteProperties( NS_ooxml::LN_EG_SectPrContents_footnotePr == nSprmId );
-        resolveSprmProps(rSprm);
+        resolveSprmProps(*this, rSprm);
     break;
     case NS_ooxml::LN_EG_SectPrContents_lnNumType:
         /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
     {
-        resolveSprmProps(rSprm);
+        resolveSprmProps(*this, rSprm);
         LineNumberSettings aSettings = m_pImpl->GetLineNumberSettings();
         aSettings.bIsOn = true;
         m_pImpl->SetLineNumberSettings( aSettings );
@@ -3868,7 +3873,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
         {
             //TODO: What about style sheet import of frame properties
         }
-        resolveSprmProps(rSprm);
+        resolveSprmProps(*this, rSprm);
     }
     break;
     case NS_ooxml::LN_EG_SectPrContents_pgSz:
@@ -3880,7 +3885,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
             CT_PageSz.h = aLetter.getHeight();
         }
         CT_PageSz.orient = false;
-        resolveSprmProps(rSprm);
+        resolveSprmProps(*this, rSprm);
         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
         if(pSectionContext)
         {
@@ -3894,7 +3899,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
     case NS_ooxml::LN_EG_SectPrContents_pgMar:
         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
         m_pImpl->InitPageMargins();
-        resolveSprmProps(rSprm);
+        resolveSprmProps(*this, rSprm);
         OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
         if(pSectionContext)
         {
@@ -3950,7 +3955,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
     }
     break;
     case NS_ooxml::LN_EG_SectPrContents_docGrid:
-        resolveSprmProps(rSprm);
+        resolveSprmProps(*this, rSprm);
     break;
     case NS_ooxml::LN_EG_SectPrContents_pgBorders:
     {
@@ -4004,7 +4009,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
     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
+        resolveSprmProps(*this, rSprm);//contains LN_CT_TblCellMar_top, LN_CT_TblCellMar_left, LN_CT_TblCellMar_bottom, LN_CT_TblCellMar_right
     }
     break;
     case NS_ooxml::LN_CT_TblCellMar_top:
@@ -4148,7 +4153,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
         /* WRITERFILTERSTATUS: done: 100, planned: 5, spent: 0 */
     {
         m_pImpl->AddNewRedline( );
-        resolveSprmProps( rSprm );
+        resolveSprmProps(*this, rSprm );
         // now the properties author, date and id should be available
         sal_Int32 nToken = m_pImpl->GetCurrentRedlineToken();
         switch( nToken & 0xffff )
@@ -4905,21 +4910,6 @@ rtl::OUString DomainMapper::getBracketStringFromEnum(const sal_Int32 nIntValue,
     }
 }
 
-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)
diff --git a/writerfilter/source/dmapper/SettingsTable.cxx b/writerfilter/source/dmapper/SettingsTable.cxx
index 2c3395e51689..bc1a86611889 100755
--- a/writerfilter/source/dmapper/SettingsTable.cxx
+++ b/writerfilter/source/dmapper/SettingsTable.cxx
@@ -28,6 +28,7 @@
  *
  ************************************************************************/
 
+#include <resourcemodel/ResourceModelHelper.hxx>
 #include <SettingsTable.hxx>
 #include <doctok/resourceids.hxx>
 #include <ooxml/resourceids.hxx>
@@ -42,6 +43,9 @@
 #endif
 
 namespace writerfilter {
+
+using resourcemodel::resolveSprmProps;
+
 namespace dmapper
 {
 
@@ -243,6 +247,11 @@ void SettingsTable::sprm(Sprm& rSprm)
         m_pImpl->m_bRecordChanges = bool(rSprm.getValue( )->getInt( ) );
     }
     break;
+    case NS_ooxml::LN_CT_Settings_documentProtection:
+        {
+            resolveSprmProps(*this, rSprm);
+        }
+        break;
     default:
     {
         OSL_ENSURE( false, "unknown sprmid in SettingsTable::sprm()");
diff --git a/writerfilter/source/resourcemodel/ResourceModelHelper.cxx b/writerfilter/source/resourcemodel/ResourceModelHelper.cxx
new file mode 100644
index 000000000000..fee286fb4570
--- /dev/null
+++ b/writerfilter/source/resourcemodel/ResourceModelHelper.cxx
@@ -0,0 +1,48 @@
+/*************************************************************************
+ *
+ * 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/ResourceModelHelper.hxx"
+
+namespace writerfilter {
+namespace resourcemodel {
+
+void resolveSprmProps(Properties & rHandler, Sprm & rSprm)
+{
+    writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+    if( pProperties.get())
+        pProperties->resolve(rHandler);
+}
+
+void resolveAttributeProperties(Properties & rHandler, Value & val)
+{
+    writerfilter::Reference<Properties>::Pointer_t pProperties = val.getProperties();
+    if( pProperties.get())
+        pProperties->resolve(rHandler);
+}
+
+
+}}
diff --git a/writerfilter/source/resourcemodel/makefile.mk b/writerfilter/source/resourcemodel/makefile.mk
index f3869f30611b..bb5bc05ac1bd 100644
--- a/writerfilter/source/resourcemodel/makefile.mk
+++ b/writerfilter/source/resourcemodel/makefile.mk
@@ -54,6 +54,7 @@ SLOFILES= \
     $(SLO)$/resourcemodel.obj \
     $(SLO)$/util.obj \
     $(SLO)$/TagLogger.obj \
+    $(SLO)$/ResourceModelHelper.obj \
     $(SLO)$/WW8Analyzer.obj \
     $(SLO)$/Protocol.obj
 
-- 
cgit 


From e75ef59afc1e65ce18169b9abaafaf2d0c7b2397 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 2 Jun 2010 13:06:30 +0200
Subject: writerfilter08: xmigen.xsl: handle sprms

---
 writerfilter/source/doctok/xmigen.xsl | 72 ++++++++++++++++++++++++++++++++++-
 1 file changed, 71 insertions(+), 1 deletion(-)

diff --git a/writerfilter/source/doctok/xmigen.xsl b/writerfilter/source/doctok/xmigen.xsl
index d6eab5846fd4..f184dcfed4d2 100644
--- a/writerfilter/source/doctok/xmigen.xsl
+++ b/writerfilter/source/doctok/xmigen.xsl
@@ -184,6 +184,76 @@
     </UML:Generalization>
   </xsl:template>
 
+  <xsl:template match="sprm">
+    <xsl:variable name="isww8resource">
+      <xsl:choose>
+        <xsl:when test="count(*) > 0">YES</xsl:when>
+        <xsl:otherwise>NO</xsl:otherwise>
+      </xsl:choose>
+    </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>
+      <xsl:if test="$isww8resource='YES'">
+        <UML:ModelElement.stereotype>
+          <UML:Stereotype xmi.idref="ww8resource"/>
+        </UML:ModelElement.stereotype>
+      </xsl:if>
+      <UML:ModelElement.stereotype>
+        <UML:Stereotype xmi.idref="ww8sprm"/>
+      </UML:ModelElement.stereotype>
+      <xsl:call-template name="taggedvalue">
+        <xsl:with-param name="type">sprmcode</xsl:with-param>
+        <xsl:with-param name="value" select="@code"/>
+      </xsl:call-template>
+      <xsl:call-template name="taggedvalue">
+        <xsl:with-param name="type">sprmid</xsl:with-param>
+        <xsl:with-param name="value" select="@token"/>
+      </xsl:call-template>
+      <xsl:call-template name="taggedvalue">
+        <xsl:with-param name="type">kind</xsl:with-param>
+        <xsl:with-param name="value" select="@kind"/>
+      </xsl:call-template>
+      <xsl:apply-templates select="*"/>
+    </UML:Class>
+    <xsl:if test="$isww8resource='YES'">
+      <xsl:call-template name="generalization">
+        <xsl:with-param name="parent">Properties</xsl:with-param>
+        <xsl:with-param name="child" select="@name"/>
+      </xsl:call-template>
+    </xsl:if>
+  </xsl:template>
+
+  <xsl:template name="generalization">
+    <xsl:param name="parent"/>
+    <xsl:param name="child"/>
+    <UML:Generalization isSpecification="false">
+      <xsl:attribute name="xmi.id">
+	<xsl:value-of select="$child"/>
+	<xsl:text>-</xsl:text>
+	<xsl:value-of select="$parent"/>
+      </xsl:attribute>
+      <UML:Generalization.child>
+	<UML:Class>
+	  <xsl:attribute name="xmi.idref">
+	    <xsl:value-of select="$child"/>
+	  </xsl:attribute>
+	</UML:Class>
+      </UML:Generalization.child>
+      <UML:Generalization.parent>
+	<UML:Class xmi.idref="Properties">
+	  <xsl:attribute name="xmi.idref">
+	    <xsl:value-of select="$parent"/>
+	  </xsl:attribute>
+	</UML:Class>
+      </UML:Generalization.parent>
+    </UML:Generalization>
+  </xsl:template>
+
   <xsl:template name="taggedvalue">
     <xsl:param name="type"/>
     <xsl:param name="value"/>
@@ -278,7 +348,7 @@
 
   <xsl:template match="bitfield">
     <xsl:variable name="offset">
-      <xsl:value-of select="sum(preceding-sibling::*/@size)"/>
+      <xsl:call-template name="calcoffset"/>
     </xsl:variable>
     <xsl:for-each select="bits">
       <xsl:call-template name="bits">
-- 
cgit 


From a57744ade6aaf504daabf85573a3a8b8f22092eb Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 2 Jun 2010 13:12:37 +0200
Subject: writerfilter08: doctok: resolve more table properties (table
 placement/spacing)

---
 writerfilter/source/doctok/resources.xmi | 12634 +++++++++++++++--------------
 1 file changed, 6519 insertions(+), 6115 deletions(-)

diff --git a/writerfilter/source/doctok/resources.xmi b/writerfilter/source/doctok/resources.xmi
index bfb1939a8c74..926e046d37b9 100644
--- a/writerfilter/source/doctok/resources.xmi
+++ b/writerfilter/source/doctok/resources.xmi
@@ -593,4627 +593,21 @@
         </UML:Class>
         <!--Resources-->
         <!--WW8 resources-->
-  <UML:Class xmi.id="DopBase" name="DopBase">
-    <UML:ModelElement.stereotype>
-      <UML:Stereotype xmi.idref="ww8resource"/>
-    </UML:ModelElement.stereotype>
-    <UML:ModelElement.taggedValue>
-      <UML:TaggedValue>
-        <UML:TaggedValue.dataValue>84</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="fFacingPages">
-        <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>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>31</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x80000000</UML:TaggedValue.dataValue>
-            <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:fFacingPages</UML:TaggedValue.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="unused1">
-        <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>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>30</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x40000000</UML:TaggedValue.dataValue>
-            <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</UML:TaggedValue.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="fPMHMainDoc">
-        <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>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>29</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x20000000</UML:TaggedValue.dataValue>
-            <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:fPMHMainDoc</UML:TaggedValue.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="unused2">
-        <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>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>27</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x18000000</UML:TaggedValue.dataValue>
-            <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:unused2</UML:TaggedValue.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="fpc">
-        <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>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>25</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x6000000</UML:TaggedValue.dataValue>
-            <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:fpc</UML:TaggedValue.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="unused3">
-        <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>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>24</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x000000</UML:TaggedValue.dataValue>
-            <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:unused3</UML:TaggedValue.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="unused4">
-        <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>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>16</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0xff0000</UML:TaggedValue.dataValue>
-            <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: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="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="rncFtn">
-        <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>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>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>0xc000</UML:TaggedValue.dataValue>
-            <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:rncFtn</UML:TaggedValue.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="nFtn">
-        <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>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>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>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:nFtn</UML:TaggedValue.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="unused5">
-        <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>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>31</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x80000000</UML:TaggedValue.dataValue>
-            <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</UML:TaggedValue.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="unused6">
-        <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>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>30</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x40000000</UML:TaggedValue.dataValue>
-            <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:unused6</UML:TaggedValue.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="unused7">
-        <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>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>29</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x20000000</UML:TaggedValue.dataValue>
-            <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:unused7</UML:TaggedValue.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="unused8">
-        <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>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>28</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x0000000</UML:TaggedValue.dataValue>
-            <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: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="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="unused9">
-        <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>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>27</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x8000000</UML:TaggedValue.dataValue>
-            <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:unused9</UML:TaggedValue.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="unused10">
-        <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>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>26</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x4000000</UML:TaggedValue.dataValue>
-            <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:unused10</UML:TaggedValue.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="fSplAllDone">
-        <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>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>25</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x2000000</UML:TaggedValue.dataValue>
-            <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:fSplAllDone</UML:TaggedValue.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="fSplAllClean">
-        <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>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>24</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x000000</UML:TaggedValue.dataValue>
-            <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:fSplAllClean</UML:TaggedValue.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="fSplHideErrors">
-        <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>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>23</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x800000</UML:TaggedValue.dataValue>
-            <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:fSplHideErrors</UML:TaggedValue.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="fGramHideErrors">
-        <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>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>22</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x400000</UML:TaggedValue.dataValue>
-            <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:fGramHideErrors</UML:TaggedValue.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="fLabelDoc">
-        <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>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>21</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x200000</UML:TaggedValue.dataValue>
-            <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:fLabelDoc</UML:TaggedValue.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="fHyphCapitals">
-        <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>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>20</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x00000</UML:TaggedValue.dataValue>
-            <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:fHyphCapitals</UML:TaggedValue.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="fAutoHyphen">
-        <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>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>19</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x80000</UML:TaggedValue.dataValue>
-            <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:fAutoHyphen</UML:TaggedValue.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="fFormNoFields">
-        <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>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>18</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x40000</UML:TaggedValue.dataValue>
-            <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:fFormNoFields</UML:TaggedValue.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="fLinkStyles">
-        <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>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>17</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x20000</UML:TaggedValue.dataValue>
-            <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:fLinkStyles</UML:TaggedValue.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="fRevMarking">
-        <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>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>16</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x0000</UML:TaggedValue.dataValue>
-            <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:fRevMarking</UML:TaggedValue.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="unused11">
-        <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>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>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>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>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:unused11</UML:TaggedValue.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="fExactCWords">
-        <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>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>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>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>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:fExactCWords</UML:TaggedValue.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="fPagHidden">
-        <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>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>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>0x2000</UML:TaggedValue.dataValue>
-            <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:fPagHidden</UML:TaggedValue.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="fPagResults">
-        <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>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>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>0x000</UML:TaggedValue.dataValue>
-            <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:fPagResults</UML:TaggedValue.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="fLockAtn">
-        <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>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>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>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>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:fLockAtn</UML:TaggedValue.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="fMirrorMargins">
-        <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>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>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>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>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:fMirrorMargins</UML:TaggedValue.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="fWord97Compat">
-        <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>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>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>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>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:fWord97Compat</UML:TaggedValue.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="unused12">
-        <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>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>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>0x00</UML:TaggedValue.dataValue>
-            <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:unused12</UML:TaggedValue.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="unused13">
-        <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>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>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:unused13</UML:TaggedValue.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="fProtEnabled">
-        <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>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>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:fProtEnabled</UML:TaggedValue.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="fDispFormFldSel">
-        <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>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:fDispFormFldSel</UML:TaggedValue.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="fRMView">
-        <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>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>0x0</UML:TaggedValue.dataValue>
-            <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:fRMView</UML:TaggedValue.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="fRMPrint">
-        <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>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>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>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>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:fRMPrint</UML:TaggedValue.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="fLockVbaProj">
-        <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>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>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>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>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:fLockVbaProj</UML:TaggedValue.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="fLockRev">
-        <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>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>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>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="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:fLockRev</UML:TaggedValue.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="fEmbedFonts">
-        <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>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>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>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:fEmbedFonts</UML:TaggedValue.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="copts60">
-        <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>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/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:copts60</UML:TaggedValue.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="dxaTab">
-        <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>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/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:dxaTab</UML:TaggedValue.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="cpgWebOpt">
-        <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/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:cpgWebOpt</UML:TaggedValue.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="dxaHotZ">
-        <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>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/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:dxaHotZ</UML:TaggedValue.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="cConsecHypLim">
-        <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>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/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:cConsecHypLim</UML:TaggedValue.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="wSpare2">
-        <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>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/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:wSpare2</UML:TaggedValue.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="dttmCreated">
-        <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>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/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:dttmCreated</UML:TaggedValue.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="dttmRevised">
-        <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>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/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:dttmRevised</UML:TaggedValue.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="dttmLastPrint">
-        <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>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/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:dttmLastPrint</UML:TaggedValue.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="nRevision">
-        <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>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/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:nRevision</UML:TaggedValue.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="tmEdited">
-        <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>34</UML:TaggedValue.dataValue>
-            <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="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:tmEdited</UML:TaggedValue.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="cWords">
-        <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>38</UML:TaggedValue.dataValue>
-            <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="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:cWords</UML:TaggedValue.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="cCh">
-        <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>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/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:cCh</UML:TaggedValue.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="cPg">
-        <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>46</UML:TaggedValue.dataValue>
-            <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="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:cPg</UML:TaggedValue.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="cParas">
-        <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>48</UML:TaggedValue.dataValue>
-            <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="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:cParas</UML:TaggedValue.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="rncEdn">
-        <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>52</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="offset"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>30</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0xc0000000</UML:TaggedValue.dataValue>
-            <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:rncEdn</UML:TaggedValue.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="nEdn">
-        <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>52</UML:TaggedValue.dataValue>
-            <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="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0x3fff0000</UML:TaggedValue.dataValue>
-            <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:</UML:TaggedValue.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="epc">
-        <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>52</UML:TaggedValue.dataValue>
-            <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>0xc000</UML:TaggedValue.dataValue>
-            <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:</UML:TaggedValue.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="unused14">
-        <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>52</UML:TaggedValue.dataValue>
-            <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>0x3c00</UML:TaggedValue.dataValue>
-            <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:unused14</UML:TaggedValue.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="unused15">
-        <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>52</UML:TaggedValue.dataValue>
-            <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>0x3c0</UML:TaggedValue.dataValue>
-            <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:unused15</UML:TaggedValue.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="fPrintFormData">
-        <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>52</UML:TaggedValue.dataValue>
-            <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:fPrintFormData</UML:TaggedValue.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="fSaveFormData">
-        <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>52</UML:TaggedValue.dataValue>
-            <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>0x0</UML:TaggedValue.dataValue>
-            <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:fSaveFormData</UML:TaggedValue.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="fShadeFormData">
-        <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>52</UML:TaggedValue.dataValue>
-            <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>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>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:fShadeFormData</UML:TaggedValue.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="fShadeMergeFields">
-        <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>52</UML:TaggedValue.dataValue>
-            <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>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>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:fShadeMergeFields</UML:TaggedValue.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="reserved2">
-        <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>52</UML:TaggedValue.dataValue>
-            <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>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="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:reserved2</UML:TaggedValue.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="fIncludeSubdocsInStats">
-        <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>52</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="offset"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </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>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:fIncludeSubdocsInStats</UML:TaggedValue.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="cLines">
-        <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>56</UML:TaggedValue.dataValue>
-            <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="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:cLines</UML:TaggedValue.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="cWordsWithSubdocs">
-        <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>60</UML:TaggedValue.dataValue>
-            <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="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:cWordsWithSubdocs</UML:TaggedValue.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="cChWithSubdocs">
-        <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>64</UML:TaggedValue.dataValue>
-            <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="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:cChWithSubdocs</UML:TaggedValue.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="cPgWithSubdocs">
-        <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>68</UML:TaggedValue.dataValue>
-            <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="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:cPgWithSubdocs</UML:TaggedValue.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="cParasWithSubdocs">
-        <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>70</UML:TaggedValue.dataValue>
-            <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="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:cParasWithSubdocs</UML:TaggedValue.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="cLinesWithSubdocs">
-        <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>74</UML:TaggedValue.dataValue>
-            <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="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:cLinesWithSubdocs</UML:TaggedValue.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="lKeyProtDoc">
-        <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>78</UML:TaggedValue.dataValue>
-            <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="shift"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="mask"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue/>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:lKeyProtDoc</UML:TaggedValue.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="wvkoSaved">
-        <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>82</UML:TaggedValue.dataValue>
-            <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>0xe000</UML:TaggedValue.dataValue>
-            <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:wvkoSaved</UML:TaggedValue.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="pctWwdSaved">
-        <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>82</UML:TaggedValue.dataValue>
-            <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>0x1ff0</UML:TaggedValue.dataValue>
-            <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:pctWwdSaved</UML:TaggedValue.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="zkSaved">
-        <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>82</UML:TaggedValue.dataValue>
-            <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>0xc</UML:TaggedValue.dataValue>
-            <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:zkSaved</UML:TaggedValue.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="unused16">
-        <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>82</UML:TaggedValue.dataValue>
-            <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>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="bits"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>rtf:unused16</UML:TaggedValue.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="iGutterPos">
-        <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>82</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="offset"/>
-            </UML:TaggedValue.type>
-          </UML:TaggedValue>
-        </UML:ModelElement.taggedValue>
-        <UML:ModelElement.taggedValue>
-          <UML:TaggedValue>
-            <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
-            <UML:TaggedValue.type>
-              <UML:TagDefinition xmi.idref="shift"/>
-            </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>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:iGutterPos</UML:TaggedValue.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="DopBase-Properties">
-    <UML:Generalization.child>
-      <UML:Class xmi.idref="DopBase"/>
-    </UML:Generalization.child>
-    <UML:Generalization.parent>
-      <UML:Class xmi.idref="Properties"/>
-    </UML:Generalization.parent>
-  </UML:Generalization>
-        <!--Class ListLevel-->
-        <UML:Class xmi.id="ListLevel" name="ListLevel">
+        <!--Class DopBase-->
+        <UML:Class xmi.id="DopBase" name="DopBase">
           <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.dataValue>84</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:Attribute name="fFacingPages">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -5232,7 +626,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>31</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -5240,7 +634,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x80000000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -5248,7 +642,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -5256,7 +650,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:ISTARTAT</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fFacingPages</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="attrid"/>
                   </UML:TaggedValue.type>
@@ -5271,7 +665,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="nfc">
+            <UML:Attribute name="unused1">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -5282,7 +676,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -5290,7 +684,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>30</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -5298,15 +692,73 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x40000000</UML:TaggedValue.dataValue>
                   <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</UML:TaggedValue.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="fPMHMainDoc">
               <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>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>29</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0x20000000</UML:TaggedValue.dataValue>
+                  <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>
@@ -5314,14 +766,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:NFC</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fPMHMainDoc</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -5329,7 +781,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="jc">
+            <UML:Attribute name="unused2">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -5340,7 +792,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -5348,7 +800,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>27</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -5356,7 +808,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0xc0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x18000000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -5372,14 +824,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:JC</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:unused2</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -5387,7 +839,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fLegel">
+            <UML:Attribute name="fpc">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -5398,7 +850,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -5406,7 +858,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>25</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -5414,7 +866,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x20</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x6000000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -5422,7 +874,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -5430,14 +882,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FLEGAL</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fpc</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -5445,7 +897,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fNoRestart">
+            <UML:Attribute name="unused3">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -5456,7 +908,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -5464,7 +916,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>24</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -5472,7 +924,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x000000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -5488,14 +940,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FNORESTART</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:unused3</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -5503,7 +955,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fIdentSav">
+            <UML:Attribute name="unused4">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -5514,7 +966,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -5522,7 +974,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -5530,7 +982,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0xff0000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -5538,7 +990,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -5546,14 +998,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FIDENTSAV</UML:TaggedValue.dataValue>
+                  <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="U8"/>
+                <UML:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -5561,7 +1013,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fConverted">
+            <UML:Attribute name="rncFtn">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -5572,7 +1024,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -5580,7 +1032,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -5588,7 +1040,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0xc000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -5596,7 +1048,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -5604,14 +1056,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FCONVERTED</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:rncFtn</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -5619,7 +1071,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fTentative">
+            <UML:Attribute name="nFtn">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -5630,7 +1082,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -5646,7 +1098,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x3fff</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -5654,7 +1106,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -5662,14 +1114,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FTENTATIVE</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:nFtn</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -5677,7 +1129,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="rgbxchNums">
+            <UML:Attribute name="unused5">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -5688,7 +1140,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -5696,7 +1148,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>31</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -5704,7 +1156,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x80000000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -5712,7 +1164,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -5720,30 +1172,80 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:RGBXCHNUMS</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:unused5</UML:TaggedValue.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="unused6">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>9</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
-                    <UML:TagDefinition xmi.idref="arraycount"/>
+                    <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>30</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0x40000000</UML:TaggedValue.dataValue>
+                  <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:unused6</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
-                <UML:Stereotype xmi.idref="array"/>
+                <UML:Stereotype xmi.idref="attribute"/>
               </UML:ModelElement.stereotype>
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="ixchFollow">
+            <UML:Attribute name="unused7">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -5754,7 +1256,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -5762,7 +1264,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>29</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -5770,7 +1272,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x20000000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -5778,7 +1280,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -5786,14 +1288,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:IXCHFOLLOW</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:unused7</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -5801,7 +1303,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="dxaSpace">
+            <UML:Attribute name="unused8">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -5812,7 +1314,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -5820,7 +1322,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>28</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -5828,7 +1330,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x0000000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -5836,7 +1338,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -5844,14 +1346,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:DXASPACE</UML:TaggedValue.dataValue>
+                  <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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -5859,7 +1361,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="dxaIndent">
+            <UML:Attribute name="unused9">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -5870,7 +1372,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>20</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -5878,7 +1380,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>27</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -5886,7 +1388,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x8000000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -5894,7 +1396,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -5902,14 +1404,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:DXAINDENT</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:unused9</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -5917,7 +1419,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="cbGrpprlChpx">
+            <UML:Attribute name="unused10">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -5928,7 +1430,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>24</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -5936,7 +1438,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>26</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -5944,7 +1446,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x4000000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -5952,7 +1454,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -5960,14 +1462,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:CBGRPPRLCHPX</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:unused10</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -5975,7 +1477,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="cbGrpprlPapx">
+            <UML:Attribute name="fSplAllDone">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -5986,7 +1488,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>25</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -5994,7 +1496,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>25</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -6002,7 +1504,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x2000000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -6010,7 +1512,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -6018,14 +1520,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:CBGRPPRLPAPX</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fSplAllDone</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -6033,7 +1535,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="ilvlRestartLim">
+            <UML:Attribute name="fSplAllClean">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -6044,7 +1546,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>26</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -6052,7 +1554,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>24</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -6060,7 +1562,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x000000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -6068,7 +1570,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -6076,14 +1578,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:ilvlRestartLim</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fSplAllClean</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -6091,7 +1593,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="grfhic">
+            <UML:Attribute name="fSplHideErrors">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -6102,7 +1604,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>27</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -6110,7 +1612,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>23</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -6118,7 +1620,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x800000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -6126,7 +1628,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -6134,14 +1636,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:grfhic</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fSplHideErrors</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -6149,77 +1651,123 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Operation name="xst">
+            <UML:Attribute name="fGramHideErrors">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:xst</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
-                    <UML:TagDefinition xmi.idref="opid"/>
+                    <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.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>22</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0x400000</UML:TaggedValue.dataValue>
+                  <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:fGramHideErrors</UML:TaggedValue.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:Operation>
+            </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:Attribute name="fLabelDoc">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:LISTLEVEL</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
-                    <UML:TagDefinition xmi.idref="opid"/>
+                    <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="ListLevel"/>
-                  </UML:Parameter.type>
-                </UML:Parameter>
-              </UML:BehavioralFeature.parameter>
+              <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>21</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0x200000</UML:TaggedValue.dataValue>
+                  <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:fLabelDoc</UML:TaggedValue.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="array"/>
+                <UML:Stereotype xmi.idref="attribute"/>
               </UML:ModelElement.stereotype>
-            </UML:Operation>
+            </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="lsid">
+            <UML:Attribute name="fHyphCapitals">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -6230,7 +1778,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -6238,7 +1786,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>20</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -6246,7 +1794,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x00000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -6254,7 +1802,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -6262,14 +1810,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:LSID</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fHyphCapitals</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -6277,7 +1825,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="tplc">
+            <UML:Attribute name="fAutoHyphen">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -6296,7 +1844,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>19</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -6304,15 +1852,73 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x80000</UML:TaggedValue.dataValue>
                   <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:fAutoHyphen</UML:TaggedValue.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="fFormNoFields">
               <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>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>18</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0x40000</UML:TaggedValue.dataValue>
+                  <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>
@@ -6320,14 +1926,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:TPLC</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fFormNoFields</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -6335,7 +1941,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fBuildIn">
+            <UML:Attribute name="fLinkStyles">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -6354,7 +1960,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>31</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>17</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -6362,7 +1968,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x80000000</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x20000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -6378,7 +1984,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:fBuildIn</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fLinkStyles</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="attrid"/>
                   </UML:TaggedValue.type>
@@ -6393,7 +1999,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="ilgpdM1">
+            <UML:Attribute name="fRevMarking">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -6420,7 +2026,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x7fff0000</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x0000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -6428,7 +2034,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -6436,7 +2042,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:ilgpdM1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fRevMarking</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="attrid"/>
                   </UML:TaggedValue.type>
@@ -6451,7 +2057,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="lid">
+            <UML:Attribute name="unused11">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -6470,7 +2076,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -6478,7 +2084,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0xffff</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x8000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -6486,7 +2092,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -6494,7 +2100,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:lid</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:unused11</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="attrid"/>
                   </UML:TaggedValue.type>
@@ -6509,7 +2115,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="random">
+            <UML:Attribute name="fExactCWords">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -6528,7 +2134,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -6536,7 +2142,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x7fffffff</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x4000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -6544,7 +2150,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>31</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -6552,7 +2158,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:random</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fExactCWords</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="attrid"/>
                   </UML:TaggedValue.type>
@@ -6567,7 +2173,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="rgistd">
+            <UML:Attribute name="fPagHidden">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -6578,7 +2184,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -6586,7 +2192,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>13</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -6594,7 +2200,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x2000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -6602,7 +2208,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -6610,30 +2216,22 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:RGISTD</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fPagHidden</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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
-                <UML:Stereotype xmi.idref="array"/>
+                <UML:Stereotype xmi.idref="attribute"/>
               </UML:ModelElement.stereotype>
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fSimpleList">
+            <UML:Attribute name="fPagResults">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -6644,7 +2242,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -6652,7 +2250,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>7</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>12</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -6660,7 +2258,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x80</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -6676,14 +2274,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FSIMPLELIST</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fPagResults</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -6691,7 +2289,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fAutoNum">
+            <UML:Attribute name="fLockAtn">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -6702,7 +2300,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -6710,7 +2308,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>11</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -6718,7 +2316,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x20</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x800</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -6734,14 +2332,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:fAutoNum</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fLockAtn</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -6749,7 +2347,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fHybrid">
+            <UML:Attribute name="fMirrorMargins">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -6760,7 +2358,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -6768,7 +2366,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -6776,7 +2374,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x400</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -6792,14 +2390,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:fHybrid</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fMirrorMargins</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -6807,7 +2405,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="reserved1">
+            <UML:Attribute name="fWord97Compat">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -6818,7 +2416,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -6826,7 +2424,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>9</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -6834,7 +2432,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x7</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x200</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -6842,7 +2440,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -6850,14 +2448,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:reserved1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fWord97Compat</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -6865,7 +2463,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="grfhic">
+            <UML:Attribute name="unused12">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -6876,7 +2474,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>27</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -6884,7 +2482,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -6892,7 +2490,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x00</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -6900,7 +2498,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -6908,81 +2506,25 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:grfhic</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:unused12</UML:TaggedValue.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: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="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.stereotype>
-            <UML:Stereotype xmi.idref="ww8nopayloadoffset"/>
-          </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:Attribute name="unused13">
               <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.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -6990,7 +2532,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -6998,7 +2540,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>7</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -7006,7 +2548,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x80</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -7014,7 +2556,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -7022,14 +2564,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:ISTARTAT</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:unused13</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -7037,10 +2579,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="ilvl">
+            <UML:Attribute name="fProtEnabled">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>the level to be overridden</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -7048,7 +2590,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -7056,7 +2598,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -7064,7 +2606,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0F</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x40</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -7072,7 +2614,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -7080,14 +2622,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:ILVL</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fProtEnabled</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -7095,10 +2637,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fStartAt">
+            <UML:Attribute name="fDispFormFldSel">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>true if the start-at value is overridden</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -7106,7 +2648,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -7114,7 +2656,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -7122,7 +2664,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x10</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x20</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -7130,7 +2672,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -7138,14 +2680,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FSTARTAT</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fDispFormFldSel</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -7153,11 +2695,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fFormatting">
+            <UML:Attribute name="fRMView">
               <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.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -7165,7 +2706,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -7173,7 +2714,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -7181,7 +2722,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x20</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -7189,7 +2730,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -7197,14 +2738,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FFORMATTING</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fRMView</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -7212,10 +2753,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="unsigned4_6">
+            <UML:Attribute name="fRMPrint">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -7223,7 +2764,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -7231,7 +2772,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -7239,7 +2780,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0xC0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -7247,7 +2788,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:2</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -7255,14 +2796,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:UNSIGNED4_6</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fRMPrint</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -7270,10 +2811,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="reserved">
+            <UML:Attribute name="fLockVbaProj">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -7281,7 +2822,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x5</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -7289,7 +2830,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -7297,7 +2838,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -7305,7 +2846,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -7313,56 +2854,22 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:RESERVED</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fLockVbaProj</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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
-                <UML:Stereotype xmi.idref="array"/>
+                <UML:Stereotype xmi.idref="attribute"/>
               </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>15</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="lsid">
+            <UML:Attribute name="fLockRev">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -7373,7 +2880,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -7381,7 +2888,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -7389,7 +2896,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -7397,7 +2904,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -7405,14 +2912,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:lsid</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fLockRev</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -7420,7 +2927,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="clfolvl">
+            <UML:Attribute name="fEmbedFonts">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -7431,7 +2938,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>12</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -7439,7 +2946,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -7447,7 +2954,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -7455,7 +2962,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -7463,14 +2970,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:clfolvl</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fEmbedFonts</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -7478,7 +2985,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="ibstFltAutoNum">
+            <UML:Attribute name="copts60">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -7489,7 +2996,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>13</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -7521,14 +3028,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:ibstFltAutoNum</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:copts60</UML:TaggedValue.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:DataType xmi.idref="U16"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -7536,7 +3043,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="grfhic">
+            <UML:Attribute name="dxaTab">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -7547,7 +3054,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -7579,14 +3086,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:grfhic</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:dxaTab</UML:TaggedValue.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:DataType xmi.idref="U16"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -7594,75 +3101,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Operation name="LFOData">
-              <UML:ModelElement.taggedValue>
-                <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:LFOData</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="LFOData"/>
-                  </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="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 SttbRgtplc-->
-        <UML:Class xmi.id="SttbRgtplc" name="SttbRgtplc">
-          <UML:ModelElement.stereotype>
-            <UML:Stereotype xmi.idref="ww8resource"/>
-          </UML:ModelElement.stereotype>
-          <UML:ModelElement.taggedValue>
-            <UML:TaggedValue>
-              <UML:TaggedValue.dataValue>rtf:SttbRgtplc</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="SttbRgtplc-Table">
-          <UML:Generalization.child>
-            <UML:Class xmi.idref="SttbRgtplc"/>
-          </UML:Generalization.child>
-          <UML:Generalization.parent>
-            <UML:Class xmi.idref="Table"/>
-          </UML:Generalization.parent>
-        </UML:Generalization>
-        <!--Class SttbRgtplc-->
-        <!--Class LFOData-->
-        <UML:Class xmi.id="LFOData" name="LFOData">
-          <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="cp">
+            <UML:Attribute name="cpgWebOpt">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -7673,7 +3112,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>12</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -7705,183 +3144,83 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:cp</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:cpgWebOpt</UML:TaggedValue.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: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="LFOData-Properties">
-          <UML:Generalization.child>
-            <UML:Class xmi.idref="LFOData"/>
-          </UML:Generalization.child>
-          <UML:Generalization.parent>
-            <UML:Class xmi.idref="Properties"/>
-          </UML:Generalization.parent>
-        </UML:Generalization>
-        <!--Class LFOData-->
-        <!--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.stereotype>
-            <UML:Stereotype xmi.idref="ww8nopayloadoffset"/>
-          </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="ww8nopayloadoffset"/>
-          </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:Attribute name="dxaHotZ">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:F</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
-                    <UML:TagDefinition xmi.idref="opid"/>
+                    <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="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.dataValue>14</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
-                    <UML:TagDefinition xmi.idref="opid"/>
+                    <UML:TagDefinition xmi.idref="offset"/>
                   </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.dataValue/>
                   <UML:TaggedValue.type>
-                    <UML:TagDefinition xmi.idref="opid"/>
+                    <UML:TagDefinition xmi.idref="shift"/>
                   </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.dataValue/>
                   <UML:TaggedValue.type>
-                    <UML:TagDefinition xmi.idref="comment"/>
+                    <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
                 </UML:TaggedValue>
               </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="bits"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>rtf:dxaHotZ</UML:TaggedValue.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:Operation>
-            <UML:Attribute name="cbFfnM1">
+            </UML:Attribute>
+          </UML:Classifier.feature>
+          <UML:Classifier.feature>
+            <UML:Attribute name="cConsecHypLim">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>total length of FFN - 1.</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -7889,7 +3228,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -7897,7 +3236,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -7921,14 +3260,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:CBFFNM1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:cConsecHypLim</UML:TaggedValue.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:DataType xmi.idref="U16"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -7936,10 +3275,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="prq">
+            <UML:Attribute name="wSpare2">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>pitch request</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -7947,7 +3286,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>18</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -7955,7 +3294,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -7963,7 +3302,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>03</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -7971,7 +3310,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:2</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -7979,14 +3318,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:PRQ</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:wSpare2</UML:TaggedValue.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:DataType xmi.idref="U16"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -7994,10 +3333,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fTrueType">
+            <UML:Attribute name="dttmCreated">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>when 1, font is a TrueType font</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -8005,7 +3344,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>20</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -8013,7 +3352,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -8021,7 +3360,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>04</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -8029,7 +3368,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -8037,14 +3376,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FTRUETYPE</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:dttmCreated</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -8052,10 +3391,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="unused1_3">
+            <UML:Attribute name="dttmRevised">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -8063,7 +3402,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>24</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -8071,7 +3410,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -8079,7 +3418,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>08</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -8087,7 +3426,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -8095,14 +3434,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:UNUSED1_3</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:dttmRevised</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -8110,10 +3449,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="ff">
+            <UML:Attribute name="dttmLastPrint">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>font family id</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -8121,7 +3460,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>28</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -8129,7 +3468,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -8137,7 +3476,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>70</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -8145,7 +3484,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:3</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -8153,14 +3492,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FF</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:dttmLastPrint</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -8168,10 +3507,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="unused1_7">
+            <UML:Attribute name="nRevision">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -8179,7 +3518,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -8187,7 +3526,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>7</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -8195,7 +3534,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>80</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -8203,7 +3542,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -8211,14 +3550,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:UNUSED1_7</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:nRevision</UML:TaggedValue.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:DataType xmi.idref="U16"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -8226,10 +3565,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="wWeight">
+            <UML:Attribute name="tmEdited">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>base weight of font</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -8237,7 +3576,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>34</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -8245,7 +3584,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -8269,14 +3608,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:WWEIGHT</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:tmEdited</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -8284,10 +3623,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="chs">
+            <UML:Attribute name="cWords">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>character set identifier</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -8295,7 +3634,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>38</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -8303,7 +3642,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -8327,14 +3666,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:CHS</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:cWords</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -8342,10 +3681,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="ixchSzAlt">
+            <UML:Attribute name="cCh">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>index into ffn.szFfn to the name of the alternate font</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -8353,7 +3692,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x5</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>42</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -8361,7 +3700,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -8385,14 +3724,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:IXCHSZALT</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:cCh</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -8400,10 +3739,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="panose">
+            <UML:Attribute name="cPg">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>? This is supposed to be of type PANOSE.</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -8411,7 +3750,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x6</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>46</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -8419,7 +3758,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -8443,33 +3782,83 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:PANOSE</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:cPg</UML:TaggedValue.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="cParas">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
-                    <UML:TagDefinition xmi.idref="arraycount"/>
+                    <UML:TagDefinition xmi.idref="comment"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>48</UML:TaggedValue.dataValue>
+                  <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="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="bits"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>rtf:cParas</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
-                <UML:Stereotype xmi.idref="array"/>
+                <UML:Stereotype xmi.idref="attribute"/>
               </UML:ModelElement.stereotype>
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fs">
+            <UML:Attribute name="rncEdn">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>? This is supposed to be of type FONTSIGNATURE.</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -8477,7 +3866,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x10</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>52</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -8485,7 +3874,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>30</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -8493,7 +3882,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0xc0000000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -8501,7 +3890,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -8509,54 +3898,83 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FS</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:rncEdn</UML:TaggedValue.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="nEdn">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>24</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
-                    <UML:TagDefinition xmi.idref="arraycount"/>
+                    <UML:TagDefinition xmi.idref="comment"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>52</UML:TaggedValue.dataValue>
+                  <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="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0x3fff0000</UML:TaggedValue.dataValue>
+                  <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:</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
-                <UML:Stereotype xmi.idref="array"/>
+                <UML:Stereotype xmi.idref="attribute"/>
               </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:Attribute name="epc">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>invariant style identifier</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -8564,7 +3982,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>52</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -8572,7 +3990,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -8580,7 +3998,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0FFF</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0xc000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -8588,7 +4006,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:12</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -8596,14 +4014,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:STI</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -8611,11 +4029,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fScratch">
+            <UML:Attribute name="unused14">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>spare field for any temporary use, always reset back to
-                  zero!</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -8623,7 +4040,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>52</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -8631,7 +4048,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>12</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -8639,7 +4056,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>1000</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x3c00</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -8647,7 +4064,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -8655,14 +4072,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FSCRATCH</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:unused14</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -8670,10 +4087,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fInvalHeight">
+            <UML:Attribute name="unused15">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>PHEs of all text with this style are wrong</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -8681,7 +4098,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>52</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -8689,7 +4106,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>13</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -8697,7 +4114,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>2000</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x3c0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -8705,7 +4122,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -8713,14 +4130,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FINVALHEIGHT</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:unused15</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -8728,10 +4145,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fHasUpe">
+            <UML:Attribute name="fPrintFormData">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>UPEs have been generated</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -8739,7 +4156,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>52</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -8747,7 +4164,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -8755,7 +4172,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>4000</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x20</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -8763,7 +4180,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -8771,14 +4188,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FHASUPE</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fPrintFormData</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -8786,11 +4203,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fMassCopy">
+            <UML:Attribute name="fSaveFormData">
               <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.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -8798,7 +4214,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>52</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -8806,7 +4222,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -8814,7 +4230,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>8000</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -8822,7 +4238,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -8830,14 +4246,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FMASSCOPY</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fSaveFormData</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -8845,10 +4261,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="sgc">
+            <UML:Attribute name="fShadeFormData">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>style type code</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -8856,7 +4272,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>52</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -8864,7 +4280,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -8872,7 +4288,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>000F</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -8880,7 +4296,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -8888,14 +4304,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:SGC</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fShadeFormData</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -8903,10 +4319,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="istdBase">
+            <UML:Attribute name="fShadeMergeFields">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>base style</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -8914,7 +4330,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>52</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -8922,7 +4338,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -8930,7 +4346,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>FFF0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -8938,7 +4354,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:12</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -8946,14 +4362,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:ISTDBASE</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fShadeMergeFields</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -8961,10 +4377,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="cupx">
+            <UML:Attribute name="reserved2">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue># of UPXs (and UPEs)</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -8972,7 +4388,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x6</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>52</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -8980,7 +4396,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -8988,7 +4404,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>000F</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -8996,7 +4412,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -9004,14 +4420,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:CUPX</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:reserved2</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -9019,10 +4435,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="istdNext">
+            <UML:Attribute name="fIncludeSubdocsInStats">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>next style</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -9030,7 +4446,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x6</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>52</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -9038,7 +4454,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -9046,7 +4462,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>FFF0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -9054,7 +4470,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:12</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -9062,14 +4478,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:ISTDNEXT</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fIncludeSubdocsInStats</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -9077,10 +4493,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="bchUpe">
+            <UML:Attribute name="cLines">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>offset to end of upx's, start of upe's</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -9088,7 +4504,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>56</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -9096,7 +4512,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -9120,14 +4536,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:BCHUPE</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:cLines</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -9135,10 +4551,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fAutoRedef">
+            <UML:Attribute name="cWordsWithSubdocs">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>auto redefine style when appropriate</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -9146,7 +4562,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0xa</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>60</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -9154,7 +4570,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -9162,7 +4578,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0001</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -9170,7 +4586,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -9178,14 +4594,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FAUTOREDEF</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:cWordsWithSubdocs</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -9193,10 +4609,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fHidden">
+            <UML:Attribute name="cChWithSubdocs">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>hidden from UI?</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -9204,7 +4620,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0xa</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>64</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -9212,7 +4628,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -9220,7 +4636,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0002</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -9228,7 +4644,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -9236,14 +4652,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FHIDDEN</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:cChWithSubdocs</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -9251,10 +4667,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="unused8_3">
+            <UML:Attribute name="cPgWithSubdocs">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>unused bits</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -9262,7 +4678,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0xa</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>68</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -9270,7 +4686,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -9278,7 +4694,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>FFFC</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -9286,7 +4702,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:14</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -9294,7 +4710,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:UNUSED8_3</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:cPgWithSubdocs</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="attrid"/>
                   </UML:TaggedValue.type>
@@ -9309,119 +4725,10 @@
             </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:ModelElement.stereotype>
-            <UML:Stereotype xmi.idref="ww8nopayloadoffset"/>
-          </UML:ModelElement.stereotype>
-          <UML:Classifier.feature>
-            <UML:ModelElement.stereotype>
-              <UML:Stereotype xmi.idref="ww8nocalcsize"/>
-            </UML:ModelElement.stereotype>
-            <UML:Attribute name="size">
+            <UML:Attribute name="cParasWithSubdocs">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>Size of style sheet info</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -9429,7 +4736,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>70</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -9437,7 +4744,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -9461,23 +4768,25 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:CSTD</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:cParasWithSubdocs</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
               </UML:ModelElement.stereotype>
             </UML:Attribute>
-            <UML:Attribute name="cstd">
+          </UML:Classifier.feature>
+          <UML:Classifier.feature>
+            <UML:Attribute name="cLinesWithSubdocs">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>Count of styles in stylesheet</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -9485,7 +4794,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>74</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -9493,7 +4802,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -9517,14 +4826,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:CSTD</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:cLinesWithSubdocs</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -9532,10 +4841,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="cbSTDBaseInFile">
+            <UML:Attribute name="lKeyProtDoc">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>Length of STD Base as stored in a file</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -9543,7 +4852,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>78</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -9551,7 +4860,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -9575,14 +4884,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:CBSTDBASEINFILE</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:lKeyProtDoc</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -9590,10 +4899,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fStdStylenamesWritten">
+            <UML:Attribute name="wvkoSaved">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>Are built-in stylenames stored?</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -9601,7 +4910,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x6</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>82</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -9609,7 +4918,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>13</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -9617,7 +4926,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0001</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0xe000</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -9625,7 +4934,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -9633,7 +4942,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FSTDSTYLENAMESWRITTEN</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:wvkoSaved</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="attrid"/>
                   </UML:TaggedValue.type>
@@ -9648,10 +4957,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="unused4_2">
+            <UML:Attribute name="pctWwdSaved">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>Spare flags</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -9659,7 +4968,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x6</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>82</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -9667,7 +4976,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -9675,7 +4984,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>FFFE</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x1ff0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -9683,7 +4992,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:15</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>9</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -9691,7 +5000,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:UNUSED4_2</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:pctWwdSaved</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="attrid"/>
                   </UML:TaggedValue.type>
@@ -9706,10 +5015,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="stiMaxWhenSaved">
+            <UML:Attribute name="zkSaved">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>Max sti known when this file was written</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -9717,7 +5026,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>82</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -9725,7 +5034,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -9733,7 +5042,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0xc</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -9741,7 +5050,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -9749,7 +5058,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:STIMAXWHENSAVED</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:zkSaved</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="attrid"/>
                   </UML:TaggedValue.type>
@@ -9764,10 +5073,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="istdMaxFixedWhenSaved">
+            <UML:Attribute name="unused16">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>How many fixed-index istds are there?</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -9775,7 +5084,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0xA</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>82</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -9783,7 +5092,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -9791,7 +5100,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -9799,7 +5108,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -9807,7 +5116,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:ISTDMAXFIXEDWHENSAVED</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:unused16</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="attrid"/>
                   </UML:TaggedValue.type>
@@ -9822,10 +5131,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="nVerBuiltInNamesWhenSaved">
+            <UML:Attribute name="iGutterPos">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>Current version of built-in stylenames</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -9833,7 +5142,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0xC</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>82</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -9849,7 +5158,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -9857,7 +5166,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -9865,7 +5174,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:NVERBUILTINNAMESWHENSAVED</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:iGutterPos</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="attrid"/>
                   </UML:TaggedValue.type>
@@ -9879,11 +5188,37 @@
               </UML:ModelElement.stereotype>
             </UML:Attribute>
           </UML:Classifier.feature>
+        </UML:Class>
+        <UML:Generalization isSpecification="false" xmi.id="DopBase-Properties">
+          <UML:Generalization.child>
+            <UML:Class xmi.idref="DopBase"/>
+          </UML:Generalization.child>
+          <UML:Generalization.parent>
+            <UML:Class xmi.idref="Properties"/>
+          </UML:Generalization.parent>
+        </UML:Generalization>
+        <!--Class DopBase-->
+        <!--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="rgftcStandardChpStsh">
+            <UML:Attribute name="iStartAt">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>ftc used by StandardChpStsh for this document</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -9891,7 +5226,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0xE</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -9899,7 +5234,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -9923,67 +5258,25 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:RGFTCSTANDARDCHPSTSH</UML:TaggedValue.dataValue>
+                  <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: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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
-                <UML:Stereotype xmi.idref="array"/>
+                <UML:Stereotype xmi.idref="attribute"/>
               </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:Attribute name="nfc">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>(fibh) FIBH Beginning of the FIB header magic number</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -9991,7 +5284,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0000</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -9999,7 +5292,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -10023,14 +5316,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:WIDENT</UML:TaggedValue.dataValue>
+                  <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="U16"/>
+                <UML:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -10038,11 +5331,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="nFib">
+            <UML:Attribute name="jc">
               <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.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -10050,7 +5342,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0002</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -10058,7 +5350,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -10066,7 +5358,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0xc0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -10074,7 +5366,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -10082,14 +5374,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:NFIB</UML:TaggedValue.dataValue>
+                  <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="U16"/>
+                <UML:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -10097,10 +5389,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="nProduct">
+            <UML:Attribute name="fLegel">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>product version written by</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -10108,7 +5400,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0004</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -10116,7 +5408,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -10124,7 +5416,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x20</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -10132,7 +5424,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -10140,14 +5432,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:NPRODUCT</UML:TaggedValue.dataValue>
+                  <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="U16"/>
+                <UML:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -10155,12 +5447,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="lid">
+            <UML:Attribute name="fNoRestart">
               <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.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -10168,7 +5458,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0006</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -10176,7 +5466,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -10184,7 +5474,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -10192,7 +5482,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -10200,14 +5490,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:LID</UML:TaggedValue.dataValue>
+                  <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="U16"/>
+                <UML:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -10215,7 +5505,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="pnNext">
+            <UML:Attribute name="fIdentSav">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -10226,7 +5516,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0008</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -10234,7 +5524,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -10242,7 +5532,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -10250,7 +5540,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -10258,14 +5548,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:PNNEXT</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:FIDENTSAV</UML:TaggedValue.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:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -10273,10 +5563,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fDot">
+            <UML:Attribute name="fConverted">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>Set if this document is a template</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -10284,7 +5574,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -10292,7 +5582,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -10300,7 +5590,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0001</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -10308,7 +5598,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -10316,14 +5606,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FDOT</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:FCONVERTED</UML:TaggedValue.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:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -10331,10 +5621,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fGlsy">
+            <UML:Attribute name="fTentative">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>Set if this document is a glossary</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -10342,7 +5632,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -10350,7 +5640,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -10358,7 +5648,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0002</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -10366,7 +5656,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -10374,14 +5664,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FGLSY</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:FTENTATIVE</UML:TaggedValue.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:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -10389,10 +5679,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fComplex">
+            <UML:Attribute name="rgbxchNums">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>when 1, file is in complex, fast-saved format.</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -10400,7 +5690,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -10408,7 +5698,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -10416,7 +5706,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0004</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -10424,7 +5714,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -10432,83 +5722,33 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FCOMPLEX</UML:TaggedValue.dataValue>
+                  <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: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>0x000A</UML:TaggedValue.dataValue>
-                  <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.dataValue>9</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
-                    <UML:TagDefinition xmi.idref="attrid"/>
+                    <UML:TagDefinition xmi.idref="arraycount"/>
                   </UML:TaggedValue.type>
                 </UML:TaggedValue>
               </UML:ModelElement.taggedValue>
               <UML:StructuralFeature.type>
-                <UML:DataType xmi.idref="U16"/>
+                <UML:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
-                <UML:Stereotype xmi.idref="attribute"/>
+                <UML:Stereotype xmi.idref="array"/>
               </UML:ModelElement.stereotype>
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="cQuickSaves">
+            <UML:Attribute name="ixchFollow">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>count of times file was quicksaved</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -10516,7 +5756,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -10524,7 +5764,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -10532,7 +5772,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>00F0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -10540,7 +5780,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -10548,14 +5788,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:CQUICKSAVES</UML:TaggedValue.dataValue>
+                  <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="U16"/>
+                <UML:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -10563,10 +5803,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fEncrypted">
+            <UML:Attribute name="dxaSpace">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>Set if file is encrypted</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -10574,7 +5814,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -10582,7 +5822,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -10590,7 +5830,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0100</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -10598,7 +5838,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -10606,14 +5846,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FENCRYPTED</UML:TaggedValue.dataValue>
+                  <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="U16"/>
+                <UML:DataType xmi.idref="S32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -10621,15 +5861,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fWhichTblStm">
+            <UML:Attribute name="dxaIndent">
               <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.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -10637,7 +5872,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>20</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -10645,7 +5880,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>9</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -10653,7 +5888,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0200</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -10661,7 +5896,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -10669,14 +5904,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FWHICHTBLSTM</UML:TaggedValue.dataValue>
+                  <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="U16"/>
+                <UML:DataType xmi.idref="S32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -10684,10 +5919,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fReadOnlyRecommended">
+            <UML:Attribute name="cbGrpprlChpx">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>Set when user has recommended that file be read read-only</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -10695,7 +5930,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>24</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -10703,7 +5938,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -10711,7 +5946,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0400</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -10719,7 +5954,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -10727,14 +5962,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FREADONLYRECOMMENDED</UML:TaggedValue.dataValue>
+                  <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="U16"/>
+                <UML:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -10742,10 +5977,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fWriteReservation">
+            <UML:Attribute name="cbGrpprlPapx">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>Set when file owner has made the file write reserved</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -10753,7 +5988,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>25</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -10761,7 +5996,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>11</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -10769,7 +6004,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0800</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -10777,7 +6012,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -10785,14 +6020,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FWRITERESERVATION</UML:TaggedValue.dataValue>
+                  <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="U16"/>
+                <UML:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -10800,10 +6035,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fExtChar">
+            <UML:Attribute name="ilvlRestartLim">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>Set when using extended character set in file</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -10811,7 +6046,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>26</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -10819,7 +6054,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>12</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -10827,7 +6062,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>1000</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -10835,7 +6070,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -10843,14 +6078,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FEXTCHAR</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:ilvlRestartLim</UML:TaggedValue.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:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -10858,10 +6093,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fLoadOverride">
+            <UML:Attribute name="grfhic">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>REVIEW</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -10869,7 +6104,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>27</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -10877,7 +6112,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>13</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -10885,7 +6120,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>2000</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -10893,7 +6128,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -10901,14 +6136,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FLOADOVERRIDE</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:grfhic</UML:TaggedValue.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:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -10916,68 +6151,80 @@
             </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>0x000A</UML:TaggedValue.dataValue>
-                  <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:Operation name="xst">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:xst</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
-                    <UML:TagDefinition xmi.idref="bits"/>
+                    <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="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:FFAREAST</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:LISTLEVEL</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
-                    <UML:TagDefinition xmi.idref="attrid"/>
+                    <UML:TagDefinition xmi.idref="opid"/>
                   </UML:TaggedValue.type>
                 </UML:TaggedValue>
               </UML:ModelElement.taggedValue>
-              <UML:StructuralFeature.type>
-                <UML:DataType xmi.idref="U16"/>
-              </UML:StructuralFeature.type>
+              <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="attribute"/>
+                <UML:Stereotype xmi.idref="array"/>
               </UML:ModelElement.stereotype>
-            </UML:Attribute>
+            </UML:Operation>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fCrypto">
+            <UML:Attribute name="lsid">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>REVIEW</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -10985,7 +6232,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -10993,7 +6240,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -11001,7 +6248,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>8000</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -11009,7 +6256,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -11017,14 +6264,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FCRYPTO</UML:TaggedValue.dataValue>
+                  <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="U16"/>
+                <UML:DataType xmi.idref="S32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -11032,11 +6279,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="nFibBack">
+            <UML:Attribute name="tplc">
               <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.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -11044,7 +6290,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x000C</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -11052,7 +6298,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -11076,14 +6322,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:NFIBBACK</UML:TaggedValue.dataValue>
+                  <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="U16"/>
+                <UML:DataType xmi.idref="S32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -11091,10 +6337,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="lKey">
+            <UML:Attribute name="fBuildIn">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>File encrypted key, only valid if fEncrypted.</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -11102,7 +6348,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x000E</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -11110,7 +6356,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>31</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -11118,15 +6364,73 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x80000000</UML:TaggedValue.dataValue>
                   <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:fBuildIn</UML:TaggedValue.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="ilgpdM1">
               <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>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>16</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0x7fff0000</UML:TaggedValue.dataValue>
+                  <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>
@@ -11134,7 +6438,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:LKEY</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:ilgpdM1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="attrid"/>
                   </UML:TaggedValue.type>
@@ -11149,12 +6453,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="envr">
+            <UML:Attribute name="lid">
               <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.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -11162,7 +6464,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0012</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -11178,7 +6480,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0xffff</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -11186,7 +6488,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -11194,14 +6496,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:ENVR</UML:TaggedValue.dataValue>
+                  <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="U8"/>
+                <UML:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -11209,10 +6511,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fMac">
+            <UML:Attribute name="random">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>when 1, this file was last saved in the Mac environment</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -11220,7 +6522,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0013</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -11236,7 +6538,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>01</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x7fffffff</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -11244,7 +6546,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>31</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -11252,14 +6554,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FMAC</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:random</UML:TaggedValue.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:DataType xmi.idref="U32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -11267,7 +6569,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fEmptySpecial">
+            <UML:Attribute name="rgistd">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -11278,7 +6580,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0013</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -11286,7 +6588,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -11294,7 +6596,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>02</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -11302,7 +6604,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -11310,22 +6612,30 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FEMPTYSPECIAL</UML:TaggedValue.dataValue>
+                  <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="U8"/>
+                <UML:DataType xmi.idref="U16"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
-                <UML:Stereotype xmi.idref="attribute"/>
+                <UML:Stereotype xmi.idref="array"/>
               </UML:ModelElement.stereotype>
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fLoadOverridePage">
+            <UML:Attribute name="fSimpleList">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -11336,7 +6646,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0013</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -11344,7 +6654,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>7</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -11352,7 +6662,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>04</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x80</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -11360,7 +6670,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -11368,7 +6678,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FLOADOVERRIDEPAGE</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:FSIMPLELIST</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="attrid"/>
                   </UML:TaggedValue.type>
@@ -11383,7 +6693,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fFutureSavedUndo">
+            <UML:Attribute name="fAutoNum">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -11394,7 +6704,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0013</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -11402,7 +6712,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -11410,7 +6720,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>08</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x20</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -11418,7 +6728,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -11426,7 +6736,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FFUTURESAVEDUNDO</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fAutoNum</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="attrid"/>
                   </UML:TaggedValue.type>
@@ -11441,7 +6751,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fWord97Saved">
+            <UML:Attribute name="fHybrid">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -11452,7 +6762,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0013</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -11460,7 +6770,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -11468,7 +6778,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -11476,7 +6786,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -11484,7 +6794,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FWORD97SAVED</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:fHybrid</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="attrid"/>
                   </UML:TaggedValue.type>
@@ -11499,7 +6809,7 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fSpare0">
+            <UML:Attribute name="reserved1">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
@@ -11510,7 +6820,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0013</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -11518,7 +6828,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -11526,7 +6836,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>FE</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x7</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -11534,7 +6844,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>:3</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -11542,7 +6852,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FSPARE0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:reserved1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="attrid"/>
                   </UML:TaggedValue.type>
@@ -11557,15 +6867,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="chs">
+            <UML:Attribute name="grfhic">
               <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.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -11573,7 +6878,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0014</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>27</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -11581,7 +6886,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -11605,30 +6910,81 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:CHS</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:grfhic</UML:TaggedValue.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: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.stereotype>
+            <UML:Stereotype xmi.idref="ww8nopayloadoffset"/>
+          </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="chsTables">
+            <UML:Attribute name="iStartAt">
               <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.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>
@@ -11636,7 +6992,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0016</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -11660,7 +7016,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -11668,14 +7024,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:CHSTABLES</UML:TaggedValue.dataValue>
+                  <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="U16"/>
+                <UML:DataType xmi.idref="S32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -11683,13 +7039,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fcMin">
+            <UML:Attribute name="ilvl">
               <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.dataValue>the level to be overridden</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -11697,7 +7050,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0018</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -11713,7 +7066,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x0F</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -11721,7 +7074,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>:4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -11729,14 +7082,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FCMIN</UML:TaggedValue.dataValue>
+                  <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="U32"/>
+                <UML:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -11744,11 +7097,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="fcMac">
+            <UML:Attribute name="fStartAt">
               <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.dataValue>true if the start-at value is overridden</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -11756,7 +7108,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x001C</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -11764,7 +7116,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -11772,7 +7124,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x10</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -11780,7 +7132,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -11788,14 +7140,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:FCMAC</UML:TaggedValue.dataValue>
+                  <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="U32"/>
+                <UML:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -11803,10 +7155,11 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="csw">
+            <UML:Attribute name="fFormatting">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>Count of fields in the array of "shorts"</UML:TaggedValue.dataValue>
+                  <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>
@@ -11814,7 +7167,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0020</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -11822,7 +7175,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -11830,7 +7183,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0x20</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -11838,7 +7191,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -11846,14 +7199,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:CSW</UML:TaggedValue.dataValue>
+                  <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="U16"/>
+                <UML:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -11861,13 +7214,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="wMagicCreated">
+            <UML:Attribute name="unsigned4_6">
               <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.dataValue>reserved</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -11875,7 +7225,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0022</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -11883,7 +7233,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -11891,7 +7241,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>0xC0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="mask"/>
                   </UML:TaggedValue.type>
@@ -11899,7 +7249,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>:2</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -11907,14 +7257,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:WMAGICCREATED</UML:TaggedValue.dataValue>
+                  <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="U16"/>
+                <UML:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -11922,10 +7272,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="wMagicRevised">
+            <UML:Attribute name="reserved">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>identifies the File's last modifier</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -11933,7 +7283,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0024</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0x5</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -11957,7 +7307,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="bits"/>
                   </UML:TaggedValue.type>
@@ -11965,141 +7315,59 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:WMAGICREVISED</UML:TaggedValue.dataValue>
+                  <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: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>0x0026</UML:TaggedValue.dataValue>
-                  <UML:TaggedValue.type>
-                    <UML:TagDefinition xmi.idref="offset"/>
-                  </UML:TaggedValue.type>
-                </UML:TaggedValue>
-              </UML:ModelElement.taggedValue>
-              <UML:ModelElement.taggedValue>
-                <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
-                  <UML:TaggedValue.type>
-                    <UML:TagDefinition xmi.idref="shift"/>
-                  </UML:TaggedValue.type>
-                </UML:TaggedValue>
-              </UML:ModelElement.taggedValue>
-              <UML:ModelElement.taggedValue>
-                <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
-                  <UML:TaggedValue.type>
-                    <UML:TagDefinition xmi.idref="mask"/>
-                  </UML:TaggedValue.type>
-                </UML:TaggedValue>
-              </UML:ModelElement.taggedValue>
-              <UML:ModelElement.taggedValue>
-                <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
-                  <UML: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.dataValue>3</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
-                    <UML:TagDefinition xmi.idref="attrid"/>
+                    <UML:TagDefinition xmi.idref="arraycount"/>
                   </UML:TaggedValue.type>
                 </UML:TaggedValue>
               </UML:ModelElement.taggedValue>
               <UML:StructuralFeature.type>
-                <UML:DataType xmi.idref="U16"/>
+                <UML:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
-                <UML:Stereotype xmi.idref="attribute"/>
+                <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>15</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="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>0x0028</UML:TaggedValue.dataValue>
-                  <UML:TaggedValue.type>
-                    <UML:TagDefinition xmi.idref="offset"/>
-                  </UML:TaggedValue.type>
-                </UML:TaggedValue>
-              </UML:ModelElement.taggedValue>
-              <UML:ModelElement.taggedValue>
-                <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
-                  <UML:TaggedValue.type>
-                    <UML:TagDefinition xmi.idref="shift"/>
-                  </UML:TaggedValue.type>
-                </UML:TaggedValue>
-              </UML:ModelElement.taggedValue>
-              <UML:ModelElement.taggedValue>
-                <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue/>
-                  <UML:TaggedValue.type>
-                    <UML:TagDefinition xmi.idref="mask"/>
-                  </UML:TaggedValue.type>
-                </UML:TaggedValue>
-              </UML:ModelElement.taggedValue>
+            <UML:Attribute name="lsid">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
                   <UML:TaggedValue.dataValue/>
-                  <UML: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>
@@ -12107,7 +7375,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x002A</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -12115,7 +7383,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -12139,14 +7407,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:PNFBPCHPFIRST_W6</UML:TaggedValue.dataValue>
+                  <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="U16"/>
+                <UML:DataType xmi.idref="S32"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -12154,10 +7422,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="pnChpFirst_W6">
+            <UML:Attribute name="clfolvl">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -12165,7 +7433,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x002C</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>12</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -12173,7 +7441,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -12197,14 +7465,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:PNCHPFIRST_W6</UML:TaggedValue.dataValue>
+                  <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="U16"/>
+                <UML:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -12212,10 +7480,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="cpnBteChp_W6">
+            <UML:Attribute name="ibstFltAutoNum">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -12223,7 +7491,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x002E</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>13</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -12231,7 +7499,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -12255,14 +7523,14 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>rtf:CPNBTECHP_W6</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>rtf:ibstFltAutoNum</UML:TaggedValue.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:DataType xmi.idref="U8"/>
               </UML:StructuralFeature.type>
               <UML:ModelElement.stereotype>
                 <UML:Stereotype xmi.idref="attribute"/>
@@ -12270,10 +7538,10 @@
             </UML:Attribute>
           </UML:Classifier.feature>
           <UML:Classifier.feature>
-            <UML:Attribute name="pnFbpPapFirst_W6">
+            <UML:Attribute name="grfhic">
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="comment"/>
                   </UML:TaggedValue.type>
@@ -12281,7 +7549,7 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0x0030</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="offset"/>
                   </UML:TaggedValue.type>
@@ -12289,7 +7557,4741 @@
               </UML:ModelElement.taggedValue>
               <UML:ModelElement.taggedValue>
                 <UML:TaggedValue>
-                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="bits"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>rtf:grfhic</UML:TaggedValue.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:Operation name="LFOData">
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>rtf:LFOData</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="LFOData"/>
+                  </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="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 SttbRgtplc-->
+        <UML:Class xmi.id="SttbRgtplc" name="SttbRgtplc">
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8resource"/>
+          </UML:ModelElement.stereotype>
+          <UML:ModelElement.taggedValue>
+            <UML:TaggedValue>
+              <UML:TaggedValue.dataValue>rtf:SttbRgtplc</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="SttbRgtplc-Table">
+          <UML:Generalization.child>
+            <UML:Class xmi.idref="SttbRgtplc"/>
+          </UML:Generalization.child>
+          <UML:Generalization.parent>
+            <UML:Class xmi.idref="Table"/>
+          </UML:Generalization.parent>
+        </UML:Generalization>
+        <!--Class SttbRgtplc-->
+        <!--Class LFOData-->
+        <UML:Class xmi.id="LFOData" name="LFOData">
+          <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="cp">
+              <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>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/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="bits"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>rtf:cp</UML:TaggedValue.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="LFOData-Properties">
+          <UML:Generalization.child>
+            <UML:Class xmi.idref="LFOData"/>
+          </UML:Generalization.child>
+          <UML:Generalization.parent>
+            <UML:Class xmi.idref="Properties"/>
+          </UML:Generalization.parent>
+        </UML:Generalization>
+        <!--Class LFOData-->
+        <!--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.stereotype>
+            <UML:Stereotype xmi.idref="ww8nopayloadoffset"/>
+          </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="ww8nopayloadoffset"/>
+          </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>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/>
+                  <UML: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>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>0</UML:TaggedValue.dataValue>
+                  <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>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>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>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>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>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>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>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>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>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/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>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: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>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>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>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/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>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/>
+                  <UML: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:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8nopayloadoffset"/>
+          </UML:ModelElement.stereotype>
+          <UML:Classifier.feature>
+            <UML:ModelElement.stereotype>
+              <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+            </UML:ModelElement.stereotype>
+            <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>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/>
+                  <UML: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>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/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>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: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>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>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>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>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>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: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>0x0000</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x0002</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x0004</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x0006</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x0008</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x000A</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <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>0x000A</UML:TaggedValue.dataValue>
+                  <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>0x000A</UML:TaggedValue.dataValue>
+                  <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>0x000A</UML:TaggedValue.dataValue>
+                  <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>0x000A</UML:TaggedValue.dataValue>
+                  <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>0x000A</UML:TaggedValue.dataValue>
+                  <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>0x000A</UML:TaggedValue.dataValue>
+                  <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>0x000A</UML:TaggedValue.dataValue>
+                  <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>0x000A</UML:TaggedValue.dataValue>
+                  <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>0x000A</UML:TaggedValue.dataValue>
+                  <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>0x000A</UML:TaggedValue.dataValue>
+                  <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>0x000A</UML:TaggedValue.dataValue>
+                  <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>0x000A</UML:TaggedValue.dataValue>
+                  <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>0x000C</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x000E</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x0012</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x0013</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <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>0x0013</UML:TaggedValue.dataValue>
+                  <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>0x0013</UML:TaggedValue.dataValue>
+                  <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>0x0013</UML:TaggedValue.dataValue>
+                  <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>0x0013</UML:TaggedValue.dataValue>
+                  <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>0x0013</UML:TaggedValue.dataValue>
+                  <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>0x0014</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x0016</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x0018</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x001C</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x0020</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x0022</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x0024</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x0026</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x0028</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x002A</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x002C</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x002E</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="mask"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue/>
+                  <UML: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>0x0030</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="offset"/>
+                  </UML:TaggedValue.type>
+                </UML:TaggedValue>
+              </UML:ModelElement.taggedValue>
+              <UML:ModelElement.taggedValue>
+                <UML:TaggedValue>
+                  <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
                   <UML:TaggedValue.type>
                     <UML:TagDefinition xmi.idref="shift"/>
                   </UML:TaggedValue.type>
@@ -47987,6 +47989,408 @@
           </UML:ModelElement.taggedValue>
         </UML:Class>
         <!--SPRM sprmTFAutofit-->
+        <!--SPRM sprmTPc-->
+        <UML:Class xmi.id="sprmTPc" name="sprmTPc">
+          <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>0x360D</UML:TaggedValue.dataValue>
+              <UML:TaggedValue.type>
+                <UML:TagDefinition xmi.idref="sprmcode"/>
+              </UML:TaggedValue.type>
+            </UML:TaggedValue>
+          </UML:ModelElement.taggedValue>
+          <UML:ModelElement.taggedValue>
+            <UML:TaggedValue>
+              <UML:TaggedValue.dataValue>rtf:sprmTPc</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:Classifier.feature>
+            <UML:Attribute name="padding">
+              <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>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>0xf0</UML:TaggedValue.dataValue>
+                  <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:padding</UML:TaggedValue.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="pcVert">
+              <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>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>0xc</UML:TaggedValue.dataValue>
+                  <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:pcVert</UML:TaggedValue.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="pcHorz">
+              <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>0</UML:TaggedValue.dataValue>
+                  <UML:TaggedValue.type>
+                    <UML:TagDefinition xmi.idref="shift"/>
+                  </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>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:pcHorz</UML:TaggedValue.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="sprmTPc-Properties">
+          <UML:Generalization.child>
+            <UML:Class xmi.idref="sprmTPc"/>
+          </UML:Generalization.child>
+          <UML:Generalization.parent>
+            <UML:Class xmi.idref="Properties"/>
+          </UML:Generalization.parent>
+        </UML:Generalization>
+        <!--SPRM sprmTPc-->
+        <!--SPRM sprmTDyaAbs-->
+        <UML:Class xmi.id="sprmTDyaAbs" name="sprmTDyaAbs">
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8sprm"/>
+          </UML:ModelElement.stereotype>
+          <UML:ModelElement.taggedValue>
+            <UML:TaggedValue>
+              <UML:TaggedValue.dataValue>0x940F</UML:TaggedValue.dataValue>
+              <UML:TaggedValue.type>
+                <UML:TagDefinition xmi.idref="sprmcode"/>
+              </UML:TaggedValue.type>
+            </UML:TaggedValue>
+          </UML:ModelElement.taggedValue>
+          <UML:ModelElement.taggedValue>
+            <UML:TaggedValue>
+              <UML:TaggedValue.dataValue>rtf:sprmTDyaAbs</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 sprmTDyaAbs-->
+        <!--SPRM sprmTDxaFromText-->
+        <UML:Class xmi.id="sprmTDxaFromText" name="sprmTDxaFromText">
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8sprm"/>
+          </UML:ModelElement.stereotype>
+          <UML:ModelElement.taggedValue>
+            <UML:TaggedValue>
+              <UML:TaggedValue.dataValue>0x9410</UML:TaggedValue.dataValue>
+              <UML:TaggedValue.type>
+                <UML:TagDefinition xmi.idref="sprmcode"/>
+              </UML:TaggedValue.type>
+            </UML:TaggedValue>
+          </UML:ModelElement.taggedValue>
+          <UML:ModelElement.taggedValue>
+            <UML:TaggedValue>
+              <UML:TaggedValue.dataValue>rtf:sprmTDxaFromText</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 sprmTDxaFromText-->
+        <!--SPRM sprmTDyaFromText-->
+        <UML:Class xmi.id="sprmTDyaFromText" name="sprmTDyaFromText">
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8sprm"/>
+          </UML:ModelElement.stereotype>
+          <UML:ModelElement.taggedValue>
+            <UML:TaggedValue>
+              <UML:TaggedValue.dataValue>0x9411</UML:TaggedValue.dataValue>
+              <UML:TaggedValue.type>
+                <UML:TagDefinition xmi.idref="sprmcode"/>
+              </UML:TaggedValue.type>
+            </UML:TaggedValue>
+          </UML:ModelElement.taggedValue>
+          <UML:ModelElement.taggedValue>
+            <UML:TaggedValue>
+              <UML:TaggedValue.dataValue>rtf:sprmTDyaFromText</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 sprmTDyaFromText-->
+        <!--SPRM sprmTDxaFromTextRight-->
+        <UML:Class xmi.id="sprmTDxaFromTextRight" name="sprmTDxaFromTextRight">
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8sprm"/>
+          </UML:ModelElement.stereotype>
+          <UML:ModelElement.taggedValue>
+            <UML:TaggedValue>
+              <UML:TaggedValue.dataValue>0x941E</UML:TaggedValue.dataValue>
+              <UML:TaggedValue.type>
+                <UML:TagDefinition xmi.idref="sprmcode"/>
+              </UML:TaggedValue.type>
+            </UML:TaggedValue>
+          </UML:ModelElement.taggedValue>
+          <UML:ModelElement.taggedValue>
+            <UML:TaggedValue>
+              <UML:TaggedValue.dataValue>rtf:sprmTDxaFromTextRight</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 sprmTDxaFromTextRight-->
+        <!--SPRM sprmTDyaFromTextBottom-->
+        <UML:Class xmi.id="sprmTDyaFromTextBottom" name="sprmTDyaFromTextBottom">
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8sprm"/>
+          </UML:ModelElement.stereotype>
+          <UML:ModelElement.taggedValue>
+            <UML:TaggedValue>
+              <UML:TaggedValue.dataValue>0x941F</UML:TaggedValue.dataValue>
+              <UML:TaggedValue.type>
+                <UML:TagDefinition xmi.idref="sprmcode"/>
+              </UML:TaggedValue.type>
+            </UML:TaggedValue>
+          </UML:ModelElement.taggedValue>
+          <UML:ModelElement.taggedValue>
+            <UML:TaggedValue>
+              <UML:TaggedValue.dataValue>rtf:sprmTDyaFromTextBottom</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 sprmTDyaFromTextBottom-->
+        <!--SPRM sprmTFNoAllowOverlap-->
+        <UML:Class xmi.id="sprmTFNoAllowOverlap" name="sprmTFNoAllowOverlap">
+          <UML:ModelElement.stereotype>
+            <UML:Stereotype xmi.idref="ww8sprm"/>
+          </UML:ModelElement.stereotype>
+          <UML:ModelElement.taggedValue>
+            <UML:TaggedValue>
+              <UML:TaggedValue.dataValue>0x3465</UML:TaggedValue.dataValue>
+              <UML:TaggedValue.type>
+                <UML:TagDefinition xmi.idref="sprmcode"/>
+              </UML:TaggedValue.type>
+            </UML:TaggedValue>
+          </UML:ModelElement.taggedValue>
+          <UML:ModelElement.taggedValue>
+            <UML:TaggedValue>
+              <UML:TaggedValue.dataValue>rtf:sprmTFNoAllowOverlap</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 sprmTFNoAllowOverlap-->
         <!--SPRMS-->
         <!--DFFS-->
         <!--DFF UDefProp-->
-- 
cgit 


From 8b8f0fdcd980e1f19274c38f42aef27c1c380d7d Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 2 Jun 2010 17:03:29 +0200
Subject: writerfilter08: temporal fix: DOCX document not recognized

---
 oox/source/helper/zipstorage.cxx | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/oox/source/helper/zipstorage.cxx b/oox/source/helper/zipstorage.cxx
index 384870430c39..d17259ef692a 100644
--- a/oox/source/helper/zipstorage.cxx
+++ b/oox/source/helper/zipstorage.cxx
@@ -73,8 +73,10 @@ ZipStorage::ZipStorage(
 
             TODO: #i105410# switch to 'OFOPXMLFormat' and use its
             implementation of relations handling. */
+
         mxStorage = ::comphelper::OStorageHelper::GetStorageOfFormatFromInputStream(
-            ZIP_STORAGE_FORMAT_STRING, rxInStream, rxFactory, sal_True );
+            ZIP_STORAGE_FORMAT_STRING, rxInStream, rxFactory,
+            sal_False /* DEV300_m80: Was sal_True, but DOCX and others did not load */ );
     }
     catch( Exception& )
     {
-- 
cgit 


From b4b0d9e9f9b6ff5a3626afddccdf2d9f36ce39e5 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Fri, 4 Jun 2010 14:07:03 +0200
Subject: writerfilter08: #i112027#: applied patch and verified

---
 writerfilter/source/ooxml/OOXMLFactory.cxx | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/writerfilter/source/ooxml/OOXMLFactory.cxx b/writerfilter/source/ooxml/OOXMLFactory.cxx
index 6fac03898e42..964d9e1cb5ee 100755
--- a/writerfilter/source/ooxml/OOXMLFactory.cxx
+++ b/writerfilter/source/ooxml/OOXMLFactory.cxx
@@ -263,7 +263,13 @@ OOXMLFactory::createFastChildContext(OOXMLFastContextHandler * pHandler,
 
     OOXMLFactory_ns::Pointer_t pFactory = getFactoryForNamespace(nDefine);
 
-    return createFastChildContextFromFactory(pHandler, pFactory, Element);
+    uno::Reference< xml::sax::XFastContextHandler> ret;
+
+    //Avoid handling unknown tokens and recursing to death
+    if ((Element & 0xffff) < OOXML_FAST_TOKENS_END)
+        ret = createFastChildContextFromFactory(pHandler, pFactory, Element);
+
+    return ret;
 }
 
 void OOXMLFactory::characters(OOXMLFastContextHandler * pHandler,
-- 
cgit 


From ae39e55e174bcef4ef6387351a76da5f723fcb2d Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Fri, 11 Jun 2010 14:21:32 +0200
Subject: writerfilter08: removed temporary fix

---
 oox/source/helper/zipstorage.cxx | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/oox/source/helper/zipstorage.cxx b/oox/source/helper/zipstorage.cxx
index d17259ef692a..384870430c39 100644
--- a/oox/source/helper/zipstorage.cxx
+++ b/oox/source/helper/zipstorage.cxx
@@ -73,10 +73,8 @@ ZipStorage::ZipStorage(
 
             TODO: #i105410# switch to 'OFOPXMLFormat' and use its
             implementation of relations handling. */
-
         mxStorage = ::comphelper::OStorageHelper::GetStorageOfFormatFromInputStream(
-            ZIP_STORAGE_FORMAT_STRING, rxInStream, rxFactory,
-            sal_False /* DEV300_m80: Was sal_True, but DOCX and others did not load */ );
+            ZIP_STORAGE_FORMAT_STRING, rxInStream, rxFactory, sal_True );
     }
     catch( Exception& )
     {
-- 
cgit 


From 3be39ba02ea20768b3e8abb43233fb183d434317 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Fri, 16 Jul 2010 17:14:15 +0200
Subject: writerfilter09: no equivalents for mirrorIndent and textDirection in
 ODF

---
 writerfilter/source/dmapper/DomainMapper.cxx | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index f8d3bab02aff..10907ff7bd53 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -3993,6 +3993,10 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
             rContext->Insert( PROP_NUMBERING_LEVEL, true, uno::makeAny(pStyleSheetProperties->GetListLevel()), false);
     }
     break;
+    case NS_ooxml::LN_CT_PPrBase_mirrorIndents:
+    case NS_ooxml::LN_CT_PPrBase_textDirection:
+        /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+        break;
     case NS_ooxml::LN_EG_RPrBase_rStyle:
         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
         {
-- 
cgit 


From a19660d348092c86630554836fa7f4c92c26003a Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Fri, 30 Jul 2010 15:37:04 +0200
Subject: writerfilter09: make compile

---
 writerfilter/source/dmapper/DomainMapper.cxx      | 16 ---------------
 writerfilter/source/dmapper/DomainMapper_Impl.cxx |  1 -
 writerfilter/source/dmapper/SettingsTable.cxx     | 25 ++++-------------------
 3 files changed, 4 insertions(+), 38 deletions(-)

diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 285d55308f00..65dfb4c5fcec 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -4005,10 +4005,6 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
             rContext->Insert( PROP_NUMBERING_LEVEL, true, uno::makeAny(pStyleSheetProperties->GetListLevel()), false);
     }
     break;
-    case NS_ooxml::LN_CT_PPrBase_mirrorIndents:
-    case NS_ooxml::LN_CT_PPrBase_textDirection:
-        /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
-        break;
     case NS_ooxml::LN_EG_RPrBase_rStyle:
         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
         {
@@ -4241,18 +4237,6 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
         }
     }
     break;
-    case NS_ooxml::LN_ffdata:
-    {
-        writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
-        if (pProperties.get() != NULL)
-        {
-            FFDataHandler::Pointer_t pFFDataHandler(new FFDataHandler());
-
-            pProperties->resolve(*pFFDataHandler);
-            m_pImpl->SetFieldFFData(pFFDataHandler);
-        }
-    }
-    break;
     default:
         {
 #ifdef DEBUG_DOMAINMAPPER
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 4c176b59b4ef..92349beaf70d 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -627,7 +627,6 @@ void DomainMapper_Impl::finishParagraph( PropertyMapPtr pPropertyMap )
 
 #ifdef DEBUG_DOMAINMAPPER
     dmapper_logger->attribute("isTextAppend", xTextAppend.is());
-    dmapper_logger->attribute("isIgnor", m_TableManager.isIgnore());
 #endif
 
     if(xTextAppend.is() && ! getTableManager( ).isIgnore())
diff --git a/writerfilter/source/dmapper/SettingsTable.cxx b/writerfilter/source/dmapper/SettingsTable.cxx
index bc1a86611889..38dbacceb989 100755
--- a/writerfilter/source/dmapper/SettingsTable.cxx
+++ b/writerfilter/source/dmapper/SettingsTable.cxx
@@ -28,14 +28,14 @@
  *
  ************************************************************************/
 
-#include <resourcemodel/ResourceModelHelper.hxx>
+#include <stdio.h>
+#include <rtl/ustring.hxx>
+#include <com/sun/star/beans/XPropertySet.hpp>
 #include <SettingsTable.hxx>
+#include <resourcemodel/ResourceModelHelper.hxx>
 #include <doctok/resourceids.hxx>
 #include <ooxml/resourceids.hxx>
-#include <stdio.h>
-#include <ListTable.hxx>
 #include <ConversionHelper.hxx>
-#include <rtl/ustring.hxx>
 
 #ifdef DEBUG_DOMAINMAPPER
 #include <resourcemodel/QNameToString.hxx>
@@ -54,8 +54,6 @@ struct SettingsTable_Impl
     DomainMapper&       m_rDMapper;
     const uno::Reference< lang::XMultiServiceFactory > m_xTextFactory;
 
-    ListTablePtr        m_pListTable;
-
     ::rtl::OUString     m_sCharacterSpacing;
     ::rtl::OUString     m_sDecimalSymbol;
     ::rtl::OUString     m_sListSeparatorForFields; //2.15.1.56 listSeparator (List Separator for Field Code Evaluation)
@@ -99,13 +97,6 @@ struct SettingsTable_Impl
     , m_nCryptSpinCount(0)
     {}
 
-    ListTablePtr GetListTable()
-    {
-    if(!m_pListTable)
-        m_pListTable.reset(
-                   new ListTable( m_rDMapper, m_xTextFactory ));
-    return m_pListTable;
-    }
 };
 
 SettingsTable::SettingsTable(DomainMapper& rDMapper, const uno::Reference< lang::XMultiServiceFactory > xTextFactory) :
@@ -197,14 +188,6 @@ void SettingsTable::sprm(Sprm& rSprm)
     }
     break;
     /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
-    case NS_ooxml::LN_CT_Numbering_num: // 92613;
-    /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
-    case NS_ooxml::LN_CT_Numbering_abstractNum: //  92612;
-    {
-        m_pImpl->GetListTable()->sprm( rSprm );
-    }
-    break;
-    /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
     case NS_ooxml::LN_CT_Settings_stylePaneFormatFilter: // 92493;
     break;
     /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
-- 
cgit 


From 762a32d4815070199ca4398107b07ec8e864585a Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 5 Aug 2010 15:51:31 +0200
Subject: #i111033# factoryimpl_ns.xsl: better detection of resource for
 attributes, model.xml: ST_Percentage was undefined for wml.

---
 writerfilter/source/ooxml/factoryimpl_ns.xsl | 91 ++++++++++++++++++----------
 writerfilter/source/ooxml/model.xml          |  5 ++
 2 files changed, 65 insertions(+), 31 deletions(-)

diff --git a/writerfilter/source/ooxml/factoryimpl_ns.xsl b/writerfilter/source/ooxml/factoryimpl_ns.xsl
index 533c3d16ae23..4a3fda3622b3 100644
--- a/writerfilter/source/ooxml/factoryimpl_ns.xsl
+++ b/writerfilter/source/ooxml/factoryimpl_ns.xsl
@@ -143,6 +143,47 @@ OOXMLFactory_ns::Pointer_t </xsl:text>
 </xsl:text>
 </xsl:template>
 
+<!--
+    Returns resource for attribute.
+-->
+
+<xsl:template name="resourceforattribute">
+  <xsl:variable name="mynsid" select="generate-id(ancestor::namespace)"/>
+  <xsl:for-each select="rng:ref">
+    <xsl:variable name="name" select="@name"/>
+    <xsl:variable name="resource1">
+      <xsl:for-each select="key('context-resource', @name)[generate-id(ancestor::namespace) = $mynsid]">
+        <xsl:value-of select="@resource"/>
+      </xsl:for-each>
+    </xsl:variable>
+    <xsl:choose>
+      <xsl:when test="string-length($resource1) > 0">
+        <xsl:value-of select="$resource1"/>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$name]">
+          <xsl:call-template name="resourceforattribute"/>
+        </xsl:for-each>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:for-each>
+  <xsl:for-each select=".//rng:text">
+    <xsl:text>String</xsl:text>
+  </xsl:for-each>
+  <xsl:for-each select=".//rng:data[@type='base64Binary']">
+    <xsl:text>String</xsl:text>
+  </xsl:for-each>
+  <xsl:for-each select=".//rng:data[@type='boolean']">
+    <xsl:text>Boolean</xsl:text>
+  </xsl:for-each>
+  <xsl:for-each select=".//rng:data[@type='unsignedInt']">
+    <xsl:text>Integer</xsl:text>
+  </xsl:for-each>
+  <xsl:for-each select=".//rng:data[@type='int']">
+    <xsl:text>Integer</xsl:text>
+  </xsl:for-each>
+</xsl:template>
+
 <!-- 
 
 creates code block in OOXMLFactory_<namespace>::createAttributeToResourceMap 
@@ -164,42 +205,30 @@ for a rng:define
       // </xsl:text>
       <xsl:value-of select="$defname"/>
     </xsl:if>
-    <xsl:variable name="mynsid" select="generate-id(ancestor::namespace)"/>
     <xsl:variable name="resource">
-      <xsl:for-each select="rng:ref">
-        <xsl:for-each select="key('context-resource', @name)[generate-id(ancestor::namespace) = $mynsid]">
-          <xsl:value-of select="@resource"/>
-        </xsl:for-each>
-      </xsl:for-each>
-      <xsl:for-each select=".//rng:text">
-        <xsl:text>String</xsl:text>
-      </xsl:for-each>
-      <xsl:for-each select=".//rng:data[@type='base64Binary']">
-        <xsl:text>String</xsl:text>
-      </xsl:for-each>
-    </xsl:variable>
-
-    <xsl:variable name="refdefine1">
-      <xsl:for-each select="rng:ref">
-        <xsl:variable name="refname" select="@name"/>
-        <xsl:for-each select="ancestor::rng:grammar/rng:define[@name=$refname]">
-          <xsl:call-template name="idfordefine"/>
-        </xsl:for-each>
-      </xsl:for-each>
-    </xsl:variable>
-    <xsl:variable name="refdefine">
-      <xsl:choose>
-        <xsl:when test="string-length($refdefine1) > 0">
-          <xsl:value-of select="$refdefine1"/>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:text>0</xsl:text>
-        </xsl:otherwise>
-      </xsl:choose>
+      <xsl:call-template name="resourceforattribute"/>
     </xsl:variable>
 
     <xsl:choose>
       <xsl:when test="string-length($resource) > 0">
+        <xsl:variable name="refdefine1">
+          <xsl:for-each select="rng:ref">
+            <xsl:variable name="refname" select="@name"/>
+            <xsl:for-each select="ancestor::rng:grammar/rng:define[@name=$refname]">
+              <xsl:call-template name="idfordefine"/>
+            </xsl:for-each>
+          </xsl:for-each>
+        </xsl:variable>
+        <xsl:variable name="refdefine">
+          <xsl:choose>
+            <xsl:when test="string-length($refdefine1) > 0">
+              <xsl:value-of select="$refdefine1"/>
+            </xsl:when>
+            <xsl:otherwise>
+              <xsl:text>0</xsl:text>
+            </xsl:otherwise>
+          </xsl:choose>
+        </xsl:variable>
         <xsl:text>
         (*pMap)[</xsl:text>
         <xsl:call-template name="fasttoken"/>
diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
index b7046a495bd8..f78c0be0b2f5 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -13962,6 +13962,11 @@
           </choice>
         </list>
       </define>
+      <define name="ST_Percentage">
+        <data type="int">
+          <xs:documentation>Percentage</xs:documentation>
+        </data>
+      </define>
       <define name="CT_Zoom">
         <optional>
           <attribute name="val">
-- 
cgit 


From cf56e8bec1f2a35f39cabcb121bb11485f077ddf Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Fri, 6 Aug 2010 13:26:50 +0200
Subject: writerfilter09: added debugging code for PositionHandler

---
 writerfilter/source/dmapper/GraphicHelpers.cxx | 37 ++++++++++++++++++++++++--
 1 file changed, 35 insertions(+), 2 deletions(-)

diff --git a/writerfilter/source/dmapper/GraphicHelpers.cxx b/writerfilter/source/dmapper/GraphicHelpers.cxx
index c77f2dd55d3e..af55bf2f41ca 100644
--- a/writerfilter/source/dmapper/GraphicHelpers.cxx
+++ b/writerfilter/source/dmapper/GraphicHelpers.cxx
@@ -8,6 +8,11 @@
 #include <com/sun/star/text/RelOrientation.hpp>
 #include <com/sun/star/text/WrapTextMode.hpp>
 
+#ifdef DEBUG_DOMAINMAPPER
+#include <resourcemodel/QNameToString.hxx>
+#include "dmapperloggers.hxx"
+#endif
+
 #include <iostream>
 using namespace std;
 
@@ -30,6 +35,12 @@ PositionHandler::~PositionHandler( )
 
 void PositionHandler::attribute( Id aName, Value& rVal )
 {
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->startElement("PositionHandler.attribute");
+    dmapper_logger->attribute("name", (*QNameToString::Instance())(aName));
+    dmapper_logger->attribute("value", rVal.toString());
+#endif
+
     sal_Int32 nIntValue = rVal.getInt( );
     switch ( aName )
     {
@@ -85,12 +96,26 @@ void PositionHandler::attribute( Id aName, Value& rVal )
                 }
             }
             break;
-        default:;
+        default:
+#ifdef DEBUG_DOMAINMAPPER
+            dmapper_logger->element("unhandled");
+#endif
+            break;
     }
+
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->endElement("PositionHandler.attribute");
+#endif
 }
 
 void PositionHandler::sprm( Sprm& rSprm )
 {
+#ifdef DEBUG_DOMAINMAPPER
+    string sSprm = rSprm.toString();
+    dmapper_logger->startElement("PositionHandler.sprm");
+    dmapper_logger->attribute("sprm", sSprm);
+#endif
+
     Value::Pointer_t pValue = rSprm.getValue();
     sal_Int32 nIntValue = pValue->getInt();
 
@@ -153,8 +178,16 @@ void PositionHandler::sprm( Sprm& rSprm )
         case NS_ooxml::LN_CT_PosH_posOffset:
         case NS_ooxml::LN_CT_PosV_posOffset:
             m_nPosition = ConversionHelper::convertEMUToMM100( nIntValue );
-        default:;
+        default:
+#ifdef DEBUG_DOMAINMAPPER
+            dmapper_logger->element("unhandled");
+#endif
+            break;
     }
+
+#ifdef DEBUG_DOMAINMAPPER
+    dmapper_logger->endElement("PositionHandler.sprm");
+#endif
 }
 
 WrapHandler::WrapHandler( ) :
-- 
cgit 


From decb79d19d71f5250052c8b86e256f7f66fe2803 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Fri, 6 Aug 2010 16:36:58 +0200
Subject: writerfilter09: factory{impl}_ns.xsl: handle defines that have
 resource Value but no attribute

---
 writerfilter/source/ooxml/factory_ns.xsl     |   7 +-
 writerfilter/source/ooxml/factoryimpl_ns.xsl | 114 ++++++++++++++++++++-------
 2 files changed, 89 insertions(+), 32 deletions(-)

diff --git a/writerfilter/source/ooxml/factory_ns.xsl b/writerfilter/source/ooxml/factory_ns.xsl
index 44b5c824859f..53a1075130ca 100644
--- a/writerfilter/source/ooxml/factory_ns.xsl
+++ b/writerfilter/source/ooxml/factory_ns.xsl
@@ -69,19 +69,18 @@
 
 <xsl:template name="factoryactiondecls">
     <xsl:variable name="ns" select="@name"/>
-    <xsl:for-each select="resource/action">
+    <xsl:for-each select="resource/action[not(@name='characters')]">
         <xsl:sort select="@name"/>
         <xsl:if test="generate-id(key('actions', @name)[ancestor::namespace/@name=$ns][1]) = generate-id(.)">
             <xsl:text>
     void </xsl:text>
             <xsl:value-of select="@name"/>
             <xsl:text>Action(OOXMLFastContextHandler * pHandler</xsl:text>
-            <xsl:if test="@name='characters'">
-                <xsl:text>, const ::rtl::OUString &amp; sText</xsl:text>
-            </xsl:if>
             <xsl:text>);</xsl:text>
         </xsl:if>
     </xsl:for-each>
+    <xsl:text>
+    virtual void charactersAction(OOXMLFastContextHandler * pHandler, const ::rtl::OUString &amp; sText);</xsl:text>
 </xsl:template>
 
 <!-- factorydecl -->
diff --git a/writerfilter/source/ooxml/factoryimpl_ns.xsl b/writerfilter/source/ooxml/factoryimpl_ns.xsl
index 4a3fda3622b3..2ec75b701205 100644
--- a/writerfilter/source/ooxml/factoryimpl_ns.xsl
+++ b/writerfilter/source/ooxml/factoryimpl_ns.xsl
@@ -570,42 +570,97 @@ CreateElementMapPointer </xsl:text>
 
 <!-- factoryaction -->
 <xsl:template name="factoryaction">
-    <xsl:param name="action"/>
-    <xsl:text>
-void </xsl:text>
-    <xsl:call-template name="factoryclassname"/>
-    <xsl:text>::</xsl:text>
-    <xsl:value-of select="$action"/>
-    <xsl:text>Action(OOXMLFastContextHandler * pHandler</xsl:text>
+  <xsl:param name="action"/>
+  <xsl:text>&#xa;&#xa;</xsl:text>
+  <xsl:text>void </xsl:text>
+  <xsl:call-template name="factoryclassname"/>
+  <xsl:text>::</xsl:text>
+  <xsl:value-of select="$action"/>
+  <xsl:text>Action(OOXMLFastContextHandler * pHandler</xsl:text>
+  <xsl:if test="$action='characters'">
+    <xsl:text>, const ::rtl::OUString &amp; sText</xsl:text>
+  </xsl:if>
+  <xsl:text>)&#xa;</xsl:text>
+  <xsl:text>{&#xa;</xsl:text>
+  <xsl:variable name="switch1block">
+    <xsl:for-each select="resource[action/@name=$action]">
+      <xsl:text>
+      </xsl:text>
+      <xsl:call-template name="caselabeldefine"/>
+      <xsl:for-each select="action[@name=$action]">
+        <xsl:call-template name="factorychooseaction"/>
+      </xsl:for-each>
+      <xsl:text>    break;&#xa;</xsl:text>
+    </xsl:for-each>
+  </xsl:variable>
+  <xsl:variable name="switchblock2">
     <xsl:if test="$action='characters'">
-        <xsl:text>, const ::rtl::OUString &amp; sText</xsl:text>
+      <xsl:for-each select="resource[@resource='Value']">
+        <xsl:if test="count(attribute) = 0">
+          <xsl:variable name="name" select="@name"/>
+          <xsl:text>    </xsl:text>
+          <xsl:call-template name="caselabeldefine"/>
+          <xsl:text>&#xa;</xsl:text>
+          <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$name]">
+            <xsl:for-each select="rng:ref">
+              <xsl:call-template name="charactersactionforvalues"/>
+            </xsl:for-each>
+          </xsl:for-each>
+          <xsl:text>        break;&#xa;</xsl:text>
+      </xsl:if>
+      </xsl:for-each>
     </xsl:if>
-    <xsl:text>)
-{
-    switch (pHandler->getDefine())
-    {</xsl:text>
-    <xsl:for-each select="resource[action/@name=$action]">
-        <xsl:text>
-    </xsl:text>
-        <xsl:call-template name="caselabeldefine"/>
-        <xsl:for-each select="action[@name=$action]">
-            <xsl:call-template name="factorychooseaction"/>
-        </xsl:for-each>
-        <xsl:text>
-        break;</xsl:text>
+  </xsl:variable>
+  <xsl:if test="string-length($switch1block) > 0 or string-length($switchblock2) > 0">
+    <xsl:text>    sal_uInt32 nDefine = pHandler->getDefine();&#xa;</xsl:text>
+  </xsl:if>
+  <xsl:if test="string-length($switch1block) > 0">
+    <xsl:text>    switch (nDefine)&#xa;</xsl:text>
+    <xsl:text>    {&#xa;</xsl:text>
+    <xsl:value-of select="$switch1block"/>
+    <xsl:text>    default:&#xa;</xsl:text>
+    <xsl:text>        break;&#xa;</xsl:text>
+    <xsl:text>    }&#xa;</xsl:text>
+  </xsl:if>
+  <xsl:if test="string-length($switchblock2) > 0">
+    <xsl:text>    OOXMLFastContextHandlerValue * pValueHandler = dynamic_cast&lt;OOXMLFastContextHandlerValue *&gt;(pHandler);&#xa;</xsl:text>
+    <xsl:text>    switch (nDefine)&#xa;</xsl:text>
+    <xsl:text>    {&#xa;</xsl:text>
+    <xsl:value-of select="$switchblock2"/>
+    <xsl:text>    default:&#xa;</xsl:text>
+    <xsl:text>        break;&#xa;</xsl:text>
+    <xsl:text>    }&#xa;</xsl:text>
+  </xsl:if>
+  <xsl:text>}&#xa;</xsl:text>
+</xsl:template>
+
+<xsl:template name="charactersactionforvalues">
+  <xsl:variable name="name" select="@name"/>
+  <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$name]">
+    <xsl:text>        {&#xa;</xsl:text>
+    <xsl:text>            // </xsl:text>
+    <xsl:value-of select="@name"/>
+    <xsl:text>&#xa;</xsl:text>
+    <xsl:for-each select="rng:data[@type='int']">
+      <xsl:text>            OOXMLValue::Pointer_t pValue(new OOXMLIntegerValue(sText));&#xa;</xsl:text>
+      <xsl:text>            pValueHandler->setValue(pValue);&#xa;</xsl:text>
     </xsl:for-each>
-    <xsl:text>
-    default:
-        break;
-    }
-}
-</xsl:text>
+    <xsl:for-each select="rng:list">
+      <xsl:text>            ListValueMapPointer pListValueMap = getListValueMap(nDefine);&#xa;</xsl:text>
+      <xsl:text>            if (pListValueMap.get() != NULL)&#xa;</xsl:text>
+      <xsl:text>            {&#xa;</xsl:text>
+      <xsl:text>                OOXMLValue::Pointer_t pValue(new OOXMLIntegerValue((*pListValueMap)[sText]));&#xa;</xsl:text>
+      <xsl:text>                pValueHandler->setValue(pValue);</xsl:text>
+      <xsl:text>            }&#xa;</xsl:text>
+    </xsl:for-each>
+    <xsl:text>        }&#xa;</xsl:text>
+  </xsl:for-each>
 </xsl:template>
 
 <!-- factoryactions -->
 <xsl:template name="factoryactions">
     <xsl:variable name="ns" select="@name"/>
-    <xsl:for-each select="resource/action">
+    <xsl:for-each select="resource/action[not(@name='characters')]">
         <xsl:sort select="@name"/>
         <xsl:if test="generate-id(key('actions', @name)[ancestor::namespace/@name=$ns][1]) = generate-id(.)">
             <xsl:variable name="name" select="@name"/>
@@ -616,6 +671,9 @@ void </xsl:text>
             </xsl:for-each>
         </xsl:if>
     </xsl:for-each>
+    <xsl:call-template name="factoryaction">
+      <xsl:with-param name="action">characters</xsl:with-param>
+    </xsl:call-template>
 </xsl:template>
 
 <xsl:template name="factorygetdefinename">
-- 
cgit 


From a4c6cfeea8940aab8e9a42908be029bc00b1936c Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Mon, 9 Aug 2010 13:22:25 +0200
Subject: #i111652#: TableStyleSheetEntry::GetProperties: prevent endless
 recursion using stack of handled styles

---
 writerfilter/source/dmapper/StyleSheetTable.cxx | 20 ++++++++++++++++----
 writerfilter/source/dmapper/StyleSheetTable.hxx |  7 ++++++-
 2 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index 5f2e2268abb8..9dd5503693a7 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -180,17 +180,29 @@ void TableStyleSheetEntry::AddTblStylePr( TblStyleType nType, PropertyMapPtr pPr
     m_aStyles[nType] = pProps;
 }
 
-PropertyMapPtr TableStyleSheetEntry::GetProperties( sal_Int32 nMask )
+PropertyMapPtr TableStyleSheetEntry::GetProperties( sal_Int32 nMask, StyleSheetEntryDequePtr pStack )
 {
     PropertyMapPtr pProps( new PropertyMap );
 
     // First get the parent properties
     StyleSheetEntryPtr pEntry = m_pStyleSheet->FindParentStyleSheet( sBaseStyleIdentifier );
 
-    if ( pEntry.get( ) )
+    if ( pEntry.get( ))
     {
-        TableStyleSheetEntry* pParent = static_cast<TableStyleSheetEntry *>( pEntry.get( ) );
-        pProps->insert( pParent->GetProperties( nMask ) );
+        if (pStack.get() == NULL)
+            pStack.reset(new StyleSheetEntryDeque());
+
+        StyleSheetEntryDeque::const_iterator aIt = find(pStack->begin(), pStack->end(), pEntry);
+
+        if (aIt != pStack->end())
+        {
+            pStack->push_back(pEntry);
+
+            TableStyleSheetEntry* pParent = static_cast<TableStyleSheetEntry *>( pEntry.get( ) );
+            pProps->insert( pParent->GetProperties( nMask ), pStack );
+
+            pStack->pop_back();
+        }
     }
 
     // And finally get the mask ones
diff --git a/writerfilter/source/dmapper/StyleSheetTable.hxx b/writerfilter/source/dmapper/StyleSheetTable.hxx
index e4441bcb05fe..657b447fa979 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.hxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.hxx
@@ -85,6 +85,8 @@ public:
 };
 
 typedef boost::shared_ptr<StyleSheetEntry> StyleSheetEntryPtr;
+typedef ::std::deque<StyleSheetEntryPtr> StyleSheetEntryDeque;
+typedef boost::shared_ptr<StyleSheetEntryDeque> StyleSheetEntryDequePtr;
 
 class DomainMapper;
 class StyleSheetTable :
@@ -146,7 +148,10 @@ public:
     // Gets all the properties
     //     + corresponding to the mask,
     //     + from the parent styles
-    PropertyMapPtr GetProperties( sal_Int32 nMask );
+    //
+    // @param mask      mask describing which properties to return
+    // @param pStack    already processed StyleSheetEntries
+    PropertyMapPtr GetProperties( sal_Int32 nMask, StyleSheetEntryDequePtr pStack = StyleSheetEntryDequePtr());
 
 #ifdef DEBUG_DOMAINMAPPER
     virtual XMLTag::Pointer_t toTag();
-- 
cgit 


From 60566277eb6bf40e9f72a95eed597d9b1b5d54dd Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 10 Aug 2010 17:12:32 +0200
Subject: writerfilter09: TagLogger: indented output, cleaning up

---
 writerfilter/inc/resourcemodel/TagLogger.hxx    |   5 +-
 writerfilter/source/resourcemodel/TagLogger.cxx | 512 +++++++++++++-----------
 2 files changed, 270 insertions(+), 247 deletions(-)

diff --git a/writerfilter/inc/resourcemodel/TagLogger.hxx b/writerfilter/inc/resourcemodel/TagLogger.hxx
index 055656832761..1692f3cd1c8d 100644
--- a/writerfilter/inc/resourcemodel/TagLogger.hxx
+++ b/writerfilter/inc/resourcemodel/TagLogger.hxx
@@ -86,7 +86,7 @@ namespace writerfilter
         const string & getTag() const;
         string toString() const;
 
-        ostream & output(ostream & o) const;
+        ostream & output(ostream & o, const string & sIndent = "") const;
     };
 
     class WRITERFILTER_DLLPUBLIC TagLogger
@@ -139,8 +139,7 @@ namespace writerfilter
         IdToString::Pointer_t mpIdToString;
 
     public:
-        PropertySetToTagHandler(IdToString::Pointer_t pIdToString)
-        : mpTag(new XMLTag("propertyset")), mpIdToString(pIdToString) {}
+        PropertySetToTagHandler(IdToString::Pointer_t pIdToString);
         virtual ~PropertySetToTagHandler();
 
         XMLTag::Pointer_t getTag() const { return mpTag; }
diff --git a/writerfilter/source/resourcemodel/TagLogger.cxx b/writerfilter/source/resourcemodel/TagLogger.cxx
index f19bef7c01d1..3760923aa523 100644
--- a/writerfilter/source/resourcemodel/TagLogger.cxx
+++ b/writerfilter/source/resourcemodel/TagLogger.cxx
@@ -34,28 +34,28 @@
 
 namespace writerfilter
 {
-    XMLTag::Pointer_t XMLTag::NIL(new XMLTag("NIL"));
+XMLTag::Pointer_t XMLTag::NIL(new XMLTag("NIL"));
 
-    void XMLTag::addAttr(string sName, string sValue)
-    {
-        XMLAttribute aAttr(sName, sValue);
+void XMLTag::addAttr(string sName, string sValue)
+{
+    XMLAttribute aAttr(sName, sValue);
 
-        mAttrs.push_back(aAttr);
-    }
+    mAttrs.push_back(aAttr);
+}
 
-    void XMLTag::addAttr(string sName, const ::rtl::OUString & sValue)
-    {
-        addAttr(sName,
-                OUStringToOString
-                (sValue, RTL_TEXTENCODING_ASCII_US).getStr());
-    }
+void XMLTag::addAttr(string sName, const ::rtl::OUString & sValue)
+{
+    addAttr(sName,
+            OUStringToOString
+            (sValue, RTL_TEXTENCODING_ASCII_US).getStr());
+}
 
-    void XMLTag::addAttr(string sName, sal_uInt32 nValue)
-    {
-        static char buffer[256];
-        snprintf(buffer, sizeof(buffer), "%" SAL_PRIdINT32, nValue);
-        addAttr(sName, buffer);
-    }
+void XMLTag::addAttr(string sName, sal_uInt32 nValue)
+{
+    static char buffer[256];
+    snprintf(buffer, sizeof(buffer), "%" SAL_PRIdINT32, nValue);
+    addAttr(sName, buffer);
+}
 
 void XMLTag::addAttr(string sName, uno::Any aAny)
 {
@@ -111,322 +111,346 @@ void XMLTag::addAttr(string sName, uno::Any aAny)
             aTmpStrString);
 }
 
-    void XMLTag::addTag(XMLTag::Pointer_t pTag)
-    {
-        if (pTag != XMLTag::Pointer_t())
-            mTags.push_back(pTag);
-    }
+void XMLTag::addTag(XMLTag::Pointer_t pTag)
+{
+    if (pTag != XMLTag::Pointer_t())
+        mTags.push_back(pTag);
+}
 
-    void XMLTag::chars(const string & rChars)
-    {
-        mChars += rChars;
-    }
+void XMLTag::chars(const string & rChars)
+{
+    mChars += rChars;
+}
 
 void XMLTag::chars(const ::rtl::OUString & rChars)
 {
     chars(OUStringToOString(rChars, RTL_TEXTENCODING_ASCII_US).getStr());
 }
 
-    const string & XMLTag::getTag() const
-    {
-        return mTag;
-    }
+const string & XMLTag::getTag() const
+{
+    return mTag;
+}
 
-    string XMLTag::toString() const
-    {
-        if (mChars.length() > 0)
-            return mChars;
+string XMLTag::toString() const
+{
+    if (mChars.length() > 0)
+        return mChars;
 
-        string sResult;
+    string sResult;
 
-        if (mMode == START || mMode == COMPLETE)
-        {
-            sResult += "<" + mTag;
+    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 += "\"";
+        XMLAttributes_t::const_iterator aIt = mAttrs.begin();
+        while (aIt != mAttrs.end())
+        {
+            sResult += " ";
+            sResult += aIt->mName;
+            sResult += "=\"";
+            sResult += xmlify(aIt->mValue);
+            sResult += "\"";
 
-                aIt++;
-            }
+            aIt++;
+        }
 
-            sResult +=">";
+        sResult +=">";
 
-            if (mTags.size() > 0)
+        if (mTags.size() > 0)
+        {
+            XMLTags_t::const_iterator aItTags = mTags.begin();
+            while (aItTags != mTags.end())
             {
-                XMLTags_t::const_iterator aItTags = mTags.begin();
-                while (aItTags != mTags.end())
-                {
-                    if ((*aItTags).get() != NULL)
-                        sResult += (*aItTags)->toString();
-
-                    aItTags++;
-                }
+                if ((*aItTags).get() != NULL)
+                    sResult += (*aItTags)->toString();
+
+                aItTags++;
             }
         }
+    }
 
-        if (mMode == END || mMode == COMPLETE)
-            sResult += "</" + mTag + ">";
+    if (mMode == END || mMode == COMPLETE)
+        sResult += "</" + mTag + ">";
 
-        return sResult;
-    }
+    return sResult;
+}
+
+ostream & XMLTag::output(ostream & o, const string & sIndent) const
+{
+    bool bHasContent = mChars.size() > 0 || mTags.size() > 0;
 
-    ostream & XMLTag::output(ostream & o) const
+    if (mMode == START || mMode == COMPLETE)
     {
-        if (mMode == START || mMode == COMPLETE)
-        {
-            o << "<" << mTag;
+        o << sIndent << "<" << mTag;
 
-            XMLAttributes_t::const_iterator aItAttrs(mAttrs.begin());
-            while (aItAttrs != mAttrs.end())
-            {
-                o << " " << aItAttrs->mName << "=\""
-                << xmlify(aItAttrs->mValue)
-                << "\"";
+        XMLAttributes_t::const_iterator aItAttrs(mAttrs.begin());
+        while (aItAttrs != mAttrs.end())
+        {
+            o << " " << aItAttrs->mName << "=\""
+              << xmlify(aItAttrs->mValue)
+              << "\"";
 
-                aItAttrs++;
-            }
+            aItAttrs++;
+        }
 
+        if (bHasContent)
+        {
             o << ">";
 
+            string sNewIndent = sIndent + "  ";
             XMLTags_t::const_iterator aItTags(mTags.begin());
             while (aItTags != mTags.end())
             {
-                (*aItTags)->output(o);
+                if (aItTags == mTags.begin())
+                    o << endl;
+
+                (*aItTags)->output(o, sNewIndent);
                 aItTags++;
             }
 
             o << mChars;
         }
-
-        if (mMode == END || mMode == COMPLETE)
-            o << "</" << mTag << ">";
-
-        return o;
     }
 
-    struct eqstr
+    if (mMode == END || mMode == COMPLETE)
     {
-        bool operator()(const char* s1, const char* s2) const
+        if (bHasContent)
         {
-            return strcmp(s1, s2) == 0;
-        }
-    };
-
-    typedef hash_map<const char *, TagLogger::Pointer_t, hash<const char *>, eqstr> TagLoggerHashMap_t;
-    static TagLoggerHashMap_t * tagLoggers = NULL;
+            if (mTags.size() > 0)
+                o << sIndent;
 
-    TagLogger::TagLogger()
-    : mFileName("writerfilter")
-    {
+            o << "</" << mTag << ">" << endl;
+        }
+        else
+            o << "/>" << endl;
     }
 
-    TagLogger::~TagLogger()
-    {
-    }
+    return o;
+}
 
-    void TagLogger::setFileName(const string & rName)
+struct eqstr
+{
+    bool operator()(const char* s1, const char* s2) const
     {
-        mFileName = rName;
+        return strcmp(s1, s2) == 0;
     }
+};
 
-    TagLogger::Pointer_t TagLogger::getInstance(const char * name)
-    {
-        if (tagLoggers == NULL)
-            tagLoggers = new TagLoggerHashMap_t();
+typedef hash_map<const char *, TagLogger::Pointer_t, hash<const char *>, eqstr> TagLoggerHashMap_t;
+static TagLoggerHashMap_t * tagLoggers = NULL;
 
-        TagLoggerHashMap_t::iterator aIt = tagLoggers->end();
+TagLogger::TagLogger()
+: mFileName("writerfilter")
+{
+}
 
-        if (! tagLoggers->empty())
-            aIt = tagLoggers->find(name);
+TagLogger::~TagLogger()
+{
+}
 
-        if (aIt == tagLoggers->end())
-        {
-            TagLogger::Pointer_t pTagLogger(new TagLogger());
-            pair<const char *, TagLogger::Pointer_t> entry(name, pTagLogger);
-            aIt = tagLoggers->insert(entry).first;
-        }
+void TagLogger::setFileName(const string & rName)
+{
+    mFileName = rName;
+}
 
-        return aIt->second;
-    }
+TagLogger::Pointer_t TagLogger::getInstance(const char * name)
+{
+    if (tagLoggers == NULL)
+        tagLoggers = new TagLoggerHashMap_t();
 
-    XMLTag::Pointer_t TagLogger::currentTag() const
-    {
-        bool bEmpty=mTags.empty();
-        if (!bEmpty)
-            return mTags.top();
+    TagLoggerHashMap_t::iterator aIt = tagLoggers->end();
 
-        return XMLTag::NIL;
-    }
+    if (! tagLoggers->empty())
+        aIt = tagLoggers->find(name);
 
-    void TagLogger::startDocument()
+    if (aIt == tagLoggers->end())
     {
-        XMLTag::Pointer_t pTag(new XMLTag("root"));
-        mTags.push(pTag);
-        mpRoot = pTag;
+        TagLogger::Pointer_t pTagLogger(new TagLogger());
+        pair<const char *, TagLogger::Pointer_t> entry(name, pTagLogger);
+        aIt = tagLoggers->insert(entry).first;
     }
 
-    void TagLogger::element(const string & name)
-    {
-        startElement(name);
-        endElement(name);
-    }
+    return aIt->second;
+}
 
-    void TagLogger::startElement(const string & name)
-    {
-        XMLTag::Pointer_t pTag(new XMLTag(name));
-        currentTag()->addTag(pTag);
-        mTags.push(pTag);
-    }
+XMLTag::Pointer_t TagLogger::currentTag() const
+{
+    bool bEmpty=mTags.empty();
+    if (!bEmpty)
+        return mTags.top();
 
-    void TagLogger::attribute(const string & name, const string & value)
-    {
-        currentTag()->addAttr(name, value);
-    }
+    return XMLTag::NIL;
+}
 
-    void TagLogger::attribute(const string & name, const ::rtl::OUString & value)
-    {
-        currentTag()->addAttr(name, value);
-    }
+void TagLogger::startDocument()
+{
+    XMLTag::Pointer_t pTag(new XMLTag("root"));
+    mTags.push(pTag);
+    mpRoot = pTag;
+}
 
-    void TagLogger::attribute(const string & name, sal_uInt32 value)
-    {
-        currentTag()->addAttr(name, value);
-    }
+void TagLogger::element(const string & name)
+{
+    startElement(name);
+    endElement(name);
+}
 
-void TagLogger::attribute(const string & name, const uno::Any aAny)
+void TagLogger::startElement(const string & name)
 {
-    currentTag()->addAttr(name, aAny);
+    XMLTag::Pointer_t pTag(new XMLTag(name));
+    currentTag()->addTag(pTag);
+    mTags.push(pTag);
 }
 
-    void TagLogger::addTag(XMLTag::Pointer_t pTag)
-    {
-        currentTag()->addTag(pTag);
-    }
+void TagLogger::attribute(const string & name, const string & value)
+{
+    currentTag()->addAttr(name, value);
+}
 
-    void TagLogger::chars(const string & rChars)
-    {
-        currentTag()->chars(xmlify(rChars));
-    }
+void TagLogger::attribute(const string & name, const ::rtl::OUString & value)
+{
+    currentTag()->addAttr(name, value);
+}
 
-    void TagLogger::chars(const ::rtl::OUString & rChars)
-    {
-        chars(OUStringToOString(rChars, RTL_TEXTENCODING_ASCII_US).getStr());
-    }
+void TagLogger::attribute(const string & name, sal_uInt32 value)
+{
+    currentTag()->addAttr(name, value);
+}
 
-    void TagLogger::endElement(const string & name)
-    {
-        string nameRemoved = currentTag()->getTag();
+void TagLogger::attribute(const string & name, const uno::Any aAny)
+{
+    currentTag()->addAttr(name, aAny);
+}
 
-        if (name == nameRemoved)
-            mTags.pop();
-        else {
-            XMLTag::Pointer_t pTag(new XMLTag("end.mismatch"));
-            pTag->addAttr("name", name);
-            pTag->addAttr("top", nameRemoved);
+void TagLogger::addTag(XMLTag::Pointer_t pTag)
+{
+    currentTag()->addTag(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::endDocument()
-    {
+void TagLogger::endElement(const string & name)
+{
+    string nameRemoved = currentTag()->getTag();
+
+    if (name == nameRemoved)
         mTags.pop();
-    }
+    else {
+        XMLTag::Pointer_t pTag(new XMLTag("end.mismatch"));
+        pTag->addAttr("name", name);
+        pTag->addAttr("top", nameRemoved);
 
-    ostream & TagLogger::output(ostream & o) const
-    {
-        return mpRoot->output(o);
+        currentTag()->addTag(pTag);
     }
 
-    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";
-
-            string sPrefix = aIt->second->mFileName;
-            size_t nLastSlash = sPrefix.find_last_of('/');
-            size_t nLastBackslash = sPrefix.find_last_of('\\');
-            size_t nCutPos = nLastSlash;
-            if (nLastBackslash < nCutPos)
-                nCutPos = nLastBackslash;
-            if (nCutPos < sPrefix.size())
-                sPrefix = sPrefix.substr(nCutPos + 1);
-
-            fileName += "/";
-            fileName += sPrefix;
-            fileName +=".";
-            fileName += name;
-            fileName += ".xml";
-
-            ofstream dumpStream(fileName.c_str());
-            aIt->second->output(dumpStream);
-        }
-    }
+}
 
-    PropertySetToTagHandler::~PropertySetToTagHandler()
-    {
+void TagLogger::endDocument()
+{
+    mTags.pop();
+}
+
+ostream & TagLogger::output(ostream & o) const
+{
+    return mpRoot->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";
+
+        string sPrefix = aIt->second->mFileName;
+        size_t nLastSlash = sPrefix.find_last_of('/');
+        size_t nLastBackslash = sPrefix.find_last_of('\\');
+        size_t nCutPos = nLastSlash;
+        if (nLastBackslash < nCutPos)
+            nCutPos = nLastBackslash;
+        if (nCutPos < sPrefix.size())
+            sPrefix = sPrefix.substr(nCutPos + 1);
+
+        fileName += "/";
+        fileName += sPrefix;
+        fileName +=".";
+        fileName += name;
+        fileName += ".xml";
+
+        ofstream dumpStream(fileName.c_str());
+        aIt->second->output(dumpStream);
     }
+}
+
+PropertySetToTagHandler::PropertySetToTagHandler(IdToString::Pointer_t pIdToString)
+: mpTag(new XMLTag("propertyset")), mpIdToString(pIdToString)
+{
+}
+
+PropertySetToTagHandler::~PropertySetToTagHandler()
+{
+}
 
-    void PropertySetToTagHandler::resolve
-    (XMLTag & rTag, writerfilter::Reference<Properties>::Pointer_t pProps)
+void PropertySetToTagHandler::resolve
+(XMLTag & rTag, writerfilter::Reference<Properties>::Pointer_t pProps)
+{
+    if (pProps.get() != NULL)
     {
-        if (pProps.get() != NULL)
-        {
-            PropertySetToTagHandler aHandler(mpIdToString);
-            pProps->resolve(aHandler);
-            rTag.addTag(aHandler.getTag());
-        }
+        PropertySetToTagHandler aHandler(mpIdToString);
+        pProps->resolve(aHandler);
+        rTag.addTag(aHandler.getTag());
     }
+}
 
-    void PropertySetToTagHandler::attribute(Id name, Value & val)
-    {
-        XMLTag::Pointer_t pTag(new XMLTag("attribute"));
+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());
+    pTag->addAttr("name", (*QNameToString::Instance())(name));
+    pTag->addAttr("value", val.toString());
 
-        resolve(*pTag, val.getProperties());
+    resolve(*pTag, val.getProperties());
 
-        mpTag->addTag(pTag);
-    }
+    mpTag->addTag(pTag);
+}
 
-    void PropertySetToTagHandler::sprm(Sprm & rSprm)
-    {
-        XMLTag::Pointer_t pTag(new XMLTag("sprm"));
+void PropertySetToTagHandler::sprm(Sprm & rSprm)
+{
+    XMLTag::Pointer_t pTag(new XMLTag("sprm"));
 
-        string sName;
+    string sName;
 
-        if (mpIdToString != IdToString::Pointer_t())
-            sName = mpIdToString->toString(rSprm.getId());
+    if (mpIdToString != IdToString::Pointer_t())
+        sName = mpIdToString->toString(rSprm.getId());
 
-        pTag->addAttr("name", sName);
+    pTag->addAttr("name", sName);
 
-        static char sBuffer[256];
-        snprintf(sBuffer, sizeof(sBuffer),
-                 "0x%" SAL_PRIxUINT32 ", %" SAL_PRIuUINT32, rSprm.getId(),
-                 rSprm.getId());
-        pTag->addAttr("id", sBuffer);
-        pTag->addAttr("value", rSprm.getValue()->toString());
+    static char sBuffer[256];
+    snprintf(sBuffer, sizeof(sBuffer),
+             "0x%" SAL_PRIxUINT32 ", %" SAL_PRIuUINT32, rSprm.getId(),
+             rSprm.getId());
+    pTag->addAttr("id", sBuffer);
+    pTag->addAttr("value", rSprm.getValue()->toString());
 
-        resolve(*pTag, rSprm.getProps());
+    resolve(*pTag, rSprm.getProps());
 
-        mpTag->addTag(pTag);
-    }
+    mpTag->addTag(pTag);
+}
 
 
 XMLTag::Pointer_t unoPropertySetToTag(uno::Reference<beans::XPropertySet> rPropSet)
-- 
cgit 


From e033f3a57542ebec0a0f1e5cb3685525c61c775a Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 10 Aug 2010 17:14:42 +0200
Subject: writerfilter09: ooxml: refactoring debug output

---
 writerfilter/source/filter/ImportFilter.cxx        |   4 +-
 writerfilter/source/ooxml/OOXMLFactory.cxx         |  63 ++--
 writerfilter/source/ooxml/OOXMLFactory.hxx         |   3 +
 .../source/ooxml/OOXMLFastContextHandler.cxx       | 362 ++++++++-------------
 .../source/ooxml/OOXMLFastContextHandler.hxx       |   7 +-
 writerfilter/source/ooxml/OOXMLFastHelper.hxx      |  84 +++--
 writerfilter/source/ooxml/factory_ns.xsl           |   4 +
 writerfilter/source/ooxml/factoryimpl.xsl          |  24 +-
 writerfilter/source/ooxml/factoryimpl_ns.xsl       |  19 ++
 9 files changed, 270 insertions(+), 300 deletions(-)

diff --git a/writerfilter/source/filter/ImportFilter.cxx b/writerfilter/source/filter/ImportFilter.cxx
index 10e7cefa591f..3ddfef5f33fd 100644
--- a/writerfilter/source/filter/ImportFilter.cxx
+++ b/writerfilter/source/filter/ImportFilter.cxx
@@ -86,7 +86,7 @@ sal_Bool WriterFilter::filter( const uno::Sequence< beans::PropertyValue >& aDes
             return sal_False;
         }
 
-#ifdef DEBUG_ELEMENT
+#ifdef DEBUG_IMPORT
         OUString sURL = aMediaDesc.getUnpackedValueOrDefault( MediaDescriptor::PROP_URL(), OUString() );
         ::std::string sURLc = OUStringToOString(sURL, RTL_TEXTENCODING_ASCII_US).getStr();
 
@@ -131,7 +131,7 @@ sal_Bool WriterFilter::filter( const uno::Sequence< beans::PropertyValue >& aDes
         pDocument->resolve(*pStream);
     }
 
-#ifdef DEBUG_ELEMENT
+#ifdef DEBUG_IMPORT
     writerfilter::TagLogger::dump("DOMAINMAPPER");
     dmapperLogger->endDocument();
     writerfilter::TagLogger::dump("DEBUG");
diff --git a/writerfilter/source/ooxml/OOXMLFactory.cxx b/writerfilter/source/ooxml/OOXMLFactory.cxx
index 964d9e1cb5ee..a99811bf03fb 100755
--- a/writerfilter/source/ooxml/OOXMLFactory.cxx
+++ b/writerfilter/source/ooxml/OOXMLFactory.cxx
@@ -129,8 +129,8 @@ void OOXMLFactory::attributes(OOXMLFastContextHandler * pHandler,
 
     if (pFactory.get() != NULL)
     {
-#ifdef DEBUG_ATTRIBUTES
-        debug_logger->startElement("attributes");
+#ifdef DEBUG_FACTORY
+        debug_logger->startElement("factory.attributes");
         debug_logger->attribute("define", pFactory->getDefineName(nDefine));
         char sBuffer[256];
         snprintf(sBuffer, sizeof(sBuffer), "%08" SAL_PRIxUINT32, nDefine);
@@ -146,8 +146,8 @@ void OOXMLFactory::attributes(OOXMLFastContextHandler * pHandler,
         for (aIt = pMap->begin(); aIt != aEndIt; aIt++)
         {
             Id nId = (*pTokenToIdMap)[aIt->first];
-#ifdef DEBUG_ATTRIBUTES
-            debug_logger->startElement("attribute");
+#ifdef DEBUG_FACTORY
+            debug_logger->startElement("factory.attribute");
             debug_logger->attribute("name", fastTokenToId(aIt->first));
             debug_logger->attribute("tokenid", (*QNameToString::Instance())(nId));
             snprintf(sBuffer, sizeof(sBuffer), "%08" SAL_PRIxUINT32, nId);
@@ -159,7 +159,7 @@ void OOXMLFactory::attributes(OOXMLFastContextHandler * pHandler,
                 {
                 case RT_Boolean:
                     {
-#ifdef DEBUG_ATTRIBUTES
+#ifdef DEBUG_FACTORY
                         debug_logger->element("boolean");
 #endif
                         ::rtl::OUString aValue(Attribs->getValue(aIt->first));
@@ -171,7 +171,7 @@ void OOXMLFactory::attributes(OOXMLFastContextHandler * pHandler,
                     break;
                 case RT_String:
                     {
-#ifdef DEBUG_ATTRIBUTES
+#ifdef DEBUG_FACTORY
                         debug_logger->element("string");
 #endif
                         ::rtl::OUString aValue(Attribs->getValue(aIt->first));
@@ -184,7 +184,7 @@ void OOXMLFactory::attributes(OOXMLFastContextHandler * pHandler,
                     break;
                 case RT_Integer:
                     {
-#ifdef DEBUG_ATTRIBUTES
+#ifdef DEBUG_FACTORY
                         debug_logger->element("integer");
 #endif
                         ::rtl::OUString aValue(Attribs->getValue(aIt->first));
@@ -197,7 +197,7 @@ void OOXMLFactory::attributes(OOXMLFastContextHandler * pHandler,
                     break;
                 case RT_Hex:
                     {
-#ifdef DEBUG_ATTRIBUTES
+#ifdef DEBUG_FACTORY
                         debug_logger->element("hex");
 #endif
                         ::rtl::OUString aValue(Attribs->getValue(aIt->first));
@@ -210,7 +210,7 @@ void OOXMLFactory::attributes(OOXMLFastContextHandler * pHandler,
                     break;
                 case RT_List:
                     {
-#ifdef DEBUG_ATTRIBUTES
+#ifdef DEBUG_FACTORY
                         debug_logger->startElement("list");
 #endif
                         ListValueMapPointer pListValueMap =
@@ -221,7 +221,7 @@ void OOXMLFactory::attributes(OOXMLFastContextHandler * pHandler,
                             ::rtl::OUString aValue(Attribs->getValue(aIt->first));
                             sal_uInt32 nValue = (*pListValueMap)[aValue];
 
-#ifdef DEBUG_ATTRIBUTES
+#ifdef DEBUG_FACTORY
                             debug_logger->attribute("value", aValue);
                             debug_logger->attribute("value-num", nValue);
 #endif
@@ -232,25 +232,25 @@ void OOXMLFactory::attributes(OOXMLFastContextHandler * pHandler,
                             OOXMLValue::Pointer_t pValue(new OOXMLIntegerValue(nValue));
                             pFactory->attributeAction(pHandler, aIt->first, pValue);
                         }
-#ifdef DEBUG_ATTRIBUTES
+#ifdef DEBUG_FACTORY
                         debug_logger->endElement("list");
 #endif
                     }
                     break;
                 default:
-#ifdef DEBUG_ATTRIBUTES
+#ifdef DEBUG_FACTORY
                     debug_logger->element("unknown-attribute-type");
 #endif
                     break;
                 }
             }
-#ifdef DEBUG_ATTRIBUTES
-            debug_logger->endElement("attribute");
+#ifdef DEBUG_FACTORY
+            debug_logger->endElement("factory.attribute");
 #endif
         }
 
-#ifdef DEBUG_ATTRIBUTES
-        debug_logger->endElement("attributes");
+#ifdef DEBUG_FACTORY
+        debug_logger->endElement("factory.attributes");
 #endif
     }
 }
@@ -259,6 +259,11 @@ uno::Reference< xml::sax::XFastContextHandler>
 OOXMLFactory::createFastChildContext(OOXMLFastContextHandler * pHandler,
                                      Token_t Element)
 {
+#ifdef DEBUG_FACTORY
+    debug_logger->startElement("factory.createFastChildContext");
+    debug_logger->attribute("token", fastTokenToId(Element));
+#endif
+
     Id nDefine = pHandler->getDefine();
 
     OOXMLFactory_ns::Pointer_t pFactory = getFactoryForNamespace(nDefine);
@@ -269,12 +274,21 @@ OOXMLFactory::createFastChildContext(OOXMLFastContextHandler * pHandler,
     if ((Element & 0xffff) < OOXML_FAST_TOKENS_END)
         ret = createFastChildContextFromFactory(pHandler, pFactory, Element);
 
+#ifdef DEBUG_FACTORY
+    debug_logger->endElement("factory.createFastChildContext");
+#endif
+
     return ret;
 }
 
 void OOXMLFactory::characters(OOXMLFastContextHandler * pHandler,
                               const ::rtl::OUString & rString)
 {
+#ifdef DEBUG_FACTORY
+    debug_logger->startElement("factory.characters");
+    debug_logger->chars(rString);
+#endif
+
     Id nDefine = pHandler->getDefine();
     OOXMLFactory_ns::Pointer_t pFactory = getFactoryForNamespace(nDefine);
 
@@ -282,6 +296,10 @@ void OOXMLFactory::characters(OOXMLFastContextHandler * pHandler,
     {
         pFactory->charactersAction(pHandler, rString);
     }
+
+#ifdef DEBUG_FACTORY
+    debug_logger->endElement("factory.characters");
+#endif
 }
 
 void OOXMLFactory::startAction(OOXMLFastContextHandler * pHandler, Token_t /*nToken*/)
@@ -292,11 +310,11 @@ void OOXMLFactory::startAction(OOXMLFastContextHandler * pHandler, Token_t /*nTo
     if (pFactory.get() != NULL)
     {
 #ifdef DEBUG_ELEMENT
-        debug_logger->startElement("factory-startAction");
+        debug_logger->startElement("factory.startAction");
 #endif
         pFactory->startAction(pHandler);
 #ifdef DEBUG_ELEMENT
-        debug_logger->endElement("factory-startAction");
+        debug_logger->endElement("factory.startAction");
 #endif
     }
 }
@@ -309,11 +327,11 @@ void OOXMLFactory::endAction(OOXMLFastContextHandler * pHandler, Token_t /*nToke
     if (pFactory.get() != NULL)
     {
 #ifdef DEBUG_ELEMENT
-        debug_logger->startElement("factory-endAction");
+        debug_logger->startElement("factory.endAction");
 #endif
         pFactory->endAction(pHandler);
 #ifdef DEBUG_ELEMENT
-        debug_logger->endElement("factory-endAction");
+        debug_logger->endElement("factory.endAction");
 #endif
     }
 }
@@ -334,6 +352,11 @@ void OOXMLFactory_ns::attributeAction(OOXMLFastContextHandler *, Token_t, OOXMLV
 {
 }
 
+string OOXMLFactory_ns::getName() const
+{
+    return "noname";
+}
+
 }
 }
 
diff --git a/writerfilter/source/ooxml/OOXMLFactory.hxx b/writerfilter/source/ooxml/OOXMLFactory.hxx
index 0558436ab793..753fb3f658f7 100755
--- a/writerfilter/source/ooxml/OOXMLFactory.hxx
+++ b/writerfilter/source/ooxml/OOXMLFactory.hxx
@@ -114,6 +114,9 @@ public:
     virtual void endAction(OOXMLFastContextHandler * pHandler);
     virtual void attributeAction(OOXMLFastContextHandler * pHandler, Token_t nToken, OOXMLValue::Pointer_t pValue);
     virtual string getDefineName(Id nId) const;
+#ifdef DEBUG_FACTORY
+    virtual string getName() const;
+#endif
 
     AttributeToResourceMapPointer getAttributeToResourceMap(Id nId);
     ListValueMapPointer getListValueMap(Id nId);
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
index 20ee49258c00..6e08896a9ec0 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
@@ -182,51 +182,20 @@ OOXMLFastContextHandler::~OOXMLFastContextHandler()
     aSetContexts.erase(this);
 }
 
-#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
-
 // ::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));
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.element");
+    string sToken = fastTokenToId(Element);
+    debug_logger->attribute("token", sToken);
     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
     attributes(Attribs);
     lcl_startFastElement(Element, Attribs);
@@ -237,8 +206,8 @@ void SAL_CALL OOXMLFastContextHandler::startUnknownElement
  const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
 throw (uno::RuntimeException, xml::sax::SAXException)
 {
-#ifdef DEBUG_CONTEXT_STACK
-    debug_logger->startElement("unknown-element");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.unknown-element");
     debug_logger->attribute("namespace", Namespace);
     debug_logger->attribute("name", Name);
 #else
@@ -250,19 +219,18 @@ throw (uno::RuntimeException, xml::sax::SAXException)
 void SAL_CALL OOXMLFastContextHandler::endFastElement(Token_t Element)
 throw (uno::RuntimeException, xml::sax::SAXException)
 {
+#ifdef DEBUG_CONTEXT_HANDLER
+    string sToken = fastTokenToId(Element);
+    (void) sToken;
+#endif
+
     lcl_endFastElement(Element);
 
-#ifdef DEBUG_ELEMENT
+#ifdef DEBUG_CONTEXT_HANDLER
     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);
+    debug_logger->endElement("contexthandler.element");
 #endif
 }
 
@@ -278,14 +246,6 @@ 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
-
     OOXMLFactory::getInstance()->endAction(this, Element);
 }
 
@@ -293,9 +253,8 @@ 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");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->endElement("contexthandler.unknown-element");
 #endif
 }
 
@@ -305,8 +264,8 @@ uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
  const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
     throw (uno::RuntimeException, xml::sax::SAXException)
 {
-#ifdef DEBUG_CONTEXT_STACK
-    debug_logger->startElement("createFastChildContext");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.createFastChildContext");
     debug_logger->attribute("token", fastTokenToId(Element));
     debug_logger->attribute("type", getType());
 #endif
@@ -314,8 +273,8 @@ uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
     uno::Reference< xml::sax::XFastContextHandler > xResult
         (lcl_createFastChildContext(Element, Attribs));
 
-#ifdef DEBUG_CONTEXT_STACK
-    debug_logger->endElement("createFastChildContext");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->endElement("contexthandler.createFastChildContext");
 #endif
 
     return xResult;
@@ -337,11 +296,11 @@ OOXMLFastContextHandler::createUnknownChildContext
  const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
     throw (uno::RuntimeException, xml::sax::SAXException)
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->startElement("createUnknownChildContext");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.createUnknownChildContext");
     debug_logger->attribute("namespace", Namespace);
     debug_logger->attribute("name", Name);
-    debug_logger->endElement("createUnknownChildContext");
+    debug_logger->endElement("contexthandler.createUnknownChildContext");
 #else
     (void) Namespace;
     (void) Name;
@@ -404,12 +363,12 @@ void OOXMLFastContextHandler::attributes
 
 void OOXMLFastContextHandler::startAction(Token_t Element)
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->startElement("startAction");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.startAction");
 #endif
     lcl_startAction(Element);
-#ifdef DEBUG_ELEMENT
-    debug_logger->endElement("startAction");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->endElement("contexthandler.startAction");
 #endif
 }
 
@@ -420,12 +379,12 @@ void OOXMLFastContextHandler::lcl_startAction(Token_t Element)
 
 void OOXMLFastContextHandler::endAction(Token_t Element)
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->startElement("endAction");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.endAction");
 #endif
     lcl_endAction(Element);
-#ifdef DEBUG_ELEMENT
-    debug_logger->endElement("endAction");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->endElement("contexthandler.endAction");
 #endif
 }
 
@@ -493,15 +452,15 @@ string OOXMLFastContextHandler::getResourceString() const
 
 void OOXMLFastContextHandler::setId(Id rId)
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->startElement("setId");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.setId");
 
     static char sBuffer[256];
     snprintf(sBuffer, sizeof(sBuffer), "%" SAL_PRIuUINT32, rId);
 
     debug_logger->attribute("id", sBuffer);
-    debug_logger->chars((*QNameToString::Instance())(rId));
-    debug_logger->endElement("setId");
+    debug_logger->attribute("name", (*QNameToString::Instance())(rId));
+    debug_logger->endElement("contexthandler.setId");
 #endif
 
     mId = rId;
@@ -531,7 +490,7 @@ void OOXMLFastContextHandler::setToken(Token_t nToken)
 {
     mnToken = nToken;
 
-#ifdef DEBUG_CONTEXT_STACK
+#ifdef DEBUG_CONTEXT_HANDLER
     msTokenString = fastTokenToId(mnToken);
 #endif
 }
@@ -547,11 +506,6 @@ void OOXMLFastContextHandler::mark(const Id & rId, OOXMLValue::Pointer_t pVal)
     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);
 }
@@ -571,8 +525,8 @@ OOXMLPropertySet * OOXMLFastContextHandler::getPicturePropSet
 
 void OOXMLFastContextHandler::sendTableDepth() const
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->startElement("sendTableDepth");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.sendTableDepth");
 #endif
 
     if (mnTableDepth > 0)
@@ -593,15 +547,10 @@ void OOXMLFastContextHandler::sendTableDepth() const
             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_ELEMENT
-    debug_logger->endElement("sendTableDepth");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->endElement("contexthandler.sendTableDepth");
 #endif
 }
 
@@ -613,6 +562,10 @@ void OOXMLFastContextHandler::setHandle()
 
 void OOXMLFastContextHandler::startCharacterGroup()
 {
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.startCharacterGroup");
+#endif
+
     if (isForwardEvents())
     {
         if (mpParserState->isInCharacterGroup())
@@ -623,10 +576,6 @@ void OOXMLFastContextHandler::startCharacterGroup()
 
         if (! mpParserState->isInCharacterGroup())
         {
-#ifdef DEBUG_ELEMENT
-            debug_logger->element("startCharacterGroup");
-#endif
-
             mpStream->startCharacterGroup();
             mpParserState->setInCharacterGroup(true);
             mpParserState->resolveCharacterProperties(*mpStream);
@@ -636,12 +585,12 @@ void OOXMLFastContextHandler::startCharacterGroup()
 
 void OOXMLFastContextHandler::endCharacterGroup()
 {
-    if (isForwardEvents() && mpParserState->isInCharacterGroup())
-    {
-#ifdef DEBUG_ELEMENT
-        debug_logger->element("endCharacterGroup");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.endCharacterGroup");
 #endif
 
+    if (isForwardEvents() && mpParserState->isInCharacterGroup())
+    {
         mpStream->endCharacterGroup();
         mpParserState->setInCharacterGroup(false);
     }
@@ -649,6 +598,10 @@ void OOXMLFastContextHandler::endCharacterGroup()
 
 void OOXMLFastContextHandler::startParagraphGroup()
 {
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.startParagraphGroup");
+#endif
+
     if (isForwardEvents())
     {
         if (mpParserState->isInParagraphGroup())
@@ -659,10 +612,6 @@ void OOXMLFastContextHandler::startParagraphGroup()
 
         if (! mpParserState->isInParagraphGroup())
         {
-#ifdef DEBUG_ELEMENT
-            debug_logger->element("startParagraphGroup");
-#endif
-
             mpStream->startParagraphGroup();
             mpParserState->setInParagraphGroup(true);
         }
@@ -671,6 +620,10 @@ void OOXMLFastContextHandler::startParagraphGroup()
 
 void OOXMLFastContextHandler::endParagraphGroup()
 {
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.endParagraphGroup");
+#endif
+
     if (isForwardEvents())
     {
         if (mpParserState->isInCharacterGroup())
@@ -678,9 +631,6 @@ void OOXMLFastContextHandler::endParagraphGroup()
 
         if (mpParserState->isInParagraphGroup())
         {
-#ifdef DEBUG_ELEMENT
-            debug_logger->element("endParagraphGroup");
-#endif
             mpStream->endParagraphGroup();
             mpParserState->setInParagraphGroup(false);
         }
@@ -689,6 +639,10 @@ void OOXMLFastContextHandler::endParagraphGroup()
 
 void OOXMLFastContextHandler::startSectionGroup()
 {
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.startSectionGroup");
+#endif
+
     if (isForwardEvents())
     {
         if (mpParserState->isInSectionGroup())
@@ -696,9 +650,6 @@ void OOXMLFastContextHandler::startSectionGroup()
 
         if (! mpParserState->isInSectionGroup())
         {
-#ifdef DEBUG_ELEMENT
-            debug_logger->element("startSectionGroup");
-#endif
             mpStream->info(mpParserState->getHandle());
             mpStream->startSectionGroup();
             mpParserState->setInSectionGroup(true);
@@ -708,6 +659,10 @@ void OOXMLFastContextHandler::startSectionGroup()
 
 void OOXMLFastContextHandler::endSectionGroup()
 {
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.endSectionGroup");
+#endif
+
     if (isForwardEvents())
     {
         if (mpParserState->isInParagraphGroup())
@@ -715,9 +670,6 @@ void OOXMLFastContextHandler::endSectionGroup()
 
         if (mpParserState->isInSectionGroup())
         {
-#ifdef DEBUG_ELEMENT
-        debug_logger->element("endSectionGroup");
-#endif
             mpStream->endSectionGroup();
             mpParserState->setInSectionGroup(false);
         }
@@ -726,10 +678,6 @@ void OOXMLFastContextHandler::endSectionGroup()
 
 void OOXMLFastContextHandler::setLastParagraphInSection()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("setLastParagraphInSection");
-#endif
-
     mpParserState->setLastParagraphInSection(true);
     mpStream->markLastParagraphInSection( );
 }
@@ -751,8 +699,8 @@ OOXMLPropertySet::Pointer_t OOXMLFastContextHandler::getPropertySet() const
 
 void OOXMLFastContextHandler::startField()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("startField");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.startField");
 #endif
     startCharacterGroup();
     if (isForwardEvents())
@@ -762,8 +710,8 @@ void OOXMLFastContextHandler::startField()
 
 void OOXMLFastContextHandler::fieldSeparator()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("fieldSeparator");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.fieldSeparator");
 #endif
     startCharacterGroup();
     if (isForwardEvents())
@@ -773,8 +721,8 @@ void OOXMLFastContextHandler::fieldSeparator()
 
 void OOXMLFastContextHandler::endField()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("endField");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.endField");
 #endif
     startCharacterGroup();
     if (isForwardEvents())
@@ -784,8 +732,8 @@ void OOXMLFastContextHandler::endField()
 
 void OOXMLFastContextHandler::ftnednref()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("ftnednref");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.ftnednref");
 #endif
     if (isForwardEvents())
         mpStream->utext(sFtnEdnRef, 1);
@@ -793,8 +741,8 @@ void OOXMLFastContextHandler::ftnednref()
 
 void OOXMLFastContextHandler::ftnednsep()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("ftnednsep");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.ftnednsep");
 #endif
     if (isForwardEvents())
         mpStream->utext(sFtnEdnSep, 1);
@@ -802,8 +750,8 @@ void OOXMLFastContextHandler::ftnednsep()
 
 void OOXMLFastContextHandler::ftnedncont()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("ftnedncont");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.ftnedncont");
 #endif
     if (isForwardEvents())
         mpStream->text(sFtnEdnCont, 1);
@@ -811,8 +759,8 @@ void OOXMLFastContextHandler::ftnedncont()
 
 void OOXMLFastContextHandler::pgNum()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("pgNum");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.pgNum");
 #endif
     if (isForwardEvents())
         mpStream->utext((const sal_uInt8*)sPgNum, 1);
@@ -820,8 +768,8 @@ void OOXMLFastContextHandler::pgNum()
 
 void OOXMLFastContextHandler::tab()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("tab");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.tab");
 #endif
     if (isForwardEvents())
         mpStream->utext((const sal_uInt8*)sTab, 1);
@@ -829,8 +777,8 @@ void OOXMLFastContextHandler::tab()
 
 void OOXMLFastContextHandler::cr()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("cr");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.cr");
 #endif
     if (isForwardEvents())
         mpStream->utext((const sal_uInt8*)sCR, 1);
@@ -838,8 +786,8 @@ void OOXMLFastContextHandler::cr()
 
 void OOXMLFastContextHandler::noBreakHyphen()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("noBreakHyphen");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.noBreakHyphen");
 #endif
     if (isForwardEvents())
         mpStream->utext((const sal_uInt8*)sNoBreakHyphen, 1);
@@ -847,8 +795,8 @@ void OOXMLFastContextHandler::noBreakHyphen()
 
 void OOXMLFastContextHandler::softHyphen()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("softHyphen");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.softHyphen");
 #endif
     if (isForwardEvents())
         mpStream->utext((const sal_uInt8*)sSoftHyphen, 1);
@@ -856,8 +804,8 @@ void OOXMLFastContextHandler::softHyphen()
 
 void OOXMLFastContextHandler::handleLastParagraphInSection()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("handleLastParagraphInSection");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.handleLastParagraphInSection");
 #endif
 
     if (mpParserState->isLastParagraphInSection())
@@ -869,8 +817,8 @@ void OOXMLFastContextHandler::handleLastParagraphInSection()
 
 void OOXMLFastContextHandler::endOfParagraph()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("endOfParagraph");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.endOfParagraph");
 #endif
     if (! mpParserState->isInCharacterGroup())
         startCharacterGroup();
@@ -880,10 +828,10 @@ void OOXMLFastContextHandler::endOfParagraph()
 
 void OOXMLFastContextHandler::text(const ::rtl::OUString & sText)
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->startElement("text");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.text");
     debug_logger->chars(sText);
-    debug_logger->endElement("text");
+    debug_logger->endElement("contexthandler.text");
 #endif
     if (isForwardEvents())
         mpStream->utext(reinterpret_cast < const sal_uInt8 * >
@@ -893,10 +841,10 @@ void OOXMLFastContextHandler::text(const ::rtl::OUString & sText)
 
 void OOXMLFastContextHandler::propagateCharacterProperties()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->startElement("propagateCharacterProperties");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.propagateCharacterProperties");
     debug_logger->addTag(toPropertiesTag(getPropertySet()));
-    debug_logger->endElement("propagateCharacterProperties");
+    debug_logger->endElement("contexthandler.propagateCharacterProperties");
 #endif
 
     mpParserState->setCharacterProperties(getPropertySet());
@@ -904,10 +852,10 @@ void OOXMLFastContextHandler::propagateCharacterProperties()
 
 void OOXMLFastContextHandler::propagateCharacterPropertiesAsSet(const Id & rId)
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->startElement("propagateCharacterPropertiesAsSet");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.propagateCharacterPropertiesAsSet");
     debug_logger->addTag(toPropertiesTag(getPropertySet()));
-    debug_logger->endElement("propagateCharacterPropertiesAsSet");
+    debug_logger->endElement("contexthandler.propagateCharacterPropertiesAsSet");
 #endif
 
     OOXMLValue::Pointer_t pValue(new OOXMLPropertySetValue(getPropertySet()));
@@ -927,8 +875,8 @@ bool OOXMLFastContextHandler::propagatesProperties() const
 
 void OOXMLFastContextHandler::propagateCellProperties()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("propagateCellProperties");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.propagateCellProperties");
 #endif
 
     mpParserState->setCellProperties(getPropertySet());
@@ -936,8 +884,8 @@ void OOXMLFastContextHandler::propagateCellProperties()
 
 void OOXMLFastContextHandler::propagateRowProperties()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("propagateRowProperties");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.propagateRowProperties");
 #endif
 
     mpParserState->setRowProperties(getPropertySet());
@@ -946,10 +894,10 @@ void OOXMLFastContextHandler::propagateRowProperties()
 void OOXMLFastContextHandler::propagateTableProperties()
 {
     OOXMLPropertySet::Pointer_t pProps = getPropertySet();
-#ifdef DEBUG_ELEMENT
-    debug_logger->startElement("propagateTableProperties");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.propagateTableProperties");
     debug_logger->addTag(toPropertiesTag(pProps));
-    debug_logger->endElement("propagateTableProperties");
+    debug_logger->endElement("contexthandler.propagateTableProperties");
 #endif
 
     mpParserState->setTableProperties(pProps);
@@ -957,47 +905,47 @@ void OOXMLFastContextHandler::propagateTableProperties()
 
 void OOXMLFastContextHandler::sendCellProperties()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->startElement("sendCellProperties");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.sendCellProperties");
 #endif
 
     mpParserState->resolveCellProperties(*mpStream);
 
-#ifdef DEBUG_ELEMENT
-    debug_logger->endElement("sendCellProperties");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->endElement("contexthandler.sendCellProperties");
 #endif
 }
 
 void OOXMLFastContextHandler::sendRowProperties()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->startElement("sendRowProperties");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.sendRowProperties");
 #endif
 
     mpParserState->resolveRowProperties(*mpStream);
 
-#ifdef DEBUG_ELEMENT
-    debug_logger->endElement("sendRowProperties");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->endElement("contexthandler.sendRowProperties");
 #endif
 }
 
 void OOXMLFastContextHandler::sendTableProperties()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->startElement("sendTableProperties");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.sendTableProperties");
 #endif
 
     mpParserState->resolveTableProperties(*mpStream);
 
-#ifdef DEBUG_ELEMENT
-    debug_logger->endElement("sendTableProperties");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->endElement("contexthandler.sendTableProperties");
 #endif
 }
 
 void OOXMLFastContextHandler::clearTableProps()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("clearTableProps");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.clearTableProps");
 #endif
 
     mpParserState->setTableProperties(OOXMLPropertySet::Pointer_t
@@ -1006,8 +954,8 @@ void OOXMLFastContextHandler::clearTableProps()
 
 void OOXMLFastContextHandler::sendPropertiesWithId(const Id & rId)
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->startElement("sendPropertiesWithId");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.sendPropertiesWithId");
     debug_logger->attribute("id", fastTokenToId(rId));
 #endif
 
@@ -1020,16 +968,16 @@ void OOXMLFastContextHandler::sendPropertiesWithId(const Id & rId)
     pPropertySet->add(pProp);
     mpStream->props(pPropertySet);
 
-#ifdef DEBUG_ELEMENT
+#ifdef DEBUG_CONTEXT_HANDLER
     debug_logger->addTag(toPropertiesTag(pPropertySet));
-    debug_logger->endElement("sendPropertiesWithId");
+    debug_logger->endElement("contexthandler.sendPropertiesWithId");
 #endif
 }
 
 void OOXMLFastContextHandler::clearProps()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->element("clearProps");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.clearProps");
 #endif
 
     setPropertySet(OOXMLPropertySet::Pointer_t(new OOXMLPropertySetImpl()));
@@ -1063,15 +1011,15 @@ OOXMLDocument * OOXMLFastContextHandler::getDocument()
 
 void OOXMLFastContextHandler::setForwardEvents(bool bForwardEvents)
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->startElement("setForwardEvents");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.setForwardEvents");
 
     if (bForwardEvents)
         debug_logger->chars("true");
     else
         debug_logger->chars("false");
 
-    debug_logger->endElement("setForwardEvents");
+    debug_logger->endElement("contexthandler.setForwardEvents");
 #endif
 
     mpParserState->setForwardEvents(bForwardEvents);
@@ -1154,8 +1102,8 @@ void OOXMLFastContextHandler::resolvePropertySetAttrs()
 
 void OOXMLFastContextHandler::sendPropertyToParent()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->startElement("sendPropertyToParent");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.sendPropertyToParent");
 #endif
 
     if (mpParent != NULL)
@@ -1169,21 +1117,21 @@ void OOXMLFastContextHandler::sendPropertyToParent()
                                             OOXMLPropertyImpl::SPRM));
             pProps->add(pProp);
 
-#ifdef DEBUG_ELEMENT
+#ifdef DEBUG_CONTEXT_HANDLER
             debug_logger->addTag(toPropertiesTag(pProps));
 #endif
         }
     }
 
-#ifdef DEBUG_ELEMENT
-    debug_logger->endElement("sendPropertyToParent");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->endElement("contexthandler.sendPropertyToParent");
 #endif
 }
 
 void OOXMLFastContextHandler::sendPropertiesToParent()
 {
-#ifdef DEBUG_ELEMENT
-    debug_logger->startElement("sendPropertiesToParent");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.sendPropertiesToParent");
 #endif
     if (mpParent != NULL)
     {
@@ -1193,12 +1141,6 @@ void OOXMLFastContextHandler::sendPropertiesToParent()
         {
             OOXMLPropertySet::Pointer_t pProps(getPropertySet());
 
-#ifdef DEBUG_ELEMENT
-            debug_logger->startElement("me");
-            debug_logger->addTag(toPropertiesTag(pProps));
-            debug_logger->endElement("me");
-#endif
-
             if (pProps.get() != NULL)
             {
                 OOXMLValue::Pointer_t pValue
@@ -1207,24 +1149,12 @@ void OOXMLFastContextHandler::sendPropertiesToParent()
                 OOXMLProperty::Pointer_t pProp
                 (new OOXMLPropertyImpl(getId(), pValue, OOXMLPropertyImpl::SPRM));
 
-#ifdef DEBUG_ELEMENT
-                debug_logger->startElement("propertyForSet");
-                debug_logger->chars(pProp->toString());
-                debug_logger->endElement("propertyForSet");
-#endif
-
                 pParentProps->add(pProp);
-
-#ifdef DEBUG_ELEMENT
-                debug_logger->startElement("parent");
-                debug_logger->addTag(toPropertiesTag(pParentProps));
-                debug_logger->endElement("parent");
-#endif
             }
         }
     }
-#ifdef DEBUG_ELEMENT
-    debug_logger->endElement("sendPropertiesToParent");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->endElement("contexthandler.sendPropertiesToParent");
 #endif
 }
 
@@ -1263,11 +1193,11 @@ void OOXMLFastContextHandlerStream::newProperty(const Id & rId,
 
 void OOXMLFastContextHandlerStream::sendProperty(Id nId)
 {
-#ifdef DEBUG_PROPERTIES
-    debug_logger->startElement("sendProperty");
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.sendProperty");
     debug_logger->attribute("id", (*QNameToString::Instance())(nId));
     debug_logger->chars(xmlify(getPropertySetAttrs()->toString()));
-    debug_logger->endElement("sendProperty");
+    debug_logger->endElement("contexthandler.sendProperty");
 #endif
 
     OOXMLPropertySetEntryToString aHandler(nId);
@@ -1286,10 +1216,10 @@ OOXMLFastContextHandlerStream::getPropertySetAttrs() const
 
 void OOXMLFastContextHandlerStream::resolvePropertySetAttrs()
 {
-#ifdef DEBUG_PROPERTIES
-        debug_logger->startElement("resolvePropertySetAttrs");
+#ifdef DEBUG_CONTEXT_HANDLER
+        debug_logger->startElement("contexthandler.resolvePropertySetAttrs");
         debug_logger->chars(mpPropertySetAttrs->toString());
-        debug_logger->endElement("resolvePropertySetAttrs");
+        debug_logger->endElement("contexthandler.resolvePropertySetAttrs");
 #endif
     mpStream->props(mpPropertySetAttrs);
 }
@@ -1339,13 +1269,7 @@ void OOXMLFastContextHandlerProperties::lcl_endFastElement
     {
         if (isForwardEvents())
         {
-#ifdef DEBUG_PROPERTIES
-            debug_logger->startElement("sendproperties");
-#endif
             mpStream->props(mpPropertySet);
-#ifdef DEBUG_PROPERTIES
-            debug_logger->endElement("sendproperties");
-#endif
         }
     }
     else
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
index 0c441f62a180..59ee2cc42080 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
@@ -230,18 +230,13 @@ public:
     virtual string toString() const;
 #endif
 
-#ifdef DEBUG_MEMORY
-    virtual void SAL_CALL acquire() throw();
-    virtual void SAL_CALL release() throw();
-#endif
-
 protected:
     OOXMLFastContextHandler * mpParent;
     Id mId;
     Id mnDefine;
     Token_t mnToken;
 
-#ifdef DEBUG_CONTEXT_STACK
+#ifdef DEBUG_CONTEXT_HANDLER
     string msTokenString;
 #endif
 
diff --git a/writerfilter/source/ooxml/OOXMLFastHelper.hxx b/writerfilter/source/ooxml/OOXMLFastHelper.hxx
index 5d4587922a54..9bfadf558d84 100644
--- a/writerfilter/source/ooxml/OOXMLFastHelper.hxx
+++ b/writerfilter/source/ooxml/OOXMLFastHelper.hxx
@@ -74,21 +74,22 @@ uno::Reference<XFastContextHandler>
 OOXMLFastHelper<T>::createAndSetParent
 (OOXMLFastContextHandler * pHandler, sal_uInt32 nToken, Id nId)
 {
+#ifdef DEBUG_HELPER
+    debug_logger->startElement("helper.createAndSetParent");
+    debug_logger->attribute("context", pHandler->getType());
+    debug_logger->attribute("id", (*QNameToString::Instance())(nId));
+#endif
+
     OOXMLFastContextHandler * pTmp = new T(pHandler);
 
     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));
-
+#ifdef DEBUG_HELPER
     debug_logger->startElement("created");
     debug_logger->addTag(pTmp->toTag());
     debug_logger->endElement("created");
-    debug_logger->endElement("createAndSetParent");
+    debug_logger->endElement("helper.createAndSetParent");
 #endif
 
     uno::Reference<XFastContextHandler> aResult(pTmp);
@@ -101,27 +102,29 @@ uno::Reference<XFastContextHandler>
 OOXMLFastHelper<T>::createAndSetParentAndDefine
 (OOXMLFastContextHandler * pHandler, sal_uInt32 nToken, Id nId, Id nDefine)
 {
-    OOXMLFastContextHandler * pTmp = new T(pHandler);
-
-    pTmp->setToken(nToken);
-    pTmp->setId(nId);
-    pTmp->setDefine(nDefine);
-
-#ifdef DEBUG_CREATE
-    debug_logger->startElement("createAndSetParentAndDefine");
+#ifdef DEBUG_HELPER
+    debug_logger->startElement("helper.createAndSetParentAndDefine");
     debug_logger->attribute("context", pHandler->getType());
-    debug_logger->attribute("token", fastTokenToId(pTmp->getToken()));
     debug_logger->attribute("id", (*QNameToString::Instance())(nId));
 
     static char buffer[16];
     snprintf(buffer, sizeof(buffer), "0x%08" SAL_PRIxUINT32, nId);
 
     debug_logger->attribute("idnum", buffer);
+#endif
+
+    OOXMLFastContextHandler * pTmp = new T(pHandler);
+
+    pTmp->setToken(nToken);
+    pTmp->setId(nId);
+    pTmp->setDefine(nDefine);
 
+
+#ifdef DEBUG_HELPER
     debug_logger->startElement("created");
     debug_logger->addTag(pTmp->toTag());
     debug_logger->endElement("created");
-    debug_logger->endElement("createAndSetParentAndDefine");
+    debug_logger->endElement("helper.createAndSetParentAndDefine");
 #endif
 
     uno::Reference<XFastContextHandler> aResult(pTmp);
@@ -135,6 +138,12 @@ OOXMLFastHelper<T>::createAndSetParentRef
 (OOXMLFastContextHandler * pHandler, sal_uInt32 nToken,
  const uno::Reference < xml::sax::XFastAttributeList > & Attribs)
 {
+#ifdef DEBUG_HELPER
+    debug_logger->startElement("helper.createAndSetParentRef");
+    debug_logger->attribute("context", pHandler->getType());
+    debug_logger->attribute("type", fastTokenToId(nToken));
+#endif
+
     boost::shared_ptr<OOXMLFastContextHandler> pTmp(new T(pHandler));
 
     uno::Reference<XFastContextHandler> xChild =
@@ -149,15 +158,11 @@ OOXMLFastHelper<T>::createAndSetParentRef
     }
 
 
-#ifdef DEBUG_CREATE
-    debug_logger->startElement("createAndSetParentRef");
-    debug_logger->attribute("context", pHandler->getType());
-    debug_logger->attribute("type", fastTokenToId(nToken));
-
+#ifdef DEBUG_HELPER
     debug_logger->startElement("created");
-    debug_logger->chars(pTmp->getType());
+    debug_logger->addTag(pTmp->toTag());
     debug_logger->endElement("created");
-    debug_logger->endElement("createAndSetParentRef");
+    debug_logger->endElement("helper.createAndSetParentRef");
 #endif
 
     return xChild;
@@ -170,7 +175,7 @@ void OOXMLFastHelper<T>::newProperty(OOXMLFastContextHandler * pHandler,
 {
     OOXMLValue::Pointer_t pVal(new T(rValue));
 
-#ifdef DEBUG_PROPERTIES
+#ifdef DEBUG_HELPER
     string aStr = (*QNameToString::Instance())(nId);
 
     debug_logger->startElement("newProperty-from-string");
@@ -182,11 +187,14 @@ void OOXMLFastHelper<T>::newProperty(OOXMLFastContextHandler * pHandler,
 
     if (aStr.size() == 0)
         debug_logger->addTag(XMLTag::Pointer_t(new XMLTag("unknown-qname")));
+#endif
 
+    pHandler->newProperty(nId, pVal);
+
+#ifdef DEBUG_HELPER
     debug_logger->endElement("newProperty-from-string");
 #endif
 
-    pHandler->newProperty(nId, pVal);
 }
 
 template <class T>
@@ -196,17 +204,17 @@ void OOXMLFastHelper<T>::newProperty(OOXMLFastContextHandler * pHandler,
 {
     OOXMLValue::Pointer_t pVal(new T(nVal));
 
-#ifdef DEBUG_PROPERTIES
+#ifdef DEBUG_HELPER
     string aStr = (*QNameToString::Instance())(nId);
 
-    debug_logger->startElement("newProperty-from-int");
+    debug_logger->startElement("helper.newProperty-from-int");
     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-from-int");
+    debug_logger->endElement("helper.newProperty-from-int");
 #endif
 
     pHandler->newProperty(nId, pVal);
@@ -221,8 +229,8 @@ void OOXMLFastHelper<T>::mark(OOXMLFastContextHandler * pHandler,
 
     string aStr = (*QNameToString::Instance())(nId);
 
-#ifdef DEBUG_PROPERTIES
-    debug_logger->startElement("mark");
+#ifdef DEBUG_HELPER
+    debug_logger->startElement("helper.mark");
     debug_logger->attribute("name", aStr);
     debug_logger->attribute
     ("value",
@@ -232,22 +240,10 @@ void OOXMLFastHelper<T>::mark(OOXMLFastContextHandler * pHandler,
     if (aStr.size() == 0)
         debug_logger->addTag(XMLTag::Pointer_t(new XMLTag("unknown-qname")));
 
-    debug_logger->endElement("mark");
+    debug_logger->endElement("helper.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/factory_ns.xsl b/writerfilter/source/ooxml/factory_ns.xsl
index 53a1075130ca..0349d832128d 100644
--- a/writerfilter/source/ooxml/factory_ns.xsl
+++ b/writerfilter/source/ooxml/factory_ns.xsl
@@ -105,6 +105,10 @@ public:
     virtual string getDefineName(Id nId) const;</xsl:text>
     <xsl:call-template name="factoryactiondecls"/>
     virtual void attributeAction(OOXMLFastContextHandler * pHandler, Token_t nToken, OOXMLValue::Pointer_t pValue);
+
+#ifdef DEBUG_FACTORY
+    virtual string getName() const;
+#endif
     <xsl:text>
     
     virtual ~</xsl:text>
diff --git a/writerfilter/source/ooxml/factoryimpl.xsl b/writerfilter/source/ooxml/factoryimpl.xsl
index 8eecf4aba813..781883b761e5 100644
--- a/writerfilter/source/ooxml/factoryimpl.xsl
+++ b/writerfilter/source/ooxml/factoryimpl.xsl
@@ -78,6 +78,10 @@ uno::Reference&lt; xml::sax::XFastContextHandler &gt; OOXMLFactory::createFastCh
     uno::Reference &lt; xml::sax::XFastContextHandler &gt; aResult;
     Id nDefine = pHandler->getDefine();
     
+#ifdef DEBUG_FACTORY
+    debug_logger->startElement("factory.createFastChildContextFromFactory");            
+#endif
+
     if (pFactory.get() != NULL)
     {
         CreateElementMapPointer pMap = pFactory-&gt;getCreateElementMap(nDefine);
@@ -86,12 +90,13 @@ uno::Reference&lt; xml::sax::XFastContextHandler &gt; OOXMLFactory::createFastCh
         if (pMap.get() != NULL)
         {
             Id nId = (*pTokenMap)[Element];
-#ifdef DEBUG_CREATE
+#ifdef DEBUG_FACTORY
+            string sFactoryName(pFactory->getName());
             string sDefine(pFactory->getDefineName(nDefine));
             string sElement(fastTokenToId(Element));
             string sQName((*QNameToString::Instance())(nId));
             
-            debug_logger->startElement("createFastChildContextFromFactory");            
+            debug_logger->attribute("factory-name", sFactoryName);
             debug_logger->attribute("define", sDefine);
             debug_logger->attribute("element", sElement);
             debug_logger->attribute("qname", sQName);
@@ -134,12 +139,13 @@ uno::Reference&lt; xml::sax::XFastContextHandler &gt; OOXMLFactory::createFastCh
                 break;
             }
 
-#ifdef DEBUG_CREATE
-            debug_logger->endElement("createFastChildContextFromFactory");        
-#endif
         }
     }
     
+#ifdef DEBUG_FACTORY
+    debug_logger->endElement("factory.createFastChildContextFromFactory");        
+#endif
+
     return aResult;
 }
 </xsl:text>
@@ -178,8 +184,8 @@ OOXMLFactory_ns::Pointer_t OOXMLFactory::getFactoryForNamespace(Id nId)
 uno::Reference&lt; xml::sax::XFastContextHandler &gt; OOXMLFactory::createFastChildContextFromStart
 (OOXMLFastContextHandler * pHandler, Token_t Element)
 {
-#ifdef DEBUG_CREATE
-    debug_logger->startElement("createFastChildContextFromStart");
+#ifdef DEBUG_FACTORY
+    debug_logger->startElement("factory.createFastChildContextFromStart");
 #endif
 
     uno::Reference &lt; xml::sax::XFastContextHandler &gt; aResult;
@@ -198,8 +204,8 @@ uno::Reference&lt; xml::sax::XFastContextHandler &gt; OOXMLFactory::createFastCh
     </xsl:for-each>
     <xsl:text>
     
-#ifdef DEBUG_CREATE
-    debug_logger->endElement("createFastChildContextFromStart");
+#ifdef DEBUG_FACTORY
+    debug_logger->endElement("factory.createFastChildContextFromStart");
 #endif
     return aResult;
 }
diff --git a/writerfilter/source/ooxml/factoryimpl_ns.xsl b/writerfilter/source/ooxml/factoryimpl_ns.xsl
index 2ec75b701205..d5dfeeac25ab 100644
--- a/writerfilter/source/ooxml/factoryimpl_ns.xsl
+++ b/writerfilter/source/ooxml/factoryimpl_ns.xsl
@@ -881,6 +881,22 @@ void </xsl:text>
   </xsl:choose>
 </xsl:template>
 
+<xsl:template name="factorygetname">
+  <xsl:param name="ns"/>
+  <xsl:text>
+#ifdef DEBUG_FACTORY
+string </xsl:text>
+<xsl:call-template name="factoryclassname"/>
+<xsl:text>::getName() const
+{
+    return "</xsl:text>
+    <xsl:value-of select="$ns"/>
+    <xsl:text>";
+}
+#endif
+</xsl:text>
+</xsl:template>
+
   <xsl:template match="/">
     <xsl:variable name="ns" select="substring-before(substring-after($file, 'OOXMLFactory_'), '.cxx')"/>
     <xsl:text>
@@ -910,6 +926,9 @@ namespace ooxml {
         <xsl:call-template name="factorygetdefinename"/>
         <xsl:call-template name="factorytokentoidmap"/>
         <xsl:call-template name="factoryattributeaction"/>
+        <xsl:call-template name="factorygetname">
+          <xsl:with-param name="ns" select="$ns"/>
+        </xsl:call-template>
     </xsl:for-each>
     <xsl:text>
 /// @endcond
-- 
cgit 


From 5913346323dc551dd316a5a5dd96988251858e39 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 10 Aug 2010 17:44:17 +0200
Subject: writerfilter09: debugging output for
 OOXMLFastContextHandler::setValue, refactor debugging code for
 OOXMLPropertySet

---
 writerfilter/source/ooxml/OOXMLFastContextHandler.cxx |  9 +++++++++
 writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx    | 11 ++++++++---
 2 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
index 6e08896a9ec0..1f5181e03055 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
@@ -1468,7 +1468,16 @@ OOXMLFastContextHandlerValue::~OOXMLFastContextHandlerValue()
 
 void OOXMLFastContextHandlerValue::setValue(OOXMLValue::Pointer_t pValue)
 {
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->startElement("contexthandler.setValue");
+    debug_logger->attribute("value", pValue->toString());
+#endif
+
     mpValue = pValue;
+
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->endElement("contexthandler.setValue");
+#endif
 }
 
 OOXMLValue::Pointer_t OOXMLFastContextHandlerValue::getValue() const
diff --git a/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx b/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx
index f106972b23c0..6e0bcaf763cd 100644
--- a/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx
+++ b/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx
@@ -34,8 +34,6 @@
 #include <ooxml/OOXMLFastTokens.hxx>
 #include "ooxmlLoggers.hxx"
 
-//#define DEBUG_RESOLVE
-
 namespace writerfilter {
 namespace ooxml
 {
@@ -474,15 +472,22 @@ string OOXMLPropertySetImpl::getType() const
 
 void OOXMLPropertySetImpl::add(OOXMLProperty::Pointer_t pProperty)
 {
+#ifdef DEBUG_PROPERTY_SET
+    debug_logger->startElement("propertyset.add");
+    debug_logger->chars(pProperty->toString());
+#endif
+
     if (pProperty.get() != NULL && pProperty->getId() != 0x0)
     {
         mProperties.push_back(pProperty);
     }
-#ifdef DEBUG_PROPERTIES
+#ifdef DEBUG_PROPERTY_SET
     else
     {
         debug_logger->element("warning.property_not_added");
     }
+
+    debug_logger->endElement("propertyset.add");
 #endif
 }
 
-- 
cgit 


From 308b7dd63832016ef7c06c9f1652833cd61c4628 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 10 Aug 2010 17:56:55 +0200
Subject: writerfilter09: missed a #ifdef DEBUG_FACTORY

---
 writerfilter/source/ooxml/OOXMLFactory.cxx | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/writerfilter/source/ooxml/OOXMLFactory.cxx b/writerfilter/source/ooxml/OOXMLFactory.cxx
index a99811bf03fb..78c82d5dac3e 100755
--- a/writerfilter/source/ooxml/OOXMLFactory.cxx
+++ b/writerfilter/source/ooxml/OOXMLFactory.cxx
@@ -352,10 +352,12 @@ void OOXMLFactory_ns::attributeAction(OOXMLFastContextHandler *, Token_t, OOXMLV
 {
 }
 
+#ifdef DEBUG_FACTORY
 string OOXMLFactory_ns::getName() const
 {
     return "noname";
 }
+#endif
 
 }
 }
-- 
cgit 


From cd20b831f0876e70def0e1eac2525fef977c1b12 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 13:29:28 +0200
Subject: writerfilter09: added LoggedResources for Stream, Properties and
 Table

---
 writerfilter/inc/resourcemodel/LoggedResources.hxx | 114 +++++++++
 .../source/resourcemodel/LoggedResources.cxx       | 275 +++++++++++++++++++++
 writerfilter/source/resourcemodel/makefile.mk      |  11 +-
 3 files changed, 395 insertions(+), 5 deletions(-)
 create mode 100644 writerfilter/inc/resourcemodel/LoggedResources.hxx
 create mode 100644 writerfilter/source/resourcemodel/LoggedResources.cxx

diff --git a/writerfilter/inc/resourcemodel/LoggedResources.hxx b/writerfilter/inc/resourcemodel/LoggedResources.hxx
new file mode 100644
index 000000000000..43b8a0e74776
--- /dev/null
+++ b/writerfilter/inc/resourcemodel/LoggedResources.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_LOGGED_RESOURCES_HXX
+#define INCLUDED_LOGGED_RESOURCES_HXX
+
+#include "WW8ResourceModel.hxx"
+#include "TagLogger.hxx"
+
+namespace writerfilter
+{
+
+class LoggedStream : public Stream
+{
+public:
+    explicit LoggedStream(TagLogger::Pointer_t pLogger, const string & sPrefix);
+    virtual ~LoggedStream();
+
+    void startSectionGroup();
+    void endSectionGroup();
+    void startParagraphGroup();
+    void endParagraphGroup();
+    void startCharacterGroup();
+    void endCharacterGroup();
+    void startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
+    void endShape();
+    void text(const sal_uInt8 * data, size_t len);
+    void utext(const sal_uInt8 * data, size_t len);
+    void props(writerfilter::Reference<Properties>::Pointer_t ref);
+    void table(Id name, writerfilter::Reference<Table>::Pointer_t ref);
+    void substream(Id name, writerfilter::Reference<Stream>::Pointer_t ref);
+    void info(const string & info);
+
+protected:
+    virtual void lcl_startSectionGroup() = 0;
+    virtual void lcl_endSectionGroup() = 0;
+    virtual void lcl_startParagraphGroup() = 0;
+    virtual void lcl_endParagraphGroup() = 0;
+    virtual void lcl_startCharacterGroup() = 0;
+    virtual void lcl_endCharacterGroup() = 0;
+    virtual void lcl_startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape )  = 0;
+    virtual void lcl_endShape() = 0;
+    virtual void lcl_text(const sal_uInt8 * data, size_t len) = 0;
+    virtual void lcl_utext(const sal_uInt8 * data, size_t len) = 0;
+    virtual void lcl_props(writerfilter::Reference<Properties>::Pointer_t ref) = 0;
+    virtual void lcl_table(Id name, writerfilter::Reference<Table>::Pointer_t ref) = 0;
+    virtual void lcl_substream(Id name, writerfilter::Reference<Stream>::Pointer_t ref) = 0;
+    virtual void lcl_info(const string & info) = 0;
+
+private:
+    TagLogger::Pointer_t mpLogger;
+    string msPrefix;
+};
+
+class LoggedProperties : public Properties
+{
+public:
+    explicit LoggedProperties(TagLogger::Pointer_t pLogger, const string & sPrefix);
+    virtual ~LoggedProperties();
+
+    void attribute(Id name, Value & val);
+    void sprm(Sprm & sprm);
+
+protected:
+    virtual void lcl_attribute(Id name, Value & val) = 0;
+    virtual void lcl_sprm(Sprm & sprm) = 0;
+
+private:
+    TagLogger::Pointer_t mpLogger;
+    string msPrefix;
+};
+
+class LoggedTable : public Table
+{
+public:
+    explicit LoggedTable(TagLogger::Pointer_t pLogger, const string & sPrefix);
+    virtual ~LoggedTable();
+
+    void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
+protected:
+    virtual void lcl_entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref) = 0;
+
+private:
+    TagLogger::Pointer_t mpLogger;
+    string msPrefix;
+};
+
+}
+#endif // INCLUDED_LOGGED_RESOURCES_HXX
diff --git a/writerfilter/source/resourcemodel/LoggedResources.cxx b/writerfilter/source/resourcemodel/LoggedResources.cxx
new file mode 100644
index 000000000000..d2019af2b14f
--- /dev/null
+++ b/writerfilter/source/resourcemodel/LoggedResources.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 <rtl/ustrbuf.hxx>
+#include <resourcemodel/LoggedResources.hxx>
+#include <resourcemodel/QNameToString.hxx>
+
+namespace writerfilter
+{
+
+// class: LoggedStream
+
+LoggedStream::LoggedStream(TagLogger::Pointer_t pLogger, const string & sPrefix)
+: mpLogger(pLogger), msPrefix(sPrefix)
+{
+}
+
+LoggedStream::~LoggedStream()
+{
+}
+
+void LoggedStream::startSectionGroup()
+{
+#ifdef DEBUG_LOGGING
+    mpLogger->startElement(msPrefix + ".section");
+#endif
+
+    lcl_startSectionGroup();
+}
+
+void LoggedStream::endSectionGroup()
+{
+    lcl_endSectionGroup();
+
+#ifdef DEBUG_LOGGING
+    mpLogger->endElement(msPrefix + ".section");
+#endif
+}
+
+void LoggedStream::startParagraphGroup()
+{
+#ifdef DEBUG_LOGGING
+    mpLogger->startElement(msPrefix + ".paragraph");
+#endif
+
+    lcl_startParagraphGroup();
+}
+
+void LoggedStream::endParagraphGroup()
+{
+    lcl_endParagraphGroup();
+
+#ifdef DEBUG_LOGGING
+    mpLogger->endElement(msPrefix + ".paragraph");
+#endif
+}
+
+
+void LoggedStream::startCharacterGroup()
+{
+#ifdef DEBUG_LOGGING
+    mpLogger->startElement(msPrefix + ".charactergroup");
+#endif
+
+    lcl_startCharacterGroup();
+}
+
+void LoggedStream::endCharacterGroup()
+{
+    lcl_endCharacterGroup();
+
+#ifdef DEBUG_LOGGING
+    mpLogger->endElement(msPrefix + ".charactergroup");
+#endif
+}
+
+void LoggedStream::startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape )
+{
+#ifdef DEBUG_LOGGING
+    mpLogger->startElement(msPrefix + ".shape");
+#endif
+
+    lcl_startShape(xShape);
+}
+
+void LoggedStream::endShape()
+{
+    lcl_endShape();
+
+#ifdef DEBUG_LOGGING
+    mpLogger->endElement(msPrefix + ".shape");
+#endif
+}
+
+void LoggedStream::text(const sal_uInt8 * data, size_t len)
+{
+#ifdef DEBUG_LOGGING
+    mpLogger->startElement(msPrefix + ".text");
+
+    ::rtl::OUString sText( (const sal_Char*) data, len, RTL_TEXTENCODING_MS_1252 );
+
+    mpLogger->startElement(msPrefix + ".data");
+    mpLogger->chars(sText);
+    mpLogger->endElement(msPrefix + ".data");
+#endif
+
+    lcl_text(data, len);
+
+#ifdef DEBUG_LOGGING
+    mpLogger->endElement(msPrefix + ".text");
+#endif
+}
+
+void LoggedStream::utext(const sal_uInt8 * data, size_t len)
+{
+#ifdef DEBUG_LOGGING
+    mpLogger->startElement(msPrefix + ".utext");
+    mpLogger->startElement(msPrefix + ".data");
+
+    ::rtl::OUString sText;
+    ::rtl::OUStringBuffer aBuffer = ::rtl::OUStringBuffer(len);
+    aBuffer.append( (const sal_Unicode *) data, len);
+    sText = aBuffer.makeStringAndClear();
+
+    mpLogger->chars(sText);
+
+    mpLogger->endElement(msPrefix + ".data");
+#endif
+
+    lcl_utext(data, len);
+
+#ifdef DEBUG_LOGGING
+    mpLogger->endElement(msPrefix + ".utext");
+#endif
+}
+
+void LoggedStream::props(writerfilter::Reference<Properties>::Pointer_t ref)
+{
+#ifdef DEBUG_LOGGING
+    mpLogger->startElement(msPrefix + ".props");
+#endif
+
+    lcl_props(ref);
+
+#ifdef DEBUG_LOGGING
+    mpLogger->endElement(msPrefix + ".props");
+#endif
+}
+
+void LoggedStream::table(Id name, writerfilter::Reference<Table>::Pointer_t ref)
+{
+#ifdef DEBUG_LOGGING
+    mpLogger->startElement(msPrefix + ".table");
+    mpLogger->attribute("name", (*QNameToString::Instance())(name));
+#endif
+
+    lcl_table(name, ref);
+
+#ifdef DEBUG_LOGGING
+    mpLogger->endElement(msPrefix + ".table");
+#endif
+}
+
+void LoggedStream::substream(Id name, writerfilter::Reference<Stream>::Pointer_t ref)
+{
+#ifdef DEBUG_LOGGING
+    mpLogger->startElement(msPrefix + ".substream");
+    mpLogger->attribute("name", name);
+#endif
+
+    lcl_substream(name, ref);
+
+#ifdef DEBUG_LOGGING
+    mpLogger->endElement(msPrefix + ".substream");
+#endif
+}
+
+void LoggedStream::info(const string & info)
+{
+#ifdef DEBUG_LOGGING
+    mpLogger->startElement(msPrefix + ".info");
+    mpLogger->attribute("text", info);
+#endif
+
+    lcl_info(info);
+
+#ifdef DEBUG_LOGGING
+    mpLogger->endElement(msPrefix + ".info");
+#endif
+}
+
+// class LoggedProperties
+LoggedProperties::LoggedProperties(TagLogger::Pointer_t pLogger, const string & sPrefix)
+: mpLogger(pLogger), msPrefix(sPrefix)
+{
+}
+
+LoggedProperties::~LoggedProperties()
+{
+}
+
+void LoggedProperties::attribute(Id name, Value & val)
+{
+#ifdef DEBUG_LOGGING
+    mpLogger->startElement(msPrefix + ".attribute");
+    mpLogger->attribute("name", (*QNameToString::Instance())(name));
+    mpLogger->attribute("value", val.toString());
+    mpLogger->endElement(msPrefix + ".attribute");
+#endif
+
+    lcl_attribute(name, val);
+}
+
+void LoggedProperties::sprm(Sprm & sprm)
+{
+#ifdef DEBUG_LOGGING
+    mpLogger->startElement(msPrefix + ".sprm");
+    mpLogger->chars(sprm.toString());
+#endif
+
+    lcl_sprm(sprm);
+
+#ifdef DEBUG_LOGGING
+    mpLogger->endElement(msPrefix + ".sprm");
+#endif
+}
+
+LoggedTable::LoggedTable(TagLogger::Pointer_t pLogger, const string & sPrefix)
+: mpLogger(pLogger), msPrefix(sPrefix)
+{
+}
+
+LoggedTable::~LoggedTable()
+{
+}
+
+void LoggedTable::entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref)
+{
+#ifdef DEBUG_LOGGING
+    mpLogger->startElement(msPrefix + ".entry");
+    mpLogger->attribute("pos", pos);
+#endif
+
+    lcl_entry(pos, ref);
+
+#ifdef DEBUG_LOGGING
+    mpLogger->endElement(msPrefix + ".entry");
+#endif
+}
+
+}
diff --git a/writerfilter/source/resourcemodel/makefile.mk b/writerfilter/source/resourcemodel/makefile.mk
index bb5bc05ac1bd..204c524856ff 100644
--- a/writerfilter/source/resourcemodel/makefile.mk
+++ b/writerfilter/source/resourcemodel/makefile.mk
@@ -49,14 +49,15 @@ NOOPTFILES= \
     $(SLO)$/qnametostr.obj
 
 SLOFILES= \
+    $(SLO)$/LoggedResources.obj \
+    $(SLO)$/Protocol.obj \
+    $(SLO)$/ResourceModelHelper.obj \
+    $(SLO)$/TagLogger.obj \
+    $(SLO)$/WW8Analyzer.obj \
     $(SLO)$/qnametostr.obj \
-    $(SLO)$/sprmcodetostr.obj \
     $(SLO)$/resourcemodel.obj \
+    $(SLO)$/sprmcodetostr.obj \
     $(SLO)$/util.obj \
-    $(SLO)$/TagLogger.obj \
-    $(SLO)$/ResourceModelHelper.obj \
-    $(SLO)$/WW8Analyzer.obj \
-    $(SLO)$/Protocol.obj
 
 # linux 64 bit: compiler (gcc 4.2.3) fails with 'out of memory'
 .IF "$(OUTPATH)"=="unxlngx6"
-- 
cgit 


From bb22544122c56c7bf9518d03e316283209334288 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 13:31:13 +0200
Subject: writerfilter09: use logged resources for DomainMapper

---
 writerfilter/inc/dmapper/DomainMapper.hxx       |  62 +++++-----
 writerfilter/source/dmapper/DomainMapper.cxx    | 153 ++++--------------------
 writerfilter/source/dmapper/GraphicImport.cxx   |   4 -
 writerfilter/source/dmapper/StyleSheetTable.cxx |   2 +-
 writerfilter/source/dmapper/dmapperLoggers.hxx  |   3 +-
 5 files changed, 60 insertions(+), 164 deletions(-)

diff --git a/writerfilter/inc/dmapper/DomainMapper.hxx b/writerfilter/inc/dmapper/DomainMapper.hxx
index 99602ceab924..d7f6c005a5c4 100644
--- a/writerfilter/inc/dmapper/DomainMapper.hxx
+++ b/writerfilter/inc/dmapper/DomainMapper.hxx
@@ -28,7 +28,7 @@
 #define INCLUDED_DOMAINMAPPER_HXX
 
 #include <WriterFilterDllApi.hxx>
-#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/LoggedResources.hxx>
 #include <com/sun/star/lang/XComponent.hpp>
 #include <com/sun/star/text/FontEmphasis.hpp>
 #include <com/sun/star/style/TabAlign.hpp>
@@ -77,8 +77,8 @@ enum SourceDocumentType
     DOCUMENT_OOXML,
     DOCUMENT_RTF
 };
-class WRITERFILTER_DLLPUBLIC DomainMapper : public Properties, public Table,
-                    public BinaryObj, public Stream
+class WRITERFILTER_DLLPUBLIC DomainMapper : public LoggedProperties, public LoggedTable,
+                    public BinaryObj, public LoggedStream
 {
     DomainMapper_Impl   *m_pImpl;
 
@@ -89,38 +89,14 @@ public:
                                 SourceDocumentType eDocumentType );
     virtual ~DomainMapper();
 
-    // 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);
+    // Stream
+    virtual void markLastParagraphInSection();
 
     // 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 markLastParagraphInSection();
-    virtual void startCharacterGroup();
-    virtual void endCharacterGroup();
-    virtual void startShape( ::com::sun::star::uno::Reference< com::sun::star::drawing::XShape > xShape );
-    virtual void endShape( );
-
-    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);
-
-    void sprm( Sprm& sprm, ::boost::shared_ptr<PropertyMap> pContext, SprmType = SPRM_DEFAULT );
+    void sprmWithProps( Sprm& sprm, ::boost::shared_ptr<PropertyMap> pContext, SprmType = SPRM_DEFAULT );
 
     void PushStyleSheetProperties( ::boost::shared_ptr<PropertyMap> pStyleProperties, bool bAffectTableMngr = false );
     void PopStyleSheetProperties( bool bAffectTableMngr = false );
@@ -138,6 +114,32 @@ public:
     boost::shared_ptr< StyleSheetTable > GetStyleSheetTable( );
 
 private:
+    // Stream
+    virtual void lcl_startSectionGroup();
+    virtual void lcl_endSectionGroup();
+    virtual void lcl_startParagraphGroup();
+    virtual void lcl_endParagraphGroup();
+    virtual void lcl_startCharacterGroup();
+    virtual void lcl_endCharacterGroup();
+    virtual void lcl_startShape( ::com::sun::star::uno::Reference< com::sun::star::drawing::XShape > xShape );
+    virtual void lcl_endShape( );
+
+    virtual void lcl_text(const sal_uInt8 * data, size_t len);
+    virtual void lcl_utext(const sal_uInt8 * data, size_t len);
+    virtual void lcl_props(writerfilter::Reference<Properties>::Pointer_t ref);
+    virtual void lcl_table(Id name,
+                           writerfilter::Reference<Table>::Pointer_t ref);
+    virtual void lcl_substream(Id name,
+                               ::writerfilter::Reference<Stream>::Pointer_t ref);
+    virtual void lcl_info(const string & info);
+
+    // Properties
+    virtual void lcl_attribute(Id Name, Value & val);
+    virtual void lcl_sprm(Sprm & sprm);
+
+    // Table
+    virtual void lcl_entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
     void handleUnderlineType(const sal_Int32 nIntValue, const ::boost::shared_ptr<PropertyMap> pContext);
     void handleParaJustification(const sal_Int32 nIntValue, const ::boost::shared_ptr<PropertyMap> pContext, const bool bExchangeLeftRight);
     bool getColorFromIndex(const sal_Int32 nIndex, sal_Int32 &nColor);
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 65dfb4c5fcec..7364ec3eaaff 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -86,15 +86,11 @@
 #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
 
+#include <resourcemodel/TagLogger.hxx>
 
 using namespace ::com::sun::star;
 using namespace ::rtl;
@@ -106,9 +102,7 @@ using resourcemodel::resolveAttributeProperties;
 
 namespace dmapper{
 
-#ifdef DEBUG_DOMAINMAPPER
 TagLogger::Pointer_t dmapper_logger(TagLogger::getInstance("DOMAINMAPPER"));
-#endif
 
 /* ---- Fridrich's mess begins here ---- */
 struct _PageSz
@@ -129,8 +123,11 @@ DomainMapper::DomainMapper( const uno::Reference< uno::XComponentContext >& xCon
                             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)
+LoggedProperties(dmapper_logger, "DomainMapper"),
+LoggedTable(dmapper_logger, "DomainMapper"),
+LoggedStream(dmapper_logger, "DomainMapper"),
+m_pImpl( new DomainMapper_Impl( *this, xContext, xModel, eDocumentType )),
+mnBackgroundColor(0), mbIsHighlightSet(false)
 {
     // #i24363# tab stops relative to indent
     m_pImpl->SetDocumentSettingsProperty(
@@ -193,14 +190,8 @@ DomainMapper::~DomainMapper()
 /*-- 09.06.2006 09:52:12---------------------------------------------------
 
 -----------------------------------------------------------------------*/
-void DomainMapper::attribute(Id nName, Value & val)
+void DomainMapper::lcl_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());
-    dmapper_logger->endElement("attribute");
-#endif
     static ::rtl::OUString sLocalBookmarkName;
     sal_Int32 nIntValue = val.getInt();
     rtl::OUString sStringValue = val.getString();
@@ -2195,20 +2186,16 @@ void DomainMapper::attribute(Id nName, Value & val)
 /*-- 09.06.2006 09:52:12---------------------------------------------------
 
 -----------------------------------------------------------------------*/
-void DomainMapper::sprm(Sprm & rSprm)
+void DomainMapper::lcl_sprm(Sprm & rSprm)
 {
     if( !m_pImpl->getTableManager().sprm(rSprm))
-        DomainMapper::sprm( rSprm, m_pImpl->GetTopContext() );
+        sprmWithProps( rSprm, m_pImpl->GetTopContext() );
 }
 /*-- 20.06.2006 09:58:33---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmType )
+void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmType )
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("DomainMapper.sprm");
-    dmapper_logger->chars(rSprm.toString());
-#endif
     OSL_ENSURE(rContext.get(), "PropertyMap has to be valid!");
     if(!rContext.get())
         return ;
@@ -2885,12 +2872,6 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
                     {
                         uno::Any aBold( uno::makeAny( nIntValue ? awt::FontWeight::BOLD : awt::FontWeight::NORMAL ) );
 
-#ifdef DEBUG_DOMAINMAPPER
-                        dmapper_logger->startElement("charWeight");
-                        dmapper_logger->attribute("weight", nIntValue ? awt::FontWeight::BOLD : awt::FontWeight::NORMAL);
-                        dmapper_logger->endElement("charWeight");
-#endif
-
                         rContext->Insert(ePropertyId, true, aBold );
                         if( nSprmId != NS_sprm::LN_CFBoldBi ) // sprmCFBoldBi
                             rContext->Insert(PROP_CHAR_WEIGHT_ASIAN, true, aBold );
@@ -4246,27 +4227,14 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
 #endif
         }
     }
-
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->addTag(rContext->toTag());
-    dmapper_logger->endElement("DomainMapper.sprm");
-#endif
 }
 /*-- 09.06.2006 09:52:13---------------------------------------------------
 
 -----------------------------------------------------------------------*/
-void DomainMapper::entry(int /*pos*/,
-                         writerfilter::Reference<Properties>::Pointer_t ref)
+void DomainMapper::lcl_entry(int /*pos*/,
+                             writerfilter::Reference<Properties>::Pointer_t ref)
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("DomainMapper.entry");
-#endif
-
     ref->resolve(*this);
-
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("DomainMapper.entry");
-#endif
 }
 /*-- 09.06.2006 09:52:13---------------------------------------------------
 
@@ -4278,17 +4246,14 @@ void DomainMapper::data(const sal_uInt8* /*buf*/, size_t /*len*/,
 /*-- 09.06.2006 09:52:13---------------------------------------------------
 
 -----------------------------------------------------------------------*/
-void DomainMapper::startSectionGroup()
+void DomainMapper::lcl_startSectionGroup()
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("section");
-#endif
     m_pImpl->PushProperties(CONTEXT_SECTION);
 }
 /*-- 09.06.2006 09:52:13---------------------------------------------------
 
 -----------------------------------------------------------------------*/
-void DomainMapper::endSectionGroup()
+void DomainMapper::lcl_endSectionGroup()
 {
     PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_SECTION);
     SectionPropertyMap* pSectionContext = dynamic_cast< SectionPropertyMap* >( pContext.get() );
@@ -4296,20 +4261,12 @@ void DomainMapper::endSectionGroup()
     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()
+void DomainMapper::lcl_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") );
@@ -4326,40 +4283,27 @@ void DomainMapper::startParagraphGroup()
 /*-- 09.06.2006 09:52:14---------------------------------------------------
 
 -----------------------------------------------------------------------*/
-void DomainMapper::endParagraphGroup()
+void DomainMapper::lcl_endParagraphGroup()
 {
     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::markLastParagraphInSection( )
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->element( "markLastParagraphInSection" );
-#endif
     m_pImpl->SetIsLastParagraphInSection( true );
 }
 
-void DomainMapper::startShape( uno::Reference< drawing::XShape > xShape )
+void DomainMapper::lcl_startShape( uno::Reference< drawing::XShape > xShape )
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("shape");
-#endif
     m_pImpl->PushShapeContext( xShape );
 }
 
-void DomainMapper::endShape( )
+void DomainMapper::lcl_endShape( )
 {
     m_pImpl->PopShapeContext( );
-
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("shape");
-#endif
 }
 
 /*-- 13.06.2007 16:15:55---------------------------------------------------
@@ -4401,12 +4345,8 @@ void DomainMapper::PopListProperties()
 
 -----------------------------------------------------------------------*/
 
-void DomainMapper::startCharacterGroup()
+void DomainMapper::lcl_startCharacterGroup()
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("charactergroup");
-#endif
-
     m_pImpl->PushProperties(CONTEXT_CHARACTER);
     DomainMapperTableManager& rTableManager = m_pImpl->getTableManager();
     if( rTableManager.getTableStyleName().getLength() )
@@ -4418,27 +4358,17 @@ void DomainMapper::startCharacterGroup()
 /*-- 09.06.2006 09:52:14---------------------------------------------------
 
 -----------------------------------------------------------------------*/
-void DomainMapper::endCharacterGroup()
+void DomainMapper::lcl_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)
+void DomainMapper::lcl_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 );
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("text");
-    dmapper_logger->chars(sText);
-    dmapper_logger->endElement("text");
-#endif
-
     try
     {
         if(len == 1)
@@ -4515,19 +4445,13 @@ void DomainMapper::text(const sal_uInt8 * data_, size_t len)
 /*-- 09.06.2006 09:52:15---------------------------------------------------
 
 -----------------------------------------------------------------------*/
-void DomainMapper::utext(const sal_uInt8 * data_, size_t len)
+void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
 {
     OUString sText;
     OUStringBuffer aBuffer = OUStringBuffer(len);
     aBuffer.append( (const sal_Unicode *) data_, len);
     sText = aBuffer.makeStringAndClear();
 
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("utext");
-    dmapper_logger->chars(sText);
-    dmapper_logger->endElement("utext");
-#endif
-
     try
     {
         m_pImpl->getTableManager().utext(data_, len);
@@ -4585,12 +4509,8 @@ void DomainMapper::utext(const sal_uInt8 * data_, size_t len)
 /*-- 09.06.2006 09:52:15---------------------------------------------------
 
 -----------------------------------------------------------------------*/
-void DomainMapper::props(writerfilter::Reference<Properties>::Pointer_t ref)
+void DomainMapper::lcl_props(writerfilter::Reference<Properties>::Pointer_t ref)
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("props");
-#endif
-
     string sType = ref->getType();
     if( sType == "PICF" )
     {
@@ -4602,21 +4522,12 @@ void DomainMapper::props(writerfilter::Reference<Properties>::Pointer_t ref)
     }
     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)
+void DomainMapper::lcl_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 */
@@ -4666,20 +4577,12 @@ void DomainMapper::table(Id name, writerfilter::Reference<Table>::Pointer_t ref)
         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)
+void DomainMapper::lcl_substream(Id rName, ::writerfilter::Reference<Stream>::Pointer_t ref)
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("substream");
-#endif
-
     m_pImpl->appendTableManager( );
     m_pImpl->getTableManager().startLevel();
 
@@ -4751,15 +4654,11 @@ void DomainMapper::substream(Id rName, ::writerfilter::Reference<Stream>::Pointe
 
     m_pImpl->getTableManager().endLevel();
     m_pImpl->popTableManager( );
-
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("substream");
-#endif
 }
 /*-- 09.06.2006 09:52:16---------------------------------------------------
 
 -----------------------------------------------------------------------*/
-void DomainMapper::info(const string & /*info_*/)
+void DomainMapper::lcl_info(const string & /*info_*/)
 {
 }
 
diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx
index 14a54c640626..79f94b9d1873 100644
--- a/writerfilter/source/dmapper/GraphicImport.cxx
+++ b/writerfilter/source/dmapper/GraphicImport.cxx
@@ -69,10 +69,6 @@ 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   >
 {
diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index 9dd5503693a7..26b863e38cab 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -709,7 +709,7 @@ void StyleSheetTable::sprm(Sprm & rSprm)
                     m_pImpl->m_rDMapper.PushStyleSheetProperties( m_pImpl->m_pCurrentEntry->pProperties );
 
                     PropertyMapPtr pProps(new PropertyMap());
-                    m_pImpl->m_rDMapper.sprm( rSprm, pProps );
+                    m_pImpl->m_rDMapper.sprmWithProps( rSprm, pProps );
 
                     m_pImpl->m_pCurrentEntry->pProperties->insert(pProps);
 
diff --git a/writerfilter/source/dmapper/dmapperLoggers.hxx b/writerfilter/source/dmapper/dmapperLoggers.hxx
index fd9ed722de4a..8b30c491c384 100644
--- a/writerfilter/source/dmapper/dmapperLoggers.hxx
+++ b/writerfilter/source/dmapper/dmapperLoggers.hxx
@@ -31,7 +31,6 @@
 #ifndef INCLUDED_DMAPPER_LOGGERS_HXX
 #define INCLUDED_DMAPPER_LOGGERS_HXX
 
-#ifdef DEBUG
 #include <resourcemodel/TagLogger.hxx>
 
 namespace writerfilter {
@@ -39,5 +38,5 @@ namespace writerfilter {
         extern TagLogger::Pointer_t dmapper_logger;
     }
 }
-#endif // DEBUG
+
 #endif // INCLUDED_DMAPPER_LOGGERS_HXX
-- 
cgit 


From c7463f8d0762af49387953cdf4acd1de6bdb284b Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 14:24:29 +0200
Subject: writerfilter09: new: LoggedResourceHelper

---
 writerfilter/inc/resourcemodel/LoggedResources.hxx |  32 +++--
 .../source/resourcemodel/LoggedResources.cxx       | 130 ++++++++++++++-------
 2 files changed, 111 insertions(+), 51 deletions(-)

diff --git a/writerfilter/inc/resourcemodel/LoggedResources.hxx b/writerfilter/inc/resourcemodel/LoggedResources.hxx
index 43b8a0e74776..be30c32fd85e 100644
--- a/writerfilter/inc/resourcemodel/LoggedResources.hxx
+++ b/writerfilter/inc/resourcemodel/LoggedResources.hxx
@@ -34,6 +34,26 @@
 namespace writerfilter
 {
 
+class LoggedResourcesHelper
+{
+public:
+    explicit LoggedResourcesHelper(TagLogger::Pointer_t pLogger, const string & sPrefix);
+    virtual ~LoggedResourcesHelper();
+
+    void startElement(const string & sElement);
+    void endElement(const string & sElement);
+    void chars(const ::rtl::OUString & rChars);
+    void chars(const string & rChars);
+    void attribute(const string & rName, const string & rValue);
+    void attribute(const string & rName, sal_uInt32 nValue);
+
+    void setPrefix(const string & rPrefix);
+
+private:
+    TagLogger::Pointer_t mpLogger;
+    string msPrefix;
+};
+
 class LoggedStream : public Stream
 {
 public:
@@ -71,9 +91,7 @@ protected:
     virtual void lcl_substream(Id name, writerfilter::Reference<Stream>::Pointer_t ref) = 0;
     virtual void lcl_info(const string & info) = 0;
 
-private:
-    TagLogger::Pointer_t mpLogger;
-    string msPrefix;
+    LoggedResourcesHelper mHelper;
 };
 
 class LoggedProperties : public Properties
@@ -89,9 +107,7 @@ protected:
     virtual void lcl_attribute(Id name, Value & val) = 0;
     virtual void lcl_sprm(Sprm & sprm) = 0;
 
-private:
-    TagLogger::Pointer_t mpLogger;
-    string msPrefix;
+    LoggedResourcesHelper mHelper;
 };
 
 class LoggedTable : public Table
@@ -105,9 +121,7 @@ public:
 protected:
     virtual void lcl_entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref) = 0;
 
-private:
-    TagLogger::Pointer_t mpLogger;
-    string msPrefix;
+    LoggedResourcesHelper mHelper;
 };
 
 }
diff --git a/writerfilter/source/resourcemodel/LoggedResources.cxx b/writerfilter/source/resourcemodel/LoggedResources.cxx
index d2019af2b14f..9079a682bd07 100644
--- a/writerfilter/source/resourcemodel/LoggedResources.cxx
+++ b/writerfilter/source/resourcemodel/LoggedResources.cxx
@@ -32,10 +32,56 @@
 namespace writerfilter
 {
 
+// class: LoggedResourcesHelper
+
+LoggedResourcesHelper::LoggedResourcesHelper(TagLogger::Pointer_t pLogger, const string & sPrefix)
+: mpLogger(pLogger), msPrefix(sPrefix)
+{
+}
+
+LoggedResourcesHelper::~LoggedResourcesHelper()
+{
+}
+
+void LoggedResourcesHelper::startElement(const string & sElement)
+{
+    mpLogger->startElement(msPrefix + "." + sElement);
+}
+
+void LoggedResourcesHelper::endElement(const string & sElement)
+{
+    mpLogger->endElement(msPrefix + "." + sElement);
+}
+
+void LoggedResourcesHelper::chars(const ::rtl::OUString & rChars)
+{
+    mpLogger->chars(rChars);
+}
+
+void LoggedResourcesHelper::chars(const string & rChars)
+{
+    mpLogger->chars(rChars);
+}
+
+void LoggedResourcesHelper::attribute(const string & rName, const string & rValue)
+{
+    mpLogger->attribute(rName, rValue);
+}
+
+void LoggedResourcesHelper::attribute(const string & rName, sal_uInt32 nValue)
+{
+    mpLogger->attribute(rName, nValue);
+}
+
+void LoggedResourcesHelper::setPrefix(const string & rPrefix)
+{
+    msPrefix = rPrefix;
+}
+
 // class: LoggedStream
 
 LoggedStream::LoggedStream(TagLogger::Pointer_t pLogger, const string & sPrefix)
-: mpLogger(pLogger), msPrefix(sPrefix)
+: mHelper(pLogger, sPrefix)
 {
 }
 
@@ -46,7 +92,7 @@ LoggedStream::~LoggedStream()
 void LoggedStream::startSectionGroup()
 {
 #ifdef DEBUG_LOGGING
-    mpLogger->startElement(msPrefix + ".section");
+    mHelper.startElement("section");
 #endif
 
     lcl_startSectionGroup();
@@ -57,14 +103,14 @@ void LoggedStream::endSectionGroup()
     lcl_endSectionGroup();
 
 #ifdef DEBUG_LOGGING
-    mpLogger->endElement(msPrefix + ".section");
+    mHelper.endElement("section");
 #endif
 }
 
 void LoggedStream::startParagraphGroup()
 {
 #ifdef DEBUG_LOGGING
-    mpLogger->startElement(msPrefix + ".paragraph");
+    mHelper.startElement("paragraph");
 #endif
 
     lcl_startParagraphGroup();
@@ -75,7 +121,7 @@ void LoggedStream::endParagraphGroup()
     lcl_endParagraphGroup();
 
 #ifdef DEBUG_LOGGING
-    mpLogger->endElement(msPrefix + ".paragraph");
+    mHelper.endElement("paragraph");
 #endif
 }
 
@@ -83,7 +129,7 @@ void LoggedStream::endParagraphGroup()
 void LoggedStream::startCharacterGroup()
 {
 #ifdef DEBUG_LOGGING
-    mpLogger->startElement(msPrefix + ".charactergroup");
+    mHelper.startElement("charactergroup");
 #endif
 
     lcl_startCharacterGroup();
@@ -94,14 +140,14 @@ void LoggedStream::endCharacterGroup()
     lcl_endCharacterGroup();
 
 #ifdef DEBUG_LOGGING
-    mpLogger->endElement(msPrefix + ".charactergroup");
+    mHelper.endElement("charactergroup");
 #endif
 }
 
 void LoggedStream::startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape )
 {
 #ifdef DEBUG_LOGGING
-    mpLogger->startElement(msPrefix + ".shape");
+    mHelper.startElement("shape");
 #endif
 
     lcl_startShape(xShape);
@@ -112,110 +158,110 @@ void LoggedStream::endShape()
     lcl_endShape();
 
 #ifdef DEBUG_LOGGING
-    mpLogger->endElement(msPrefix + ".shape");
+    mHelper.endElement("shape");
 #endif
 }
 
 void LoggedStream::text(const sal_uInt8 * data, size_t len)
 {
 #ifdef DEBUG_LOGGING
-    mpLogger->startElement(msPrefix + ".text");
+    mHelper.startElement("text");
 
     ::rtl::OUString sText( (const sal_Char*) data, len, RTL_TEXTENCODING_MS_1252 );
 
-    mpLogger->startElement(msPrefix + ".data");
-    mpLogger->chars(sText);
-    mpLogger->endElement(msPrefix + ".data");
+    mHelper.startElement("data");
+    mHelper.chars(sText);
+    mHelper.endElement("data");
 #endif
 
     lcl_text(data, len);
 
 #ifdef DEBUG_LOGGING
-    mpLogger->endElement(msPrefix + ".text");
+    mHelper.endElement("text");
 #endif
 }
 
 void LoggedStream::utext(const sal_uInt8 * data, size_t len)
 {
 #ifdef DEBUG_LOGGING
-    mpLogger->startElement(msPrefix + ".utext");
-    mpLogger->startElement(msPrefix + ".data");
+    mHelper.startElement("utext");
+    mHelper.startElement("data");
 
     ::rtl::OUString sText;
     ::rtl::OUStringBuffer aBuffer = ::rtl::OUStringBuffer(len);
     aBuffer.append( (const sal_Unicode *) data, len);
     sText = aBuffer.makeStringAndClear();
 
-    mpLogger->chars(sText);
+    mHelper.chars(sText);
 
-    mpLogger->endElement(msPrefix + ".data");
+    mHelper.endElement("data");
 #endif
 
     lcl_utext(data, len);
 
 #ifdef DEBUG_LOGGING
-    mpLogger->endElement(msPrefix + ".utext");
+    mHelper.endElement("utext");
 #endif
 }
 
 void LoggedStream::props(writerfilter::Reference<Properties>::Pointer_t ref)
 {
 #ifdef DEBUG_LOGGING
-    mpLogger->startElement(msPrefix + ".props");
+    mHelper.startElement("props");
 #endif
 
     lcl_props(ref);
 
 #ifdef DEBUG_LOGGING
-    mpLogger->endElement(msPrefix + ".props");
+    mHelper.endElement("props");
 #endif
 }
 
 void LoggedStream::table(Id name, writerfilter::Reference<Table>::Pointer_t ref)
 {
 #ifdef DEBUG_LOGGING
-    mpLogger->startElement(msPrefix + ".table");
-    mpLogger->attribute("name", (*QNameToString::Instance())(name));
+    mHelper.startElement("table");
+    mHelper.attribute("name", (*QNameToString::Instance())(name));
 #endif
 
     lcl_table(name, ref);
 
 #ifdef DEBUG_LOGGING
-    mpLogger->endElement(msPrefix + ".table");
+    mHelper.endElement("table");
 #endif
 }
 
 void LoggedStream::substream(Id name, writerfilter::Reference<Stream>::Pointer_t ref)
 {
 #ifdef DEBUG_LOGGING
-    mpLogger->startElement(msPrefix + ".substream");
-    mpLogger->attribute("name", name);
+    mHelper.startElement("substream");
+    mHelper.attribute("name", (*QNameToString::Instance())(name));
 #endif
 
     lcl_substream(name, ref);
 
 #ifdef DEBUG_LOGGING
-    mpLogger->endElement(msPrefix + ".substream");
+    mHelper.endElement("substream");
 #endif
 }
 
 void LoggedStream::info(const string & info)
 {
 #ifdef DEBUG_LOGGING
-    mpLogger->startElement(msPrefix + ".info");
-    mpLogger->attribute("text", info);
+    mHelper.startElement("info");
+    mHelper.attribute("text", info);
 #endif
 
     lcl_info(info);
 
 #ifdef DEBUG_LOGGING
-    mpLogger->endElement(msPrefix + ".info");
+    mHelper.endElement("info");
 #endif
 }
 
 // class LoggedProperties
 LoggedProperties::LoggedProperties(TagLogger::Pointer_t pLogger, const string & sPrefix)
-: mpLogger(pLogger), msPrefix(sPrefix)
+: mHelper(pLogger, sPrefix)
 {
 }
 
@@ -226,10 +272,10 @@ LoggedProperties::~LoggedProperties()
 void LoggedProperties::attribute(Id name, Value & val)
 {
 #ifdef DEBUG_LOGGING
-    mpLogger->startElement(msPrefix + ".attribute");
-    mpLogger->attribute("name", (*QNameToString::Instance())(name));
-    mpLogger->attribute("value", val.toString());
-    mpLogger->endElement(msPrefix + ".attribute");
+    mHelper.startElement("attribute");
+    mHelper.attribute("name", (*QNameToString::Instance())(name));
+    mHelper.attribute("value", val.toString());
+    mHelper.endElement("attribute");
 #endif
 
     lcl_attribute(name, val);
@@ -238,19 +284,19 @@ void LoggedProperties::attribute(Id name, Value & val)
 void LoggedProperties::sprm(Sprm & sprm)
 {
 #ifdef DEBUG_LOGGING
-    mpLogger->startElement(msPrefix + ".sprm");
-    mpLogger->chars(sprm.toString());
+    mHelper.startElement("sprm");
+    mHelper.chars(sprm.toString());
 #endif
 
     lcl_sprm(sprm);
 
 #ifdef DEBUG_LOGGING
-    mpLogger->endElement(msPrefix + ".sprm");
+    mHelper.endElement("sprm");
 #endif
 }
 
 LoggedTable::LoggedTable(TagLogger::Pointer_t pLogger, const string & sPrefix)
-: mpLogger(pLogger), msPrefix(sPrefix)
+: mHelper(pLogger, sPrefix)
 {
 }
 
@@ -261,14 +307,14 @@ LoggedTable::~LoggedTable()
 void LoggedTable::entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref)
 {
 #ifdef DEBUG_LOGGING
-    mpLogger->startElement(msPrefix + ".entry");
-    mpLogger->attribute("pos", pos);
+    mHelper.startElement("entry");
+    mHelper.attribute("pos", pos);
 #endif
 
     lcl_entry(pos, ref);
 
 #ifdef DEBUG_LOGGING
-    mpLogger->endElement(msPrefix + ".entry");
+    mHelper.endElement("entry");
 #endif
 }
 
-- 
cgit 


From 492d8821e4de7677b1741432dc7b356d6d532b9e Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 14:24:59 +0200
Subject: writerfilter09: StyleSheetTable: use logged resources

---
 writerfilter/source/dmapper/StyleSheetTable.cxx | 119 ++----------------------
 writerfilter/source/dmapper/StyleSheetTable.hxx |  32 ++-----
 2 files changed, 18 insertions(+), 133 deletions(-)

diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index 26b863e38cab..4f8478c80904 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -47,10 +47,7 @@
 #include <stdio.h>
 #include <rtl/ustrbuf.hxx>
 
-#ifdef DEBUG_DOMAINMAPPER
 #include <dmapperLoggers.hxx>
-#include <resourcemodel/QNameToString.hxx>
-#endif
 
 using namespace ::com::sun::star;
 namespace writerfilter {
@@ -82,32 +79,11 @@ StyleSheetEntry::~StyleSheetEntry()
 {
 }
 
-#ifdef DEBUG_DOMAINMAPPER
-XMLTag::Pointer_t StyleSheetEntry::toTag()
-{
-    XMLTag::Pointer_t pResult(new XMLTag("StyleSheetEntry"));
-
-    pResult->addAttr("identifierI", sStyleIdentifierI);
-    pResult->addAttr("identifierD", sStyleIdentifierD);
-    pResult->addAttr("default", bIsDefaultStyle ? "true" : "false");
-    pResult->addAttr("invalidHeight", bInvalidHeight ? "true" : "false");
-    pResult->addAttr("hasUPE", bHasUPE ? "true" : "false");
-    pResult->addAttr("styleType", nStyleTypeCode);
-    pResult->addAttr("baseStyle", sBaseStyleIdentifier);
-    pResult->addAttr("nextStyle", sNextStyleIdentifier);
-    pResult->addAttr("styleName", sStyleName);
-    pResult->addAttr("styleName1", sStyleName1);
-    pResult->addAttr("convertedName", sConvertedStyleName);
-    pResult->addTag(pProperties->toTag());
-
-    return pResult;
-}
-#endif
-
 TableStyleSheetEntry::TableStyleSheetEntry( StyleSheetEntry& rEntry, StyleSheetTable* pStyles ):
     StyleSheetEntry( ),
     m_pStyleSheet( pStyles )
 {
+
     bIsDefaultStyle = rEntry.bIsDefaultStyle;
     bInvalidHeight = rEntry.bInvalidHeight;
     bHasUPE = rEntry.bHasUPE;
@@ -128,13 +104,6 @@ TableStyleSheetEntry::~TableStyleSheetEntry( )
 
 void TableStyleSheetEntry::AddTblStylePr( TblStyleType nType, PropertyMapPtr pProps )
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("AddTblStylePr");
-    dmapper_logger->attribute("type", nType);
-    dmapper_logger->addTag(pProps->toTag());
-    dmapper_logger->endElement("AddTblStylePr");
-#endif
-
     static TblStyleType pTypesToFix[] =
     {
         TBL_STYLE_FIRSTROW,
@@ -211,24 +180,6 @@ PropertyMapPtr TableStyleSheetEntry::GetProperties( sal_Int32 nMask, StyleSheetE
     return pProps;
 }
 
-#ifdef DEBUG_DOMAINMAPPER
-XMLTag::Pointer_t TableStyleSheetEntry::toTag()
-{
-    XMLTag::Pointer_t pResult(StyleSheetEntry::toTag());
-
-    for (sal_Int32 nBit = 0; nBit < 13; ++nBit)
-    {
-        PropertyMapPtr pMap = GetProperties(1 << nBit);
-
-        XMLTag::Pointer_t pTag = pMap->toTag();
-        pTag->addAttr("kind", nBit);
-        pResult->addTag(pTag);
-    }
-
-    return pResult;
-}
-#endif
-
 void lcl_mergeProps( PropertyMapPtr pToFill,  PropertyMapPtr pToAdd, TblStyleType nStyleId )
 {
     static PropertyIds pPropsToCheck[] =
@@ -410,8 +361,10 @@ StyleSheetTable_Impl::StyleSheetTable_Impl(DomainMapper& rDMapper, uno::Referenc
 /*-- 19.06.2006 12:04:32---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-StyleSheetTable::StyleSheetTable(DomainMapper& rDMapper, uno::Reference< text::XTextDocument> xTextDocument) :
-    m_pImpl( new StyleSheetTable_Impl(rDMapper, xTextDocument) )
+StyleSheetTable::StyleSheetTable(DomainMapper& rDMapper, uno::Reference< text::XTextDocument> xTextDocument)
+: LoggedProperties(dmapper_logger, "StyleSheetTable")
+, LoggedTable(dmapper_logger, "StyleSheetTable")
+, m_pImpl( new StyleSheetTable_Impl(rDMapper, xTextDocument) )
 {
 }
 /*-- 19.06.2006 12:04:33---------------------------------------------------
@@ -424,14 +377,8 @@ StyleSheetTable::~StyleSheetTable()
 /*-- 19.06.2006 12:04:33---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void StyleSheetTable::attribute(Id Name, Value & val)
+void StyleSheetTable::lcl_attribute(Id Name, Value & val)
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("StyleSheetTable.attribute");
-    dmapper_logger->attribute("name", (*QNameToString::Instance())(Name));
-    dmapper_logger->attribute("value", val.toString());
-#endif
-
     OSL_ENSURE( m_pImpl->m_pCurrentEntry, "current entry has to be set here");
     if(!m_pImpl->m_pCurrentEntry)
         return ;
@@ -553,21 +500,12 @@ void StyleSheetTable::attribute(Id Name, Value & val)
         }
         break;
     }
-
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("StyleSheetTable.attribute");
-#endif
 }
 /*-- 19.06.2006 12:04:33---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void StyleSheetTable::sprm(Sprm & rSprm)
+void StyleSheetTable::lcl_sprm(Sprm & rSprm)
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("StyleSheetTable.sprm");
-    dmapper_logger->attribute("sprm", rSprm.toString());
-#endif
-
     sal_uInt32 nSprmId = rSprm.getId();
     Value::Pointer_t pValue = rSprm.getValue();
     sal_Int32 nIntValue = pValue.get() ? pValue->getInt() : 0;
@@ -718,20 +656,12 @@ void StyleSheetTable::sprm(Sprm & rSprm)
             }
             break;
     }
-
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("StyleSheetTable.sprm");
-#endif
 }
 /*-- 19.06.2006 12:04:33---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void StyleSheetTable::entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
+void StyleSheetTable::lcl_entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("StyleSheetTable.entry");
-#endif
-
     //create a new style entry
     // printf("StyleSheetTable::entry(...)\n");
     OSL_ENSURE( !m_pImpl->m_pCurrentEntry, "current entry has to be NULL here");
@@ -751,16 +681,8 @@ void StyleSheetTable::entry(int /*pos*/, writerfilter::Reference<Properties>::Po
         //TODO: this entry contains the default settings - they have to be added to the settings
     }
 
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->addTag(m_pImpl->m_pCurrentEntry->toTag());
-#endif
-
     StyleSheetEntryPtr pEmptyEntry;
     m_pImpl->m_pCurrentEntry = pEmptyEntry;
-
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("StyleSheetTable.entry");
-#endif
 }
 /*-- 21.06.2006 15:34:49---------------------------------------------------
     sorting helper
@@ -820,10 +742,6 @@ uno::Sequence< ::rtl::OUString > PropValVector::getNames()
   -----------------------------------------------------------------------*/
 void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable )
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("applyStyleSheets");
-#endif
-
     try
     {
         uno::Reference< style::XStyleFamiliesSupplier > xStylesSupplier( m_pImpl->m_xTextDocument, uno::UNO_QUERY_THROW );
@@ -982,24 +900,13 @@ void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable )
                         PropValVector aSortedPropVals;
                         for( sal_Int32 nProp = 0; nProp < aPropValues.getLength(); ++nProp)
                         {
-#ifdef DEBUG_DOMAINMAPPER
-                            dmapper_logger->startElement("propvalue");
-                            dmapper_logger->attribute("name", aPropValues[nProp].Name);
-                            dmapper_logger->attribute("value", aPropValues[nProp].Value);
-#endif
                                 // Don't add the style name properties
                             bool bIsParaStyleName = aPropValues[nProp].Name.equalsAscii( "ParaStyleName" );
                             bool bIsCharStyleName = aPropValues[nProp].Name.equalsAscii( "CharStyleName" );
                             if ( !bIsParaStyleName && !bIsCharStyleName )
                             {
-#ifdef DEBUG_DOMAINMAPPER
-                                dmapper_logger->element("insert");
-#endif
                                 aSortedPropVals.Insert( aPropValues[nProp] );
                             }
-#ifdef DEBUG_DOMAINMAPPER
-                            dmapper_logger->endElement("propvalue");
-#endif
                         }
                         if(bAddFollowStyle)
                         {
@@ -1050,12 +957,6 @@ void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable )
                     if(bInsert)
                     {
                         xStyles->insertByName( sConvertedStyleName, uno::makeAny( xStyle) );
-#ifdef DEBUG_DOMAINMAPPER
-                        uno::Reference<beans::XPropertySet> xProps(xStyle, uno::UNO_QUERY);
-                        dmapper_logger->startElement("insertStyle");
-                        dmapper_logger->addTag(unoPropertySetToTag(xProps));
-                        dmapper_logger->endElement("insertStyle");
-#endif
                     }
                 }
                 ++aIt;
@@ -1067,10 +968,6 @@ void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable )
         (void)rEx;
         OSL_ENSURE( false, "Styles could not be imported completely");
     }
-
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("applyStyleSheets");
-#endif
 }
 /*-- 22.06.2006 15:56:56---------------------------------------------------
 
diff --git a/writerfilter/source/dmapper/StyleSheetTable.hxx b/writerfilter/source/dmapper/StyleSheetTable.hxx
index 657b447fa979..f6a8b44efa5d 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.hxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.hxx
@@ -34,11 +34,7 @@
 #include <com/sun/star/lang/XComponent.hpp>
 #include <PropertyMap.hxx>
 #include <FontTable.hxx>
-#include <resourcemodel/WW8ResourceModel.hxx>
-
-#ifdef DEBUG_DOMAINMAPPER
-#include <resourcemodel/TagLogger.hxx>
-#endif
+#include <resourcemodel/LoggedResources.hxx>
 
 namespace com{ namespace sun { namespace star { namespace text{
     class XTextDocument;
@@ -76,10 +72,6 @@ public:
     PropertyMapPtr  pProperties;
     ::rtl::OUString sConvertedStyleName;
 
-#ifdef DEBUG_DOMAINMAPPER
-    virtual XMLTag::Pointer_t toTag();
-#endif
-
     StyleSheetEntry();
     virtual ~StyleSheetEntry();
 };
@@ -90,8 +82,8 @@ typedef boost::shared_ptr<StyleSheetEntryDeque> StyleSheetEntryDequePtr;
 
 class DomainMapper;
 class StyleSheetTable :
-        public Properties,
-        public Table
+        public LoggedProperties,
+        public LoggedTable
 {
     StyleSheetTable_Impl   *m_pImpl;
 
@@ -100,13 +92,6 @@ public:
                         ::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);
@@ -120,6 +105,13 @@ public:
     ::rtl::OUString getOrCreateCharStyle( PropertyValueVector_t& rCharProperties );
 
 private:
+    // Properties
+    virtual void lcl_attribute(Id Name, Value & val);
+    virtual void lcl_sprm(Sprm & sprm);
+
+    // Table
+    virtual void lcl_entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
     void resolveAttributeProperties(Value & val);
     void resolveSprmProps(Sprm & sprm_);
     void applyDefaults(bool bParaProperties);
@@ -153,10 +145,6 @@ public:
     // @param pStack    already processed StyleSheetEntries
     PropertyMapPtr GetProperties( sal_Int32 nMask, StyleSheetEntryDequePtr pStack = StyleSheetEntryDequePtr());
 
-#ifdef DEBUG_DOMAINMAPPER
-    virtual XMLTag::Pointer_t toTag();
-#endif
-
     TableStyleSheetEntry( StyleSheetEntry& aEntry, StyleSheetTable* pStyles );
     virtual ~TableStyleSheetEntry( );
 
-- 
cgit 


From 7241d7d4bcb5d782b09cc89c4a8699cf0296cc70 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 14:36:56 +0200
Subject: writerfilter09: SettingTable: use logged resources

---
 writerfilter/source/dmapper/SettingsTable.cxx | 33 ++++++---------------------
 writerfilter/source/dmapper/SettingsTable.hxx | 19 +++++++--------
 2 files changed, 17 insertions(+), 35 deletions(-)

diff --git a/writerfilter/source/dmapper/SettingsTable.cxx b/writerfilter/source/dmapper/SettingsTable.cxx
index 38dbacceb989..facd3f9cb40e 100755
--- a/writerfilter/source/dmapper/SettingsTable.cxx
+++ b/writerfilter/source/dmapper/SettingsTable.cxx
@@ -37,10 +37,7 @@
 #include <ooxml/resourceids.hxx>
 #include <ConversionHelper.hxx>
 
-#ifdef DEBUG_DOMAINMAPPER
-#include <resourcemodel/QNameToString.hxx>
 #include "dmapperLoggers.hxx"
-#endif
 
 namespace writerfilter {
 
@@ -99,8 +96,10 @@ struct SettingsTable_Impl
 
 };
 
-SettingsTable::SettingsTable(DomainMapper& rDMapper, const uno::Reference< lang::XMultiServiceFactory > xTextFactory) :
-m_pImpl( new SettingsTable_Impl(rDMapper, xTextFactory) )
+SettingsTable::SettingsTable(DomainMapper& rDMapper, const uno::Reference< lang::XMultiServiceFactory > xTextFactory)
+: LoggedProperties(dmapper_logger, "SettingsTable")
+, LoggedTable(dmapper_logger, "SettingsTable")
+, m_pImpl( new SettingsTable_Impl(rDMapper, xTextFactory) )
 {
     // printf("SettingsTable::SettingsTable()\n");
 }
@@ -110,14 +109,8 @@ SettingsTable::~SettingsTable()
     delete m_pImpl;
 }
 
-void SettingsTable::attribute(Id nName, Value & val)
+void SettingsTable::lcl_attribute(Id nName, Value & val)
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("SettingsTable.attribute");
-    dmapper_logger->attribute("name", (*QNameToString::Instance())(nName));
-    dmapper_logger->attribute("value", val.toString());
-#endif
-
     (void) nName;
     int nIntValue = val.getInt();
     (void)nIntValue;
@@ -137,18 +130,10 @@ void SettingsTable::attribute(Id nName, Value & val)
     }
     }
 #endif
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("SettingsTable.attribute");
-#endif
 }
 
-void SettingsTable::sprm(Sprm& rSprm)
+void SettingsTable::lcl_sprm(Sprm& rSprm)
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("SettingsTable.sprm");
-    dmapper_logger->chars(rSprm.toString());
-#endif
-
     sal_uInt32 nSprmId = rSprm.getId();
 
     Value::Pointer_t pValue = rSprm.getValue();
@@ -240,13 +225,9 @@ void SettingsTable::sprm(Sprm& rSprm)
         OSL_ENSURE( false, "unknown sprmid in SettingsTable::sprm()");
     }
     }
-
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("SettingsTable.sprm");
-#endif
 }
 
-void SettingsTable::entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
+void SettingsTable::lcl_entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
 {
     // printf ( "SettingsTable::entry\n");
     ref->resolve(*this);
diff --git a/writerfilter/source/dmapper/SettingsTable.hxx b/writerfilter/source/dmapper/SettingsTable.hxx
index cb3e7913c5e7..64034c83559b 100755
--- a/writerfilter/source/dmapper/SettingsTable.hxx
+++ b/writerfilter/source/dmapper/SettingsTable.hxx
@@ -32,7 +32,7 @@
 #define INCLUDED_SETTINGSTABLE_HXX
 
 #include <WriterFilterDllApi.hxx>
-#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/LoggedResources.hxx>
 #include <com/sun/star/lang/XComponent.hpp>
 #include <com/sun/star/text/XTextDocument.hpp>
 #include <map>
@@ -53,7 +53,7 @@ using namespace std;
 
 struct SettingsTable_Impl;
 
-class WRITERFILTER_DLLPRIVATE SettingsTable : public Properties, public Table
+class WRITERFILTER_DLLPRIVATE SettingsTable : public LoggedProperties, public LoggedTable
 {
     SettingsTable_Impl *m_pImpl;
 
@@ -63,18 +63,19 @@ class WRITERFILTER_DLLPRIVATE SettingsTable : public Properties, public Table
             );
     virtual ~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);
-
     //returns default TabStop in 1/100th mm
     int GetDefaultTabStop() const;
 
     void ApplyProperties( uno::Reference< text::XTextDocument > xDoc );
 
+ private:
+    // Properties
+    virtual void lcl_attribute(Id Name, Value & val);
+    virtual void lcl_sprm(Sprm & sprm);
+
+    // Table
+    virtual void lcl_entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
 };
 typedef boost::shared_ptr< SettingsTable >          SettingsTablePtr;
 }}
-- 
cgit 


From 84d9d6784496f19df58beaa0392340b61b8c0631 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 14:45:14 +0200
Subject: writerfilter09: FontTable: use logged resources

---
 writerfilter/source/dmapper/FontTable.cxx | 43 ++++++++++++-----------
 writerfilter/source/dmapper/FontTable.hxx | 57 +++++++++++++++----------------
 2 files changed, 52 insertions(+), 48 deletions(-)

diff --git a/writerfilter/source/dmapper/FontTable.cxx b/writerfilter/source/dmapper/FontTable.cxx
index 20f3d602156b..63e7057bccd7 100644
--- a/writerfilter/source/dmapper/FontTable.cxx
+++ b/writerfilter/source/dmapper/FontTable.cxx
@@ -33,6 +33,8 @@
 #include <vector>
 #include <stdio.h>
 
+#include "dmapperLoggers.hxx"
+
 namespace writerfilter {
 namespace dmapper
 {
@@ -46,8 +48,11 @@ struct FontTable_Impl
 /*-- 19.06.2006 12:04:32---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-FontTable::FontTable() :
-    m_pImpl( new FontTable_Impl )
+FontTable::FontTable()
+: LoggedProperties(dmapper_logger, "FontTable")
+, LoggedTable(dmapper_logger, "FontTable")
+, LoggedStream(dmapper_logger, "FontTable")
+, m_pImpl( new FontTable_Impl )
 {
 }
 /*-- 19.06.2006 12:04:33---------------------------------------------------
@@ -60,7 +65,7 @@ FontTable::~FontTable()
 /*-- 19.06.2006 12:04:33---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void FontTable::attribute(Id Name, Value & val)
+void FontTable::lcl_attribute(Id Name, Value & val)
 {
     OSL_ENSURE( m_pImpl->pCurrentEntry, "current entry has to be set here");
     if(!m_pImpl->pCurrentEntry)
@@ -533,7 +538,7 @@ void FontTable::attribute(Id Name, Value & val)
 /*-- 19.06.2006 12:04:33---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void FontTable::sprm(Sprm& rSprm)
+void FontTable::lcl_sprm(Sprm& rSprm)
 {
     OSL_ENSURE( m_pImpl->pCurrentEntry, "current entry has to be set here");
     if(!m_pImpl->pCurrentEntry)
@@ -561,7 +566,7 @@ void FontTable::sprm(Sprm& rSprm)
 /*-- 19.06.2006 12:04:33---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void FontTable::entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
+void FontTable::lcl_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");
@@ -574,81 +579,81 @@ void FontTable::entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_
 /*-- 19.06.2006 12:04:34---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void FontTable::startSectionGroup()
+void FontTable::lcl_startSectionGroup()
 {
 }
 /*-- 19.06.2006 12:04:35---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void FontTable::endSectionGroup()
+void FontTable::lcl_endSectionGroup()
 {
 }
 /*-- 19.06.2006 12:04:35---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void FontTable::startParagraphGroup()
+void FontTable::lcl_startParagraphGroup()
 {
 }
 /*-- 19.06.2006 12:04:35---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void FontTable::endParagraphGroup()
+void FontTable::lcl_endParagraphGroup()
 {
 }
 /*-- 19.06.2006 12:04:35---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void FontTable::startCharacterGroup()
+void FontTable::lcl_startCharacterGroup()
 {
 }
 /*-- 19.06.2006 12:04:35---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void FontTable::endCharacterGroup()
+void FontTable::lcl_endCharacterGroup()
 {
 }
 /*-- 19.06.2006 12:04:36---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void FontTable::text(const sal_uInt8*, size_t )
+void FontTable::lcl_text(const sal_uInt8*, size_t )
 {
 }
 /*-- 19.06.2006 12:04:36---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void FontTable::utext(const sal_uInt8* , size_t)
+void FontTable::lcl_utext(const sal_uInt8* , size_t)
 {
 }
 /*-- 19.06.2006 12:04:37---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void FontTable::props(writerfilter::Reference<Properties>::Pointer_t)
+void FontTable::lcl_props(writerfilter::Reference<Properties>::Pointer_t)
 {
 }
 /*-- 19.06.2006 12:04:37---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void FontTable::table(Id, writerfilter::Reference<Table>::Pointer_t)
+void FontTable::lcl_table(Id, writerfilter::Reference<Table>::Pointer_t)
 {
 }
 /*-- 19.06.2006 12:04:38---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void FontTable::substream(Id, ::writerfilter::Reference<Stream>::Pointer_t)
+void FontTable::lcl_substream(Id, ::writerfilter::Reference<Stream>::Pointer_t)
 {
 }
 /*-- 19.06.2006 12:04:39---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void FontTable::info(const string& )
+void FontTable::lcl_info(const string& )
 {
 }
 
-void FontTable::startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > )
+void FontTable::lcl_startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > )
 {
 }
 
-void FontTable::endShape( )
+void FontTable::lcl_endShape( )
 {
 }
 
diff --git a/writerfilter/source/dmapper/FontTable.hxx b/writerfilter/source/dmapper/FontTable.hxx
index a2fa967d85fe..cc8e9458f7da 100644
--- a/writerfilter/source/dmapper/FontTable.hxx
+++ b/writerfilter/source/dmapper/FontTable.hxx
@@ -30,7 +30,7 @@
 
 #include <boost/shared_ptr.hpp>
 #include <WriterFilterDllApi.hxx>
-#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/LoggedResources.hxx>
 #include <com/sun/star/lang/XComponent.hpp>
 
 namespace writerfilter {
@@ -62,46 +62,45 @@ struct FontEntry
         nAltFontIndex( 0 )
         {}
 };
-class WRITERFILTER_DLLPRIVATE FontTable : public Properties, public Table
-                    /*,public BinaryObj*/, public Stream
+
+class WRITERFILTER_DLLPRIVATE FontTable : public LoggedProperties, public LoggedTable
+    /*,public BinaryObj*/, public LoggedStream
 {
     FontTable_Impl   *m_pImpl;
 
-public:
+ public:
     FontTable();
     virtual ~FontTable();
 
+    sal_uInt32          size();
+    const FontEntry::Pointer_t  getFontEntry(sal_uInt32 nIndex);
+
+ private:
     // Properties
-    virtual void attribute(Id Name, Value & val);
-    virtual void sprm(Sprm & sprm);
+    virtual void lcl_attribute(Id Name, Value & val);
+    virtual void lcl_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);
+    virtual void lcl_entry(int pos, 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( );
+    virtual void lcl_startSectionGroup();
+    virtual void lcl_endSectionGroup();
+    virtual void lcl_startParagraphGroup();
+    virtual void lcl_endParagraphGroup();
+    virtual void lcl_startCharacterGroup();
+    virtual void lcl_endCharacterGroup();
+    virtual void lcl_text(const sal_uInt8 * data, size_t len);
+    virtual void lcl_utext(const sal_uInt8 * data, size_t len);
+    virtual void lcl_props(writerfilter::Reference<Properties>::Pointer_t ref);
+    virtual void lcl_table(Id name,
+                           writerfilter::Reference<Table>::Pointer_t ref);
+    virtual void lcl_substream(Id name,
+                               ::writerfilter::Reference<Stream>::Pointer_t ref);
+    virtual void lcl_info(const string & info);
+    virtual void lcl_startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
+    virtual void lcl_endShape( );
 
-    const FontEntry::Pointer_t  getFontEntry(sal_uInt32 nIndex);
-    sal_uInt32          size();
 };
 typedef boost::shared_ptr< FontTable >          FontTablePtr;
 }}
-- 
cgit 


From 46ac754898fb5f9971f2f91034ad0a023abadecc Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 15:00:13 +0200
Subject: writerfilter09: GraphicImport: use logged resources

---
 writerfilter/source/dmapper/GraphicImport.cxx | 70 +++++++++------------------
 writerfilter/source/dmapper/GraphicImport.hxx | 58 +++++++++++-----------
 2 files changed, 54 insertions(+), 74 deletions(-)

diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx
index 79f94b9d1873..5bfba0f8212d 100644
--- a/writerfilter/source/dmapper/GraphicImport.cxx
+++ b/writerfilter/source/dmapper/GraphicImport.cxx
@@ -54,14 +54,7 @@
 #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
+#include "dmapperLoggers.hxx"
 
 namespace writerfilter {
 namespace dmapper
@@ -350,9 +343,12 @@ GraphicImport::GraphicImport(uno::Reference < uno::XComponentContext >    xCompo
                              uno::Reference< lang::XMultiServiceFactory > xTextFactory,
                              DomainMapper& rDMapper,
                              GraphicImportType eImportType )
-: m_pImpl( new GraphicImport_Impl( eImportType, rDMapper ))
-  ,m_xComponentContext( xComponentContext )
-  ,m_xTextFactory( xTextFactory)
+: LoggedProperties(dmapper_logger, "GraphicImport")
+, LoggedTable(dmapper_logger, "GraphicImport")
+, LoggedStream(dmapper_logger, "GraphicImport")
+, m_pImpl( new GraphicImport_Impl( eImportType, rDMapper ))
+, m_xComponentContext( xComponentContext )
+, m_xTextFactory( xTextFactory)
 {
 }
 /*-- 01.11.2006 09:42:42---------------------------------------------------
@@ -365,12 +361,8 @@ GraphicImport::~GraphicImport()
 /*-- 01.11.2006 09:45:01---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void GraphicImport::attribute(Id nName, Value & val)
+void GraphicImport::lcl_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 )
@@ -1135,9 +1127,6 @@ void GraphicImport::attribute(Id nName, Value & val)
 #endif
             ;
     }
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("attribute");
-#endif
 }
 
 uno::Reference<text::XTextContent> GraphicImport::GetGraphicObject()
@@ -1353,13 +1342,8 @@ void GraphicImport::ProcessShapeOptions(Value& val)
 /*-- 01.11.2006 09:45:02---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void GraphicImport::sprm(Sprm & rSprm)
+void GraphicImport::lcl_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();
 
@@ -1477,17 +1461,11 @@ void GraphicImport::sprm(Sprm & rSprm)
 #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*/)
+void GraphicImport::lcl_entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t /*ref*/)
 {
 }
 /*-- 16.11.2006 16:14:32---------------------------------------------------
@@ -1743,81 +1721,81 @@ void GraphicImport::data(const sal_uInt8* buf, size_t len, writerfilter::Referen
 /*-- 01.11.2006 09:45:03---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void GraphicImport::startSectionGroup()
+void GraphicImport::lcl_startSectionGroup()
 {
 }
 /*-- 01.11.2006 09:45:03---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void GraphicImport::endSectionGroup()
+void GraphicImport::lcl_endSectionGroup()
 {
 }
 /*-- 01.11.2006 09:45:03---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void GraphicImport::startParagraphGroup()
+void GraphicImport::lcl_startParagraphGroup()
 {
 }
 /*-- 01.11.2006 09:45:03---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void GraphicImport::endParagraphGroup()
+void GraphicImport::lcl_endParagraphGroup()
 {
 }
 /*-- 01.11.2006 09:45:03---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void GraphicImport::startCharacterGroup()
+void GraphicImport::lcl_startCharacterGroup()
 {
 }
 /*-- 01.11.2006 09:45:04---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void GraphicImport::endCharacterGroup()
+void GraphicImport::lcl_endCharacterGroup()
 {
 }
 /*-- 01.11.2006 09:45:04---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void GraphicImport::text(const sal_uInt8 * /*_data*/, size_t /*len*/)
+void GraphicImport::lcl_text(const sal_uInt8 * /*_data*/, size_t /*len*/)
 {
 }
 /*-- 01.11.2006 09:45:05---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void GraphicImport::utext(const sal_uInt8 * /*_data*/, size_t /*len*/)
+void GraphicImport::lcl_utext(const sal_uInt8 * /*_data*/, size_t /*len*/)
 {
 }
 /*-- 01.11.2006 09:45:05---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void GraphicImport::props(writerfilter::Reference<Properties>::Pointer_t /*ref*/)
+void GraphicImport::lcl_props(writerfilter::Reference<Properties>::Pointer_t /*ref*/)
 {
 }
 /*-- 01.11.2006 09:45:06---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void GraphicImport::table(Id /*name*/, writerfilter::Reference<Table>::Pointer_t /*ref*/)
+void GraphicImport::lcl_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*/)
+void GraphicImport::lcl_substream(Id /*name*/, ::writerfilter::Reference<Stream>::Pointer_t /*ref*/)
 {
 }
 /*-- 01.11.2006 09:45:07---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void GraphicImport::info(const string & /*info*/)
+void GraphicImport::lcl_info(const string & /*info*/)
 {
 }
 
-void GraphicImport::startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > /*xShape*/ )
+void GraphicImport::lcl_startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > /*xShape*/ )
 {
 }
 
-void GraphicImport::endShape( )
+void GraphicImport::lcl_endShape( )
 {
 }
 
diff --git a/writerfilter/source/dmapper/GraphicImport.hxx b/writerfilter/source/dmapper/GraphicImport.hxx
index 14f512a3d4ee..8ca6b18d5d55 100644
--- a/writerfilter/source/dmapper/GraphicImport.hxx
+++ b/writerfilter/source/dmapper/GraphicImport.hxx
@@ -30,7 +30,7 @@
 //#ifndef INCLUDED_WRITERFILTERDLLAPI_H
 //#include <WriterFilterDllApi.hxx>
 //#endif
-#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/LoggedResources.hxx>
 //#include <com/sun/star/lang/XComponent.hpp>
 namespace com{ namespace sun { namespace star {
     namespace uno{
@@ -69,8 +69,8 @@ enum GraphicImportType
     IMPORT_AS_DETECTED_ANCHOR
 };
 
-class WRITERFILTER_DLLPRIVATE GraphicImport : public Properties, public Table
-                    ,public BinaryObj, public Stream
+class WRITERFILTER_DLLPRIVATE GraphicImport : public LoggedProperties, public LoggedTable
+                    ,public BinaryObj, public LoggedStream
 {
     GraphicImport_Impl* m_pImpl;
     ::com::sun::star::uno::Reference < ::com::sun::star::uno::XComponentContext >    m_xComponentContext;
@@ -91,37 +91,39 @@ public:
                   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;
+
+ private:
+    // Properties
+    virtual void lcl_attribute(Id Name, Value & val);
+    virtual void lcl_sprm(Sprm & sprm);
+
+    // Table
+    virtual void lcl_entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
+    // Stream
+    virtual void lcl_startSectionGroup();
+    virtual void lcl_endSectionGroup();
+    virtual void lcl_startParagraphGroup();
+    virtual void lcl_endParagraphGroup();
+    virtual void lcl_startCharacterGroup();
+    virtual void lcl_endCharacterGroup();
+    virtual void lcl_text(const sal_uInt8 * data, size_t len);
+    virtual void lcl_utext(const sal_uInt8 * data, size_t len);
+    virtual void lcl_props(writerfilter::Reference<Properties>::Pointer_t ref);
+    virtual void lcl_table(Id name,
+                           writerfilter::Reference<Table>::Pointer_t ref);
+    virtual void lcl_substream(Id name,
+                               ::writerfilter::Reference<Stream>::Pointer_t ref);
+    virtual void lcl_info(const string & info);
+    virtual void lcl_startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
+    virtual void lcl_endShape( );
 };
+
 typedef boost::shared_ptr< GraphicImport >          GraphicImportPtr;
 }}
 
-- 
cgit 


From ddd9d4c30513a845f4982564984d0b13fce30bae Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 15:10:17 +0200
Subject: writerfilter09: ThemeTable: use logged resources

---
 writerfilter/source/dmapper/ThemeTable.cxx | 40 ++++++------------------------
 writerfilter/source/dmapper/ThemeTable.hxx | 15 +++++------
 2 files changed, 15 insertions(+), 40 deletions(-)

diff --git a/writerfilter/source/dmapper/ThemeTable.cxx b/writerfilter/source/dmapper/ThemeTable.cxx
index 0f0becf06552..ef870b3bae15 100755
--- a/writerfilter/source/dmapper/ThemeTable.cxx
+++ b/writerfilter/source/dmapper/ThemeTable.cxx
@@ -30,11 +30,7 @@
 #include <doctok/resourceids.hxx>
 #include <ooxml/resourceids.hxx>
 #endif
-#include <stdio.h>
-#ifdef DEBUG_DOMAINMAPPER
 #include "dmapperLoggers.hxx"
-#include <resourcemodel/QNameToString.hxx>
-#endif
 
 namespace writerfilter {
 namespace dmapper
@@ -50,8 +46,10 @@ struct ThemeTable_Impl
     std::map<sal_uInt32, ::rtl::OUString> m_currentFontThemeEntry;
 };
 
-ThemeTable::ThemeTable() :
-    m_pImpl( new ThemeTable_Impl )
+ThemeTable::ThemeTable()
+: LoggedProperties(dmapper_logger, "ThemeTable")
+, LoggedTable(dmapper_logger, "ThemeTable")
+, m_pImpl( new ThemeTable_Impl )
 {
     // printf("ThemeTable::ThemeTable()\n");
 }
@@ -61,13 +59,8 @@ ThemeTable::~ThemeTable()
     delete m_pImpl;
 }
 
-void ThemeTable::attribute(Id Name, Value & val)
+void ThemeTable::lcl_attribute(Id Name, Value & val)
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("ThemeTable.attribute");
-    dmapper_logger->attribute("name", (*QNameToString::Instance())(Name));
-    dmapper_logger->attribute("value", val.toString());
-#endif
     // 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());
@@ -86,18 +79,10 @@ void ThemeTable::attribute(Id Name, Value & val)
 #endif
         }
     }
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("ThemeTable.attribute");
-#endif
 }
 
-void ThemeTable::sprm(Sprm& rSprm)
+void ThemeTable::lcl_sprm(Sprm& rSprm)
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("ThemeTable.sprm");
-    dmapper_logger->chars(rSprm.toString());
-#endif
-
     sal_uInt32 nSprmId = rSprm.getId();
     (void)nSprmId;
 
@@ -151,22 +136,11 @@ void ThemeTable::sprm(Sprm& rSprm)
 #endif
         }
     }
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("ThemeTable.sprm");
-#endif
 }
 
-void ThemeTable::entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
+void ThemeTable::lcl_entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("ThemeTable.entry");
-#endif
-
     ref->resolve(*this);
-
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("ThemeTable.entry");
-#endif
 }
 
 const ::rtl::OUString ThemeTable::getFontNameForTheme(const Id id) const
diff --git a/writerfilter/source/dmapper/ThemeTable.hxx b/writerfilter/source/dmapper/ThemeTable.hxx
index b79877703c58..1396c4cee8c9 100644
--- a/writerfilter/source/dmapper/ThemeTable.hxx
+++ b/writerfilter/source/dmapper/ThemeTable.hxx
@@ -29,7 +29,7 @@
 #define INCLUDED_THEMETABLE_HXX
 
 #include <WriterFilterDllApi.hxx>
-#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/LoggedResources.hxx>
 #include <com/sun/star/lang/XComponent.hpp>
 #include <map>
 
@@ -39,7 +39,7 @@ namespace dmapper
 
 struct ThemeTable_Impl;
 
-class WRITERFILTER_DLLPRIVATE ThemeTable : public Properties, public Table
+class WRITERFILTER_DLLPRIVATE ThemeTable : public LoggedProperties, public LoggedTable
 {
     ThemeTable_Impl *m_pImpl;
 
@@ -47,14 +47,15 @@ public:
     ThemeTable();
     virtual ~ThemeTable();
 
+    const ::rtl::OUString getFontNameForTheme(const Id id) const;
+
+ private:
     // Properties
-    virtual void attribute(Id Name, Value & val);
-    virtual void sprm(Sprm & sprm);
+    virtual void lcl_attribute(Id Name, Value & val);
+    virtual void lcl_sprm(Sprm & sprm);
 
     // Table
-    virtual void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
-
-    const ::rtl::OUString getFontNameForTheme(const Id id) const;
+    virtual void lcl_entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
 };
 typedef boost::shared_ptr< ThemeTable >          ThemeTablePtr;
 }}
-- 
cgit 


From 394a1eb553cbc9234c3b7dae41cdb6843f682da2 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 15:18:13 +0200
Subject: writerfilter09: GraphicHelpers: use logged resources

---
 writerfilter/source/dmapper/GraphicHelpers.cxx | 35 +++++---------------------
 writerfilter/source/dmapper/GraphicHelpers.hxx | 16 ++++++------
 2 files changed, 15 insertions(+), 36 deletions(-)

diff --git a/writerfilter/source/dmapper/GraphicHelpers.cxx b/writerfilter/source/dmapper/GraphicHelpers.cxx
index af55bf2f41ca..505b1af1680a 100644
--- a/writerfilter/source/dmapper/GraphicHelpers.cxx
+++ b/writerfilter/source/dmapper/GraphicHelpers.cxx
@@ -8,10 +8,7 @@
 #include <com/sun/star/text/RelOrientation.hpp>
 #include <com/sun/star/text/WrapTextMode.hpp>
 
-#ifdef DEBUG_DOMAINMAPPER
-#include <resourcemodel/QNameToString.hxx>
 #include "dmapperloggers.hxx"
-#endif
 
 #include <iostream>
 using namespace std;
@@ -22,7 +19,7 @@ namespace dmapper {
 using namespace com::sun::star;
 
 PositionHandler::PositionHandler( ) :
-    Properties( )
+LoggedProperties(dmapper_logger, "PositionHandler")
 {
     m_nOrient = text::VertOrientation::NONE;
     m_nRelation = text::RelOrientation::FRAME;
@@ -33,14 +30,8 @@ PositionHandler::~PositionHandler( )
 {
 }
 
-void PositionHandler::attribute( Id aName, Value& rVal )
+void PositionHandler::lcl_attribute( Id aName, Value& rVal )
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("PositionHandler.attribute");
-    dmapper_logger->attribute("name", (*QNameToString::Instance())(aName));
-    dmapper_logger->attribute("value", rVal.toString());
-#endif
-
     sal_Int32 nIntValue = rVal.getInt( );
     switch ( aName )
     {
@@ -102,20 +93,10 @@ void PositionHandler::attribute( Id aName, Value& rVal )
 #endif
             break;
     }
-
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("PositionHandler.attribute");
-#endif
 }
 
-void PositionHandler::sprm( Sprm& rSprm )
+void PositionHandler::lcl_sprm( Sprm& rSprm )
 {
-#ifdef DEBUG_DOMAINMAPPER
-    string sSprm = rSprm.toString();
-    dmapper_logger->startElement("PositionHandler.sprm");
-    dmapper_logger->attribute("sprm", sSprm);
-#endif
-
     Value::Pointer_t pValue = rSprm.getValue();
     sal_Int32 nIntValue = pValue->getInt();
 
@@ -184,14 +165,10 @@ void PositionHandler::sprm( Sprm& rSprm )
 #endif
             break;
     }
-
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("PositionHandler.sprm");
-#endif
 }
 
 WrapHandler::WrapHandler( ) :
-    Properties( ),
+LoggedProperties(dmapper_logger, "WrapHandler"),
     m_nType( 0 ),
     m_nSide( 0 )
 {
@@ -201,7 +178,7 @@ WrapHandler::~WrapHandler( )
 {
 }
 
-void WrapHandler::attribute( Id aName, Value& rVal )
+void WrapHandler::lcl_attribute( Id aName, Value& rVal )
 {
     switch ( aName )
     {
@@ -215,7 +192,7 @@ void WrapHandler::attribute( Id aName, Value& rVal )
     }
 }
 
-void WrapHandler::sprm( Sprm& )
+void WrapHandler::lcl_sprm( Sprm& )
 {
 }
 
diff --git a/writerfilter/source/dmapper/GraphicHelpers.hxx b/writerfilter/source/dmapper/GraphicHelpers.hxx
index fb8f8b2455ee..7127ccf22c1f 100644
--- a/writerfilter/source/dmapper/GraphicHelpers.hxx
+++ b/writerfilter/source/dmapper/GraphicHelpers.hxx
@@ -4,7 +4,7 @@
 #include "PropertyMap.hxx"
 
 #include <WriterFilterDllApi.hxx>
-#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/LoggedResources.hxx>
 
 #include <boost/shared_ptr.hpp>
 
@@ -12,7 +12,7 @@ namespace writerfilter {
 namespace dmapper
 {
 
-class WRITERFILTER_DLLPRIVATE PositionHandler: public Properties
+class WRITERFILTER_DLLPRIVATE PositionHandler: public LoggedProperties
 {
 public:
     PositionHandler( );
@@ -22,12 +22,13 @@ public:
     sal_Int16 m_nRelation;
     sal_Int32 m_nPosition;
 
-    virtual void attribute( Id aName, Value& rVal );
-    virtual void sprm( Sprm& rSprm );
+ private:
+    virtual void lcl_attribute( Id aName, Value& rVal );
+    virtual void lcl_sprm( Sprm& rSprm );
 };
 typedef boost::shared_ptr<PositionHandler> PositionHandlerPtr;
 
-class WRITERFILTER_DLLPRIVATE WrapHandler: public Properties
+class WRITERFILTER_DLLPRIVATE WrapHandler: public LoggedProperties
 {
 public:
     WrapHandler( );
@@ -38,8 +39,9 @@ public:
 
     sal_Int32 getWrapMode( );
 
-    virtual void attribute( Id aName, Value& rVal );
-    virtual void sprm( Sprm& rSprm );
+ private:
+    virtual void lcl_attribute( Id aName, Value& rVal );
+    virtual void lcl_sprm( Sprm& rSprm );
 };
 typedef boost::shared_ptr<WrapHandler> WrapHandlerPtr;
 
-- 
cgit 


From cac5eef5c6d5343596d70ae164add34d6d62d795 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 15:23:04 +0200
Subject: writerfilter09: BorderHandler: use logged resources

---
 writerfilter/source/dmapper/BorderHandler.cxx | 33 ++++++++-------------------
 writerfilter/source/dmapper/BorderHandler.hxx | 12 +++++-----
 2 files changed, 15 insertions(+), 30 deletions(-)

diff --git a/writerfilter/source/dmapper/BorderHandler.cxx b/writerfilter/source/dmapper/BorderHandler.cxx
index df2503793884..218a2bebb3bf 100644
--- a/writerfilter/source/dmapper/BorderHandler.cxx
+++ b/writerfilter/source/dmapper/BorderHandler.cxx
@@ -44,12 +44,13 @@ using namespace ::com::sun::star;
 
   -----------------------------------------------------------------------*/
 BorderHandler::BorderHandler( bool bOOXML ) :
-    m_nCurrentBorderPosition( BORDER_TOP ),
-    m_nLineWidth(0),
-    m_nLineType(0),
-    m_nLineColor(0),
-    m_nLineDistance(0),
-    m_bOOXML( bOOXML )
+LoggedProperties(dmapper_logger, "BorderHandler"),
+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---------------------------------------------------
@@ -61,14 +62,8 @@ BorderHandler::~BorderHandler()
 /*-- 24.04.2007 09:06:35---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void BorderHandler::attribute(Id rName, Value & rVal)
+void BorderHandler::lcl_attribute(Id rName, Value & rVal)
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("BorderHandler.attribute");
-    dmapper_logger->attribute("id", (*QNameToString::Instance())(rName));
-    dmapper_logger->endElement("BorderHandler.attribute");
-#endif
-
     sal_Int32 nIntValue = rVal.getInt();
     /* WRITERFILTERSTATUS: table: BorderHandler_attributedata */
     switch( rName )
@@ -120,13 +115,8 @@ void BorderHandler::attribute(Id rName, Value & rVal)
 /*-- 24.04.2007 09:06:35---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void BorderHandler::sprm(Sprm & rSprm)
+void BorderHandler::lcl_sprm(Sprm & rSprm)
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("BorderHandler.sprm");
-    dmapper_logger->attribute("sprm", rSprm.toString());
-#endif
-
     /* WRITERFILTERSTATUS: table: BorderHandler_sprm */
     switch( rSprm.getId())
     {
@@ -154,11 +144,6 @@ void BorderHandler::sprm(Sprm & rSprm)
         break;
         default:;
     }
-
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("BorderHandler.sprm");
-#endif
-
 }
 /*-- 24.04.2007 09:09:01---------------------------------------------------
 
diff --git a/writerfilter/source/dmapper/BorderHandler.hxx b/writerfilter/source/dmapper/BorderHandler.hxx
index 0fc722227191..fe6e3549feba 100644
--- a/writerfilter/source/dmapper/BorderHandler.hxx
+++ b/writerfilter/source/dmapper/BorderHandler.hxx
@@ -28,7 +28,7 @@
 #define INCLUDED_BORDERHANDLER_HXX
 
 #include <WriterFilterDllApi.hxx>
-#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/LoggedResources.hxx>
 #include <boost/shared_ptr.hpp>
 #include <com/sun/star/table/BorderLine.hpp>
 
@@ -36,7 +36,7 @@ namespace writerfilter {
 namespace dmapper
 {
 class PropertyMap;
-class WRITERFILTER_DLLPRIVATE BorderHandler : public Properties
+class WRITERFILTER_DLLPRIVATE BorderHandler : public LoggedProperties
 {
 public:
     //todo: order is a guess
@@ -63,14 +63,14 @@ private:
     bool                                        m_aFilledLines[BORDER_COUNT];
     ::com::sun::star::table::BorderLine         m_aBorderLines[BORDER_COUNT];
 
+    // Properties
+    virtual void lcl_attribute(Id Name, Value & val);
+    virtual void lcl_sprm(Sprm & sprm);
+
 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;}
-- 
cgit 


From 76af059b7a287758b07916a946a89f90d4024168 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 15:26:39 +0200
Subject: writerfilter09: CellColorHandler: use logged resources

---
 writerfilter/source/dmapper/CellColorHandler.cxx | 14 ++++++++------
 writerfilter/source/dmapper/CellColorHandler.hxx | 12 ++++++------
 2 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/writerfilter/source/dmapper/CellColorHandler.cxx b/writerfilter/source/dmapper/CellColorHandler.cxx
index 2de4554e06dc..f72d4dd0d66b 100644
--- a/writerfilter/source/dmapper/CellColorHandler.cxx
+++ b/writerfilter/source/dmapper/CellColorHandler.cxx
@@ -29,6 +29,7 @@
 #include <doctok/resourceids.hxx>
 #include <ConversionHelper.hxx>
 #include <ooxml/resourceids.hxx>
+#include "dmapperLoggers.hxx"
 
 #define OOXML_COLOR_AUTO 0x0a //todo: AutoColor needs symbol
 
@@ -43,10 +44,11 @@ using namespace ::writerfilter;
 
   -----------------------------------------------------------------------*/
 CellColorHandler::CellColorHandler() :
-    m_nShadowType( 0 ),
-    m_nColor( 0xffffffff ),
-    m_nFillColor( 0xffffffff ),
-    m_bParagraph( false )
+LoggedProperties(dmapper_logger, "CellColorHandler"),
+m_nShadowType( 0 ),
+m_nColor( 0xffffffff ),
+m_nFillColor( 0xffffffff ),
+m_bParagraph( false )
 {
 }
 /*-- 24.04.2007 09:06:35---------------------------------------------------
@@ -58,7 +60,7 @@ CellColorHandler::~CellColorHandler()
 /*-- 24.04.2007 09:06:35---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void CellColorHandler::attribute(Id rName, Value & rVal)
+void CellColorHandler::lcl_attribute(Id rName, Value & rVal)
 {
     sal_Int32 nIntValue = rVal.getInt();
     (void)nIntValue;
@@ -119,7 +121,7 @@ void CellColorHandler::attribute(Id rName, Value & rVal)
 /*-- 24.04.2007 09:06:35---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void CellColorHandler::sprm(Sprm & rSprm)
+void CellColorHandler::lcl_sprm(Sprm & rSprm)
 {
     (void)rSprm;
 }
diff --git a/writerfilter/source/dmapper/CellColorHandler.hxx b/writerfilter/source/dmapper/CellColorHandler.hxx
index 3e6b1bb2db70..102449258550 100644
--- a/writerfilter/source/dmapper/CellColorHandler.hxx
+++ b/writerfilter/source/dmapper/CellColorHandler.hxx
@@ -28,7 +28,7 @@
 #define INCLUDED_CELLCOLORHANDLER_HXX
 
 #include <WriterFilterDllApi.hxx>
-#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/LoggedResources.hxx>
 #include <boost/shared_ptr.hpp>
 //#include <com/sun/star/table/TableBorder.hpp>
 #include <com/sun/star/table/BorderLine.hpp>
@@ -37,23 +37,23 @@ namespace writerfilter {
 namespace dmapper
 {
 class TablePropertyMap;
-class WRITERFILTER_DLLPRIVATE CellColorHandler : public Properties
+class WRITERFILTER_DLLPRIVATE CellColorHandler : public LoggedProperties
 {
 public:
     sal_Int32 m_nShadowType;
     sal_Int32 m_nColor;
     sal_Int32 m_nFillColor;
     bool      m_bParagraph;
+
 private:
+    // Properties
+    virtual void lcl_attribute(Id Name, Value & val);
+    virtual void lcl_sprm(Sprm & sprm);
 
 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; }
-- 
cgit 


From a3af0ceb2984cca95fa8352d820a6531d7272e00 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 15:30:41 +0200
Subject: writerfilter09: CellMarginHandler: use logged resources

---
 writerfilter/source/dmapper/CellMarginHandler.cxx | 24 ++++++++++++-----------
 writerfilter/source/dmapper/CellMarginHandler.hxx | 12 ++++++------
 2 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/writerfilter/source/dmapper/CellMarginHandler.cxx b/writerfilter/source/dmapper/CellMarginHandler.cxx
index bfea8a6b25f9..645755cc4c63 100644
--- a/writerfilter/source/dmapper/CellMarginHandler.cxx
+++ b/writerfilter/source/dmapper/CellMarginHandler.cxx
@@ -29,6 +29,7 @@
 #include <doctok/resourceids.hxx>
 #include <ConversionHelper.hxx>
 #include <ooxml/resourceids.hxx>
+#include "dmapperLoggers.hxx"
 
 namespace writerfilter {
 namespace dmapper {
@@ -41,15 +42,16 @@ using namespace ::writerfilter;
 
   -----------------------------------------------------------------------*/
 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 )
+LoggedProperties(dmapper_logger, "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---------------------------------------------------
@@ -61,7 +63,7 @@ CellMarginHandler::~CellMarginHandler()
 /*-- 18.02.2008 12:36:51---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void CellMarginHandler::attribute(Id rName, Value & rVal)
+void CellMarginHandler::lcl_attribute(Id rName, Value & rVal)
 {
     sal_Int32 nIntValue = rVal.getInt();
     (void)nIntValue;
@@ -82,7 +84,7 @@ void CellMarginHandler::attribute(Id rName, Value & rVal)
 /*-- 18.02.2008 12:36:51---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void CellMarginHandler::sprm(Sprm & rSprm)
+void CellMarginHandler::lcl_sprm(Sprm & rSprm)
 {
     writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
     if( pProperties.get())
diff --git a/writerfilter/source/dmapper/CellMarginHandler.hxx b/writerfilter/source/dmapper/CellMarginHandler.hxx
index 5f01df47a347..3d2512675683 100644
--- a/writerfilter/source/dmapper/CellMarginHandler.hxx
+++ b/writerfilter/source/dmapper/CellMarginHandler.hxx
@@ -30,18 +30,22 @@
 #ifndef INCLUDED_WRITERFILTERDLLAPI_H
 #include <WriterFilterDllApi.hxx>
 #endif
-#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/LoggedResources.hxx>
 #include <boost/shared_ptr.hpp>
 
 namespace writerfilter {
 namespace dmapper
 {
 class TablePropertyMap;
-class WRITERFILTER_DLLPRIVATE CellMarginHandler : public Properties
+class WRITERFILTER_DLLPRIVATE CellMarginHandler : public LoggedProperties
 {
 private:
     sal_Int32   m_nValue;
 
+    // Properties
+    virtual void lcl_attribute(Id Name, Value & val);
+    virtual void lcl_sprm(Sprm & sprm);
+
 public:
     sal_Int32   m_nLeftMargin;
     bool        m_bLeftMarginValid;
@@ -56,10 +60,6 @@ public:
     CellMarginHandler( );
     virtual ~CellMarginHandler();
 
-    // Properties
-    virtual void attribute(Id Name, Value & val);
-    virtual void sprm(Sprm & sprm);
-
     ::boost::shared_ptr<TablePropertyMap>            getProperties();
 
 };
-- 
cgit 


From 65b3def683f46d3c0d252a61bb8f00487d7af7b4 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 15:34:32 +0200
Subject: writerfilter09: FFDataHandler: use logged resources

---
 writerfilter/source/dmapper/FFDataHandler.cxx | 44 +++++++++------------------
 writerfilter/source/dmapper/FFDataHandler.hxx | 14 +++++----
 2 files changed, 23 insertions(+), 35 deletions(-)

diff --git a/writerfilter/source/dmapper/FFDataHandler.cxx b/writerfilter/source/dmapper/FFDataHandler.cxx
index 9f9430401161..6decd84d2786 100644
--- a/writerfilter/source/dmapper/FFDataHandler.cxx
+++ b/writerfilter/source/dmapper/FFDataHandler.cxx
@@ -30,10 +30,8 @@
 #include "FFDataHandler.hxx"
 
 #include <ooxml/resourceids.hxx>
-#ifdef DEBUG_DOMAINMAPPER
-#include <resourcemodel/QNameToString.hxx>
 #include "dmapperLoggers.hxx"
-#endif
+
 namespace writerfilter {
 namespace dmapper {
 
@@ -41,17 +39,18 @@ namespace dmapper {
  * class: FFDataHandler *
  ************************/
 
-FFDataHandler::FFDataHandler()
-: m_bEnabled(false),
-  m_bCalcOnExit(false),
-  m_nHelpTextType(0),
-  m_nStatusTextType(0),
-  m_nCheckboxHeight(0),
-  m_bCheckboxAutoHeight(false),
-  m_bCheckboxDefault(false),
-  m_bCheckboxChecked(false),
-  m_nTextType(0),
-  m_nTextMaxLength(0)
+FFDataHandler::FFDataHandler() :
+LoggedProperties(dmapper_logger, "FFDataHandler"),
+m_bEnabled(false),
+m_bCalcOnExit(false),
+m_nHelpTextType(0),
+m_nStatusTextType(0),
+m_nCheckboxHeight(0),
+m_bCheckboxAutoHeight(false),
+m_bCheckboxDefault(false),
+m_bCheckboxChecked(false),
+m_nTextType(0),
+m_nTextMaxLength(0)
 {
 }
 
@@ -286,12 +285,8 @@ const rtl::OUString & FFDataHandler::getTextFormat() const
 }
 
 
-void FFDataHandler::sprm(Sprm & r_Sprm)
+void FFDataHandler::lcl_sprm(Sprm & r_Sprm)
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("FFDataHandler.sprm");
-    dmapper_logger->chars(r_Sprm.toString());
-#endif
     switch(r_Sprm.getId())
     {
     case NS_ooxml::LN_CT_FFData_name:
@@ -426,9 +421,6 @@ void FFDataHandler::sprm(Sprm & r_Sprm)
 #endif
         break;
     }
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("FFDataHandler.sprm");
-#endif
 }
 
 void FFDataHandler::resolveSprm(Sprm & r_Sprm)
@@ -438,14 +430,8 @@ void FFDataHandler::resolveSprm(Sprm & r_Sprm)
         pProperties->resolve(*this);
 }
 
-void FFDataHandler::attribute(Id name, Value & val)
+void FFDataHandler::lcl_attribute(Id name, Value & val)
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("FFDataHandler.attribute");
-    dmapper_logger->attribute("name", (*QNameToString::Instance())(name));
-    dmapper_logger->attribute("value", val.toString());
-    dmapper_logger->endElement("FFDataHandler.attribute");
-#endif
     switch (name)
     {
     case NS_ooxml::LN_CT_FFHelpText_type:
diff --git a/writerfilter/source/dmapper/FFDataHandler.hxx b/writerfilter/source/dmapper/FFDataHandler.hxx
index fb7a4ccee950..b1c7ff2ea7fb 100644
--- a/writerfilter/source/dmapper/FFDataHandler.hxx
+++ b/writerfilter/source/dmapper/FFDataHandler.hxx
@@ -29,11 +29,11 @@
  ************************************************************************/
 #ifndef INCLUDED_FFDataHandler_HXX
 #define INCLUDED_FFDataHandler_HXX
-#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/LoggedResources.hxx>
 #include <rtl/ustring.hxx>
 namespace writerfilter {
 namespace dmapper {
-class FFDataHandler : public Properties
+class FFDataHandler : public LoggedProperties
 {
 public:
     // typedefs
@@ -127,12 +127,8 @@ public:
     const rtl::OUString & getTextFormat() const;
 
     // sprm
-    void sprm(Sprm & r_sprm);
     void resolveSprm(Sprm & r_sprm);
 
-    // attribute
-    void attribute(Id name, Value & val);
-
 private:
     rtl::OUString m_sName;
     bool m_bEnabled;
@@ -154,6 +150,12 @@ private:
     sal_uInt32 m_nTextMaxLength;
     rtl::OUString m_sTextDefault;
     rtl::OUString m_sTextFormat;
+
+    // sprm
+    void lcl_sprm(Sprm & r_sprm);
+
+    // attribute
+    void lcl_attribute(Id name, Value & val);
 };
 
 
-- 
cgit 


From 9892370e9a967e2f32ba3b3c32148694079f6932 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 15:37:27 +0200
Subject: writerfilter09: MeasureHandler: use logged resources

---
 writerfilter/source/dmapper/MeasureHandler.cxx | 12 +++++++-----
 writerfilter/source/dmapper/MeasureHandler.hxx | 12 ++++++------
 2 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/writerfilter/source/dmapper/MeasureHandler.cxx b/writerfilter/source/dmapper/MeasureHandler.cxx
index 58f3980063ee..e34a6896ea0d 100644
--- a/writerfilter/source/dmapper/MeasureHandler.cxx
+++ b/writerfilter/source/dmapper/MeasureHandler.cxx
@@ -30,6 +30,7 @@
 #include <ConversionHelper.hxx>
 #include <ooxml/resourceids.hxx>
 #include <com/sun/star/text/SizeType.hpp>
+#include "dmapperLoggers.hxx"
 
 namespace writerfilter {
 namespace dmapper {
@@ -40,9 +41,10 @@ using namespace ::com::sun::star;
 
   -----------------------------------------------------------------------*/
 MeasureHandler::MeasureHandler() :
-    m_nMeasureValue( 0 ),
-    m_nUnit( -1 ),
-    m_nRowHeightSizeType( text::SizeType::MIN )
+LoggedProperties(dmapper_logger, "MeasureHandler"),
+m_nMeasureValue( 0 ),
+m_nUnit( -1 ),
+m_nRowHeightSizeType( text::SizeType::MIN )
 {
 }
 /*-- 24.04.2007 09:06:35---------------------------------------------------
@@ -54,7 +56,7 @@ MeasureHandler::~MeasureHandler()
 /*-- 24.04.2007 09:06:35---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void MeasureHandler::attribute(Id rName, Value & rVal)
+void MeasureHandler::lcl_attribute(Id rName, Value & rVal)
 {
     sal_Int32 nIntValue = rVal.getInt();
     (void)rName;
@@ -99,7 +101,7 @@ void MeasureHandler::attribute(Id rName, Value & rVal)
 /*-- 24.04.2007 09:06:35---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void MeasureHandler::sprm(Sprm & rSprm)
+void MeasureHandler::lcl_sprm(Sprm & rSprm)
 {
     (void)rSprm;
 }
diff --git a/writerfilter/source/dmapper/MeasureHandler.hxx b/writerfilter/source/dmapper/MeasureHandler.hxx
index 574685f8ed27..25a38a4862f3 100644
--- a/writerfilter/source/dmapper/MeasureHandler.hxx
+++ b/writerfilter/source/dmapper/MeasureHandler.hxx
@@ -28,7 +28,7 @@
 #define INCLUDED_MEASUREHANDLER_HXX
 
 #include <WriterFilterDllApi.hxx>
-#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/LoggedResources.hxx>
 #include <boost/shared_ptr.hpp>
 
 namespace writerfilter {
@@ -39,20 +39,20 @@ class PropertyMap;
     - Left indent of tables
     - Preferred width of tables
  */
-class WRITERFILTER_DLLPRIVATE MeasureHandler : public Properties
+class WRITERFILTER_DLLPRIVATE MeasureHandler : public LoggedProperties
 {
     sal_Int32 m_nMeasureValue;
     sal_Int32 m_nUnit;
     sal_Int16 m_nRowHeightSizeType; //table row height type
 
+    // Properties
+    virtual void lcl_attribute(Id Name, Value & val);
+    virtual void lcl_sprm(Sprm & sprm);
+
 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;
-- 
cgit 


From 112dbd0bdb8988a26d7e61bbec521b1014b69763 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 15:43:39 +0200
Subject: writerfilter09: NumberingManager: use logged resources

---
 writerfilter/source/dmapper/NumberingManager.cxx | 20 ++++++++++++--------
 writerfilter/source/dmapper/NumberingManager.hxx | 20 ++++++++++----------
 2 files changed, 22 insertions(+), 18 deletions(-)

diff --git a/writerfilter/source/dmapper/NumberingManager.cxx b/writerfilter/source/dmapper/NumberingManager.cxx
index 8cc031ea1d09..5c08d17a3367 100644
--- a/writerfilter/source/dmapper/NumberingManager.cxx
+++ b/writerfilter/source/dmapper/NumberingManager.cxx
@@ -19,6 +19,8 @@
 #include <stdio.h>
 #endif
 
+#include "dmapperLoggers.hxx"
+
 using namespace rtl;
 using namespace com::sun::star;
 
@@ -614,10 +616,12 @@ void ListDef::CreateNumberingRules( DomainMapper& rDMapper,
 //-------------------------------------  NumberingManager implementation
 
 
-ListsManager::ListsManager( DomainMapper& rDMapper,
-        const uno::Reference< lang::XMultiServiceFactory > xFactory ) :
-    m_rDMapper( rDMapper ),
-    m_xFactory( xFactory )
+ListsManager::ListsManager(DomainMapper& rDMapper,
+                           const uno::Reference< lang::XMultiServiceFactory > xFactory) :
+LoggedProperties(dmapper_logger, "ListsManager"),
+LoggedTable(dmapper_logger, "ListsManager"),
+m_rDMapper( rDMapper ),
+m_xFactory( xFactory )
 {
 }
 
@@ -625,7 +629,7 @@ ListsManager::~ListsManager( )
 {
 }
 
-void ListsManager::attribute( Id nName, Value& rVal )
+void ListsManager::lcl_attribute( Id nName, Value& rVal )
 {
     OSL_ENSURE( m_pCurrentDefinition.get(), "current entry has to be set here");
     if(!m_pCurrentDefinition.get())
@@ -764,7 +768,7 @@ void ListsManager::attribute( Id nName, Value& rVal )
     }
 }
 
-void ListsManager::sprm( Sprm& rSprm )
+void ListsManager::lcl_sprm( Sprm& rSprm )
 {
     //fill the attributes of the style sheet
     sal_uInt32 nSprmId = rSprm.getId();
@@ -939,8 +943,8 @@ void ListsManager::sprm( Sprm& rSprm )
     }
 }
 
-void ListsManager::entry( int /* pos */,
-        writerfilter::Reference<Properties>::Pointer_t ref )
+void ListsManager::lcl_entry( int /* pos */,
+                          writerfilter::Reference<Properties>::Pointer_t ref )
 {
     if( m_rDMapper.IsOOXMLImport() )
     {
diff --git a/writerfilter/source/dmapper/NumberingManager.hxx b/writerfilter/source/dmapper/NumberingManager.hxx
index a7970fca531c..dbe05e1b20ac 100644
--- a/writerfilter/source/dmapper/NumberingManager.hxx
+++ b/writerfilter/source/dmapper/NumberingManager.hxx
@@ -5,7 +5,7 @@
 
 #include <WriterFilterDllApi.hxx>
 #include <dmapper/DomainMapper.hxx>
-#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/LoggedResources.hxx>
 
 #include <com/sun/star/container/XIndexReplace.hpp>
 
@@ -170,8 +170,8 @@ public:
 /** This class provides access to the defined numbering styles.
   */
 class ListsManager :
-    public Properties,
-    public Table
+    public LoggedProperties,
+    public LoggedTable
 {
 private:
 
@@ -190,6 +190,13 @@ private:
 
     AbstractListDef::Pointer    GetAbstractList( sal_Int32 nId );
 
+    // Properties
+    virtual void lcl_attribute( Id nName, Value & rVal );
+    virtual void lcl_sprm(Sprm & sprm);
+
+    // Table
+    virtual void lcl_entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
 public:
 
     ListsManager(
@@ -199,13 +206,6 @@ public:
 
     typedef boost::shared_ptr< ListsManager >  Pointer;
 
-    // Properties
-    virtual void attribute( Id nName, Value & rVal );
-    virtual void sprm(Sprm & sprm);
-
-    // Table
-    virtual void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
-
     // Config methods
     void SetLFOImport( bool bLFOImport ) { m_bIsLFOImport = bLFOImport; };
 
-- 
cgit 


From feebb2d88591fba32ed2c94f1970c828bb16b9d5 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 15:45:53 +0200
Subject: writerfilter09: OLEHandler: use logged resources

---
 writerfilter/source/dmapper/OLEHandler.cxx | 13 ++++++++-----
 writerfilter/source/dmapper/OLEHandler.hxx | 13 +++++++------
 2 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/writerfilter/source/dmapper/OLEHandler.cxx b/writerfilter/source/dmapper/OLEHandler.cxx
index 65f76f11cbfc..89ee01ecb9a0 100644
--- a/writerfilter/source/dmapper/OLEHandler.cxx
+++ b/writerfilter/source/dmapper/OLEHandler.cxx
@@ -44,6 +44,8 @@
 #include <com/sun/star/text/XTextDocument.hpp>
 #include <com/sun/star/uno/XComponentContext.hpp>
 
+#include "dmapperLoggers.hxx"
+
 namespace writerfilter {
 namespace dmapper {
 
@@ -52,9 +54,10 @@ using namespace ::com::sun::star;
 
   -----------------------------------------------------------------------*/
 OLEHandler::OLEHandler() :
-    m_nDxaOrig(0),
-    m_nDyaOrig(0),
-    m_nWrapMode(0)
+LoggedProperties(dmapper_logger, "OLEHandler"),
+m_nDxaOrig(0),
+m_nDyaOrig(0),
+m_nWrapMode(0)
 {
 }
 /*-- 23.04.2008 10:46:14---------------------------------------------------
@@ -66,7 +69,7 @@ OLEHandler::~OLEHandler()
 /*-- 23.04.2008 10:46:14---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void OLEHandler::attribute(Id rName, Value & rVal)
+void OLEHandler::lcl_attribute(Id rName, Value & rVal)
 {
     rtl::OUString sStringValue = rVal.getString();
     (void)rName;
@@ -141,7 +144,7 @@ void OLEHandler::attribute(Id rName, Value & rVal)
 /*-- 23.04.2008 10:46:14---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void OLEHandler::sprm(Sprm & rSprm)
+void OLEHandler::lcl_sprm(Sprm & rSprm)
 {
     sal_uInt32 nSprmId = rSprm.getId();
     switch( nSprmId )
diff --git a/writerfilter/source/dmapper/OLEHandler.hxx b/writerfilter/source/dmapper/OLEHandler.hxx
index f9059fb6a35a..cddbac5475bc 100644
--- a/writerfilter/source/dmapper/OLEHandler.hxx
+++ b/writerfilter/source/dmapper/OLEHandler.hxx
@@ -30,7 +30,7 @@
 #ifndef INCLUDED_WRITERFILTERDLLAPI_H
 #include <WriterFilterDllApi.hxx>
 #endif
-#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/LoggedResources.hxx>
 #include <boost/shared_ptr.hpp>
 #include <com/sun/star/awt/Size.hpp>
 #include <com/sun/star/awt/Point.hpp>
@@ -60,7 +60,7 @@ namespace dmapper
 //class PropertyMap;
 /** Handler for OLE objects
  */
-class WRITERFILTER_DLLPRIVATE OLEHandler : public Properties
+class WRITERFILTER_DLLPRIVATE OLEHandler : public LoggedProperties
 {
     ::rtl::OUString     m_sObjectType;
     ::rtl::OUString     m_sProgId;
@@ -81,14 +81,15 @@ class WRITERFILTER_DLLPRIVATE OLEHandler : public Properties
     ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic > m_xReplacement;
 
     ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > m_xInputStream;
+
+    // Properties
+    virtual void lcl_attribute(Id Name, Value & val);
+    virtual void lcl_sprm(Sprm & sprm);
+
 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( ); };
-- 
cgit 


From bc590a010e3530a9835a8f1af842292a0c1e5fd0 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 15:49:55 +0200
Subject: writerfilter09: PageBordersHandler: use logged resources

---
 writerfilter/source/dmapper/PageBordersHandler.cxx | 11 +++++++----
 writerfilter/source/dmapper/PageBordersHandler.hxx | 12 ++++++------
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/writerfilter/source/dmapper/PageBordersHandler.cxx b/writerfilter/source/dmapper/PageBordersHandler.cxx
index 725502843982..21798d684b5d 100644
--- a/writerfilter/source/dmapper/PageBordersHandler.cxx
+++ b/writerfilter/source/dmapper/PageBordersHandler.cxx
@@ -2,6 +2,8 @@
 
 #include <ooxml/resourceids.hxx>
 
+#include "dmapperLoggers.hxx"
+
 namespace writerfilter {
 namespace dmapper {
 
@@ -16,8 +18,9 @@ _PgBorder::~_PgBorder( )
 }
 
 PageBordersHandler::PageBordersHandler( ) :
-    m_nDisplay( 0 ),
-    m_nOffset( 0 )
+LoggedProperties(dmapper_logger, "PageBordersHandler"),
+m_nDisplay( 0 ),
+m_nOffset( 0 )
 {
 }
 
@@ -25,7 +28,7 @@ PageBordersHandler::~PageBordersHandler( )
 {
 }
 
-void PageBordersHandler::attribute( Id eName, Value& rVal )
+void PageBordersHandler::lcl_attribute( Id eName, Value& rVal )
 {
     int nIntValue = rVal.getInt( );
     switch ( eName )
@@ -65,7 +68,7 @@ void PageBordersHandler::attribute( Id eName, Value& rVal )
     }
 }
 
-void PageBordersHandler::sprm( Sprm& rSprm )
+void PageBordersHandler::lcl_sprm( Sprm& rSprm )
 {
     switch ( rSprm.getId( ) )
     {
diff --git a/writerfilter/source/dmapper/PageBordersHandler.hxx b/writerfilter/source/dmapper/PageBordersHandler.hxx
index 327ccfc4f8d6..621f239b3038 100644
--- a/writerfilter/source/dmapper/PageBordersHandler.hxx
+++ b/writerfilter/source/dmapper/PageBordersHandler.hxx
@@ -5,7 +5,7 @@
 #include "PropertyMap.hxx"
 
 #include <WriterFilterDllApi.hxx>
-#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/LoggedResources.hxx>
 #include <boost/shared_ptr.hpp>
 
 #include <com/sun/star/table/BorderLine.hpp>
@@ -27,7 +27,7 @@ public:
     ~_PgBorder( );
 };
 
-class WRITERFILTER_DLLPRIVATE PageBordersHandler : public Properties
+class WRITERFILTER_DLLPRIVATE PageBordersHandler : public LoggedProperties
 {
 private:
 
@@ -36,14 +36,14 @@ private:
     sal_Int32 m_nOffset;
     vector<_PgBorder> m_aBorders;
 
+    // Properties
+    virtual void lcl_attribute( Id eName, Value& rVal );
+    virtual void lcl_sprm( Sprm& rSprm );
+
 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;
-- 
cgit 


From 4e23431df0680edbc971ef4a8973a764ed137cd5 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 15:52:20 +0200
Subject: writerfilter09: SectionColumnHandler: use logged resources

---
 writerfilter/source/dmapper/SectionColumnHandler.cxx | 15 +++++++++------
 writerfilter/source/dmapper/SectionColumnHandler.hxx | 12 ++++++------
 2 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/writerfilter/source/dmapper/SectionColumnHandler.cxx b/writerfilter/source/dmapper/SectionColumnHandler.cxx
index 5ad3e51fb8b7..e00b0c7558fa 100644
--- a/writerfilter/source/dmapper/SectionColumnHandler.cxx
+++ b/writerfilter/source/dmapper/SectionColumnHandler.cxx
@@ -30,6 +30,8 @@
 #include <ConversionHelper.hxx>
 #include <ooxml/resourceids.hxx>
 
+#include "dmapperLoggers.hxx"
+
 namespace writerfilter {
 namespace dmapper {
 
@@ -40,10 +42,11 @@ using namespace ::com::sun::star;
 
   -----------------------------------------------------------------------*/
 SectionColumnHandler::SectionColumnHandler() :
-    bEqualWidth( false ),
-    nSpace( 0 ),
-    nNum( 0 ),
-    bSep( false )
+LoggedProperties(dmapper_logger, "SectionColumnHandler"),
+bEqualWidth( false ),
+nSpace( 0 ),
+nNum( 0 ),
+bSep( false )
 {
 }
 /*-- 02.06.2008 13:36:24---------------------------------------------------
@@ -55,7 +58,7 @@ SectionColumnHandler::~SectionColumnHandler()
 /*-- 02.06.2008 13:36:24---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void SectionColumnHandler::attribute(Id rName, Value & rVal)
+void SectionColumnHandler::lcl_attribute(Id rName, Value & rVal)
 {
     sal_Int32 nIntValue = rVal.getInt();
     /* WRITERFILTERSTATUS: table: SectionColumnHandler_attributedata */
@@ -93,7 +96,7 @@ void SectionColumnHandler::attribute(Id rName, Value & rVal)
 /*-- 02.06.2008 13:36:24---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void SectionColumnHandler::sprm(Sprm & rSprm)
+void SectionColumnHandler::lcl_sprm(Sprm & rSprm)
 {
     /* WRITERFILTERSTATUS: table: SectionColumnHandler_sprm */
     switch( rSprm.getId())
diff --git a/writerfilter/source/dmapper/SectionColumnHandler.hxx b/writerfilter/source/dmapper/SectionColumnHandler.hxx
index 452895b50194..7742f5d4a22b 100644
--- a/writerfilter/source/dmapper/SectionColumnHandler.hxx
+++ b/writerfilter/source/dmapper/SectionColumnHandler.hxx
@@ -28,7 +28,7 @@
 #define INCLUDED_SECTIONCOLUMNHANDLER_HXX
 
 #include <WriterFilterDllApi.hxx>
-#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/LoggedResources.hxx>
 #include <boost/shared_ptr.hpp>
 
 
@@ -44,7 +44,7 @@ struct _Column
 };
 
 
-class WRITERFILTER_DLLPRIVATE SectionColumnHandler : public Properties
+class WRITERFILTER_DLLPRIVATE SectionColumnHandler : public LoggedProperties
 {
     bool        bEqualWidth;
     sal_Int32   nSpace;
@@ -54,14 +54,14 @@ class WRITERFILTER_DLLPRIVATE SectionColumnHandler : public Properties
 
     _Column   aTempColumn;
 
+    // Properties
+    virtual void lcl_attribute(Id Name, Value & val);
+    virtual void lcl_sprm(Sprm & sprm);
+
 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; }
-- 
cgit 


From 8133f8b9ec7f486afeba024cb7b1812c21307890 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 15:56:27 +0200
Subject: writerfilter09: TblStylePrHandler: use logged resources

---
 writerfilter/source/dmapper/TblStylePrHandler.cxx | 15 +++++++++------
 writerfilter/source/dmapper/TblStylePrHandler.hxx | 12 ++++++------
 2 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/writerfilter/source/dmapper/TblStylePrHandler.cxx b/writerfilter/source/dmapper/TblStylePrHandler.cxx
index 53838353c3b0..02d134786357 100644
--- a/writerfilter/source/dmapper/TblStylePrHandler.cxx
+++ b/writerfilter/source/dmapper/TblStylePrHandler.cxx
@@ -4,14 +4,17 @@
 #include <dmapperLoggers.hxx>
 #include <resourcemodel/QNameToString.hxx>
 
+#include "dmapperLoggers.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 )
+LoggedProperties(dmapper_logger, "TblStylePrHandler"),
+m_rDMapper( rDMapper ),
+m_pTablePropsHandler( new TablePropertiesHandler( true ) ),
+m_nType( TBL_STYLE_UNKNOWN ),
+m_pProperties( new PropertyMap )
 {
 }
 
@@ -20,7 +23,7 @@ TblStylePrHandler::~TblStylePrHandler( )
     delete m_pTablePropsHandler, m_pTablePropsHandler = NULL;
 }
 
-void TblStylePrHandler::attribute(Id rName, Value & rVal)
+void TblStylePrHandler::lcl_attribute(Id rName, Value & rVal)
 {
 #ifdef DEBUG_DOMAINMAPPER
     dmapper_logger->startElement("TblStylePrHandler.attribute");
@@ -41,7 +44,7 @@ void TblStylePrHandler::attribute(Id rName, Value & rVal)
     }
 }
 
-void TblStylePrHandler::sprm(Sprm & rSprm)
+void TblStylePrHandler::lcl_sprm(Sprm & rSprm)
 {
 #ifdef DEBUG_DOMAINMAPPER
     dmapper_logger->startElement("TblStylePrHandler.sprm");
diff --git a/writerfilter/source/dmapper/TblStylePrHandler.hxx b/writerfilter/source/dmapper/TblStylePrHandler.hxx
index dd8d2da97690..b76782b0edfe 100644
--- a/writerfilter/source/dmapper/TblStylePrHandler.hxx
+++ b/writerfilter/source/dmapper/TblStylePrHandler.hxx
@@ -5,7 +5,7 @@
 
 #include <dmapper/DomainMapper.hxx>
 #include <WriterFilterDllApi.hxx>
-#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/LoggedResources.hxx>
 #include <boost/shared_ptr.hpp>
 
 namespace writerfilter {
@@ -32,7 +32,7 @@ enum TblStyleType
     TBL_STYLE_SWCELL
 };
 
-class WRITERFILTER_DLLPRIVATE TblStylePrHandler : public Properties
+class WRITERFILTER_DLLPRIVATE TblStylePrHandler : public LoggedProperties
 {
 private:
     DomainMapper &              m_rDMapper;
@@ -41,14 +41,14 @@ private:
     TblStyleType                m_nType;
     PropertyMapPtr              m_pProperties;
 
+    // Properties
+    virtual void lcl_attribute(Id Name, Value & val);
+    virtual void lcl_sprm(Sprm & sprm);
+
 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; };
 
-- 
cgit 


From 215ae1c02d942a37fc8d567559c0bd50976242ef Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 15:58:57 +0200
Subject: writerfilter09: TDefTableHandler: use logged resources

---
 writerfilter/source/dmapper/TDefTableHandler.cxx | 17 ++++++++++-------
 writerfilter/source/dmapper/TDefTableHandler.hxx | 13 +++++++------
 2 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/writerfilter/source/dmapper/TDefTableHandler.cxx b/writerfilter/source/dmapper/TDefTableHandler.cxx
index c65ce2cdb784..fd63fe378c76 100644
--- a/writerfilter/source/dmapper/TDefTableHandler.cxx
+++ b/writerfilter/source/dmapper/TDefTableHandler.cxx
@@ -33,6 +33,8 @@
 #include <com/sun/star/text/TableColumnSeparator.hpp>
 #include <com/sun/star/text/VertOrientation.hpp>
 
+#include "dmapperLoggers.hxx"
+
 namespace writerfilter {
 namespace dmapper {
 
@@ -42,11 +44,12 @@ using namespace ::com::sun::star;
 
   -----------------------------------------------------------------------*/
 TDefTableHandler::TDefTableHandler(bool bOOXML) :
-    m_nLineWidth(0),
-    m_nLineType(0),
-    m_nLineColor(0),
-    m_nLineDistance(0),
-    m_bOOXML( bOOXML )
+LoggedProperties(dmapper_logger, "TDefTableHandler"),
+m_nLineWidth(0),
+m_nLineType(0),
+m_nLineColor(0),
+m_nLineDistance(0),
+m_bOOXML( bOOXML )
 {
 }
 /*-- 24.04.2007 09:06:35---------------------------------------------------
@@ -58,7 +61,7 @@ TDefTableHandler::~TDefTableHandler()
 /*-- 24.04.2007 09:06:35---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void TDefTableHandler::attribute(Id rName, Value & rVal)
+void TDefTableHandler::lcl_attribute(Id rName, Value & rVal)
 {
     sal_Int32 nIntValue = rVal.getInt();
     (void)nIntValue;
@@ -214,7 +217,7 @@ void TDefTableHandler::localResolve(Id rName, writerfilter::Reference<Properties
 /*-- 24.04.2007 09:06:35---------------------------------------------------
 
   -----------------------------------------------------------------------*/
-void TDefTableHandler::sprm(Sprm & rSprm)
+void TDefTableHandler::lcl_sprm(Sprm & rSprm)
 {
     /* WRITERFILTERSTATUS: table: TDefTable_sprm */
     switch( rSprm.getId() )
diff --git a/writerfilter/source/dmapper/TDefTableHandler.hxx b/writerfilter/source/dmapper/TDefTableHandler.hxx
index 993b49251a77..3bd25adeb6ea 100644
--- a/writerfilter/source/dmapper/TDefTableHandler.hxx
+++ b/writerfilter/source/dmapper/TDefTableHandler.hxx
@@ -28,7 +28,7 @@
 #define INCLUDED_TDEFTABLEHANDLER_HXX
 
 #include <WriterFilterDllApi.hxx>
-#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/LoggedResources.hxx>
 #include <boost/shared_ptr.hpp>
 #include <com/sun/star/table/BorderLine.hpp>
 #include <vector>
@@ -41,7 +41,7 @@ namespace dmapper
 {
 class PropertyMap;
 class TablePropertyMap;
-class WRITERFILTER_DLLPRIVATE TDefTableHandler : public Properties
+class WRITERFILTER_DLLPRIVATE TDefTableHandler : public LoggedProperties
 {
 public:
 
@@ -67,14 +67,15 @@ private:
     bool                                                m_bOOXML;
 
     void localResolve(Id Name, writerfilter::Reference<Properties>::Pointer_t pProperties);
+
+    // Properties
+    virtual void lcl_attribute(Id Name, Value & val);
+    virtual void lcl_sprm(Sprm & sprm);
+
 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;
-- 
cgit 


From 4e51135bca5cc9685b71b6a8b6130c1352724266 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 17:22:07 +0200
Subject: writerfilter09: refactoring of debugging code in PropertyMap and
 DomainMapperTableHandler.cxx

---
 .../source/dmapper/DomainMapperTableHandler.cxx    | 65 ++++++++++------------
 writerfilter/source/dmapper/PropertyMap.cxx        | 62 ++++++++++++---------
 writerfilter/source/dmapper/PropertyMap.hxx        |  5 --
 3 files changed, 63 insertions(+), 69 deletions(-)

diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
index 958a96fbff7d..1a5f45fe5bac 100644
--- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
@@ -32,7 +32,7 @@
 #include <com/sun/star/text/HoriOrientation.hpp>
 #include <dmapperLoggers.hxx>
 
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
 #include <PropertyMapHelper.hxx>
 #endif
 
@@ -45,7 +45,7 @@ using namespace ::std;
 #define DEF_BORDER_DIST 190  //0,19cm
 #define DEFAULT_CELL_MARGIN 108 //default cell margin, not documented
 
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
 static void  lcl_printProperties( PropertyMapPtr pProps )
 {
     if( pProps.get() )
@@ -104,7 +104,7 @@ void DomainMapperTableHandler::startTable(unsigned int nRows,
     m_pTableSeq = TableSequencePointer_t(new TableSequence_t(nRows));
     m_nRowIndex = 0;
 
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
     dmapper_logger->startElement("tablehandler.table");
     dmapper_logger->attribute("rows", nRows);
 
@@ -118,11 +118,6 @@ void DomainMapperTableHandler::startTable(unsigned int nRows,
   -----------------------------------------------------------------------*/
 PropertyMapPtr lcl_SearchParentStyleSheetAndMergeProperties(const StyleSheetEntryPtr pStyleSheet, StyleSheetTablePtr pStyleSheetTable)
 {
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->startElement("lcl_SearchParentStyleSheetAndMergeProperties");
-    dmapper_logger->addTag(pStyleSheet->toTag());
-#endif
-
     PropertyMapPtr pRet;
     if( pStyleSheet->sBaseStyleIdentifier.getLength())
     {
@@ -136,10 +131,6 @@ PropertyMapPtr lcl_SearchParentStyleSheetAndMergeProperties(const StyleSheetEntr
 
     pRet->insert(  pStyleSheet->pProperties, true );
 
-#ifdef DEBUG_DOMAINMAPPER
-    dmapper_logger->endElement("lcl_SearchParentStyleSheetAndMergeProperties");
-#endif
-
     return pRet;
 }
 
@@ -241,7 +232,7 @@ void lcl_computeCellBorders( PropertyMapPtr pTableBorders, PropertyMapPtr pCellP
     }
 }
 
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
 
 void lcl_debug_BorderLine(table::BorderLine & rLine)
 {
@@ -334,7 +325,7 @@ TableStyleSheetEntry * DomainMapperTableHandler::endTableGetTableStyle(TableInfo
 
                 PropertyMapPtr pMergedProperties = lcl_SearchParentStyleSheetAndMergeProperties(pStyleSheet, pStyleSheetTable);
 
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
                 dmapper_logger->startElement("mergedProps");
                 dmapper_logger->addTag(pMergedProperties->toTag());
                 dmapper_logger->endElement("mergedProps");
@@ -343,7 +334,7 @@ TableStyleSheetEntry * DomainMapperTableHandler::endTableGetTableStyle(TableInfo
                 m_aTableProperties->insert( pMergedProperties );
                 m_aTableProperties->insert( pTableProps );
 
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
                 dmapper_logger->startElement("TableProperties");
                 dmapper_logger->addTag(m_aTableProperties->toTag());
                 dmapper_logger->endElement("TableProperties");
@@ -354,7 +345,7 @@ TableStyleSheetEntry * DomainMapperTableHandler::endTableGetTableStyle(TableInfo
         // Set the table default attributes for the cells
         rInfo.pTableDefaults->insert( m_aTableProperties );
 
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
         dmapper_logger->startElement("TableDefaults");
         dmapper_logger->addTag(rInfo.pTableDefaults->toTag());
         dmapper_logger->endElement("TableDefaults");
@@ -472,7 +463,7 @@ TableStyleSheetEntry * DomainMapperTableHandler::endTableGetTableStyle(TableInfo
 
         m_aTableProperties->Insert( PROP_TABLE_BORDER, false, uno::makeAny( aTableBorder ) );
 
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
         lcl_debug_TableBorder(aTableBorder);
 #endif
 
@@ -501,7 +492,7 @@ TableStyleSheetEntry * DomainMapperTableHandler::endTableGetTableStyle(TableInfo
 
         rInfo.aTableProperties = m_aTableProperties->GetPropertyValues();
 
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
         dmapper_logger->startElement("debug.tableprops");
         dmapper_logger->addTag(m_aTableProperties->toTag());
         dmapper_logger->endElement("debug.tableprops");
@@ -514,7 +505,7 @@ TableStyleSheetEntry * DomainMapperTableHandler::endTableGetTableStyle(TableInfo
 
 CellPropertyValuesSeq_t DomainMapperTableHandler::endTableGetCellProperties(TableInfo & rInfo)
 {
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
     dmapper_logger->startElement("getCellProperties");
 #endif
 
@@ -593,7 +584,7 @@ CellPropertyValuesSeq_t DomainMapperTableHandler::endTableGetCellProperties(Tabl
                 pAllCellProps->insert( *aCellIterator );
                 aCellIterator->get( )->swap( *pAllCellProps.get( ) );
 
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
                 dmapper_logger->startElement("cell");
                 dmapper_logger->attribute("cell", nCell);
                 dmapper_logger->attribute("row", nRow);
@@ -626,14 +617,14 @@ CellPropertyValuesSeq_t DomainMapperTableHandler::endTableGetCellProperties(Tabl
                                                  uno::makeAny((sal_Int32) rInfo.nBottomBorderDistance ) );
 
                 pSingleCellProperties[nCell] = aCellIterator->get()->GetPropertyValues();
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
                 dmapper_logger->endElement("cell");
 #endif
             }
             ++nCell;
             ++aCellIterator;
         }
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
         //-->debug cell properties
         {
             ::rtl::OUString sNames;
@@ -660,7 +651,7 @@ CellPropertyValuesSeq_t DomainMapperTableHandler::endTableGetCellProperties(Tabl
         ++aRowOfCellsIterator;
     }
 
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
     dmapper_logger->endElement("getCellProperties");
 #endif
 
@@ -669,7 +660,7 @@ CellPropertyValuesSeq_t DomainMapperTableHandler::endTableGetCellProperties(Tabl
 
 RowPropertyValuesSeq_t DomainMapperTableHandler::endTableGetRowProperties()
 {
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
     dmapper_logger->startElement("getRowProperties");
 #endif
 
@@ -679,7 +670,7 @@ RowPropertyValuesSeq_t DomainMapperTableHandler::endTableGetRowProperties()
     sal_Int32 nRow = 0;
     while( aRowIter != aRowIterEnd )
     {
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
         dmapper_logger->startElement("rowProps.row");
 #endif
         if( aRowIter->get() )
@@ -689,19 +680,19 @@ RowPropertyValuesSeq_t DomainMapperTableHandler::endTableGetRowProperties()
                 aRowIter->get()->Insert( PROP_IS_SPLIT_ALLOWED, false, uno::makeAny(sal_True ) );
 
             aRowProperties[nRow] = (*aRowIter)->GetPropertyValues();
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
             dmapper_logger->addTag((*aRowIter)->toTag());
             dmapper_logger->addTag(lcl_PropertyValuesToTag(aRowProperties[nRow]));
 #endif
         }
         ++nRow;
         ++aRowIter;
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
         dmapper_logger->endElement("rowProps.row");
 #endif
     }
 
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
     dmapper_logger->endElement("getRowProperties");
 #endif
 
@@ -710,7 +701,7 @@ RowPropertyValuesSeq_t DomainMapperTableHandler::endTableGetRowProperties()
 
 void DomainMapperTableHandler::endTable()
 {
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
     dmapper_logger->startElement("tablehandler.endTable");
 #endif
 
@@ -722,7 +713,7 @@ void DomainMapperTableHandler::endTable()
 
     RowPropertyValuesSeq_t aRowProperties = endTableGetRowProperties();
 
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
     dmapper_logger->addTag(lcl_PropertyValueSeqToTag(aRowProperties));
 #endif
 
@@ -739,11 +730,11 @@ void DomainMapperTableHandler::endTable()
         }
         catch (lang::IllegalArgumentException e)
         {
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
             dmapper_logger->chars("failed to import table!");
 #endif
         }
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
         catch ( uno::Exception e )
         {
             dmapper_logger->startElement("exception");
@@ -757,7 +748,7 @@ void DomainMapperTableHandler::endTable()
     m_aCellProperties.clear();
     m_aRowProperties.clear();
 
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
     dmapper_logger->endElement("tablehandler.endTable");
     dmapper_logger->endElement("tablehandler.table");
 #endif
@@ -769,7 +760,7 @@ void DomainMapperTableHandler::startRow(unsigned int nCells,
     m_aRowProperties.push_back( pProps );
     m_aCellProperties.push_back( PropertyMapVector1() );
 
-#if DEBUG_DOMAINMAPPER
+#if DEBUG_DMAPPER_TABLE_HANDLER
     dmapper_logger->startElement("table.row");
     dmapper_logger->attribute("cells", nCells);
     if (pProps != NULL)
@@ -785,7 +776,7 @@ void DomainMapperTableHandler::endRow()
     (*m_pTableSeq)[m_nRowIndex] = *m_pRowSeq;
     ++m_nRowIndex;
     m_nCellIndex = 0;
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
     dmapper_logger->endElement("table.row");
 #endif
 }
@@ -804,7 +795,7 @@ void DomainMapperTableHandler::startCell(const Handle_t & start,
         m_aCellProperties[nRow - 1].push_back( pEmptyProps );
     }
 
-#if DEBUG_DOMAINMAPPER
+#if DEBUG_DMAPPER_TABLE_HANDLER
     dmapper_logger->startElement("table.cell");
     dmapper_logger->startElement("table.cell.start");
     dmapper_logger->chars(toString(start));
@@ -824,7 +815,7 @@ void DomainMapperTableHandler::startCell(const Handle_t & start,
 
 void DomainMapperTableHandler::endCell(const Handle_t & end)
 {
-#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
     dmapper_logger->startElement("table.cell.end");
     dmapper_logger->chars(toString(end));
     dmapper_logger->endElement("table.cell.end");
diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx
index 11930fb01972..9438e645a37f 100644
--- a/writerfilter/source/dmapper/PropertyMap.cxx
+++ b/writerfilter/source/dmapper/PropertyMap.cxx
@@ -112,13 +112,43 @@ uno::Sequence< beans::PropertyValue > PropertyMap::GetPropertyValues()
     }
     return m_aValues;
 }
-/*-------------------------------------------------------------------------
 
-  -----------------------------------------------------------------------*/
+void lcl_AnyToTag(XMLTag::Pointer_t pTag, const uno::Any & rAny)
+{
+    try {
+        sal_Int32 aInt;
+        rAny >>= aInt;
+        pTag->addAttr("value", aInt);
+
+        sal_uInt32 auInt;
+        rAny >>= auInt;
+        pTag->addAttr("unsignedValue", auInt);
+
+        float aFloat;
+        rAny >>= aFloat;
+        pTag->addAttr("floatValue", aFloat);
+
+        ::rtl::OUString aStr;
+        rAny >>= aStr;
+        pTag->addAttr("stringValue", aStr);
+    }
+    catch (...) {
+    }
+}
+
 void PropertyMap::Insert( PropertyIds eId, bool bIsTextProperty, const uno::Any& rAny, bool bOverwrite )
 {
-//    const ::rtl::OUString& rInsert = PropertyNameSupplier::
-//                           GetPropertyNameSupplier().GetName(eId);
+#ifdef DEBUG_DMAPPER_PROPERTY_MAP
+    const ::rtl::OUString& rInsert = PropertyNameSupplier::
+        GetPropertyNameSupplier().GetName(eId);
+
+    XMLTag::Pointer_t pTag(new XMLTag("propertyMap.insert"));
+    pTag->addAttr("name", rInsert);
+    lcl_AnyToTag(pTag, rAny);
+
+    dmapper_logger->addTag(pTag);
+#endif
+
     PropertyMap::iterator aElement = find(PropertyDefinition( eId, bIsTextProperty ) );
     if( aElement != end())
     {
@@ -132,7 +162,6 @@ void PropertyMap::Insert( PropertyIds eId, bool bIsTextProperty, const uno::Any&
     Invalidate();
 }
 
-#ifdef DEBUG_DOMAINMAPPER
 XMLTag::Pointer_t PropertyMap::toTag() const
 {
     XMLTag::Pointer_t pResult(new XMLTag("PropertyMap"));
@@ -151,27 +180,7 @@ XMLTag::Pointer_t PropertyMap::toTag() const
                 pTag->addTag(lcl_TableColumnSeparatorsToTag(aMapIter->second));
                 break;
             default:
-            {
-                try {
-                    sal_Int32 aInt;
-                    aMapIter->second >>= aInt;
-                    pTag->addAttr("value", aInt);
-
-                    sal_uInt32 auInt;
-                    aMapIter->second >>= auInt;
-                    pTag->addAttr("unsignedValue", auInt);
-
-                    float aFloat;
-                    aMapIter->second >>= aFloat;
-                    pTag->addAttr("floatValue", aFloat);
-
-                    ::rtl::OUString aStr;
-                    aMapIter->second >>= auInt;
-                    pTag->addAttr("stringValue", aStr);
-                }
-                catch (...) {
-                }
-            }
+                lcl_AnyToTag(pTag, aMapIter->second);
                 break;
         }
 
@@ -182,7 +191,6 @@ XMLTag::Pointer_t PropertyMap::toTag() const
 
     return pResult;
 }
-#endif
 
 /*-- 13.12.2006 10:46:42---------------------------------------------------
 
diff --git a/writerfilter/source/dmapper/PropertyMap.hxx b/writerfilter/source/dmapper/PropertyMap.hxx
index 16886530f324..b6dcad6d63b2 100644
--- a/writerfilter/source/dmapper/PropertyMap.hxx
+++ b/writerfilter/source/dmapper/PropertyMap.hxx
@@ -39,9 +39,7 @@
 #include <map>
 #include <vector>
 
-#ifdef DEBUG_DOMAINMAPPER
 #include <resourcemodel/TagLogger.hxx>
-#endif
 
 namespace com{namespace sun{namespace star{
     namespace beans{
@@ -136,10 +134,7 @@ public:
 
     virtual void insertTableProperties( const PropertyMap* );
 
-#ifdef DEBUG_DOMAINMAPPER
     virtual XMLTag::Pointer_t toTag() const;
-#endif
-
 };
 typedef boost::shared_ptr<PropertyMap>  PropertyMapPtr;
 
-- 
cgit 


From 339560939e81d098408a8040d8655e683c69881c Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 11 Aug 2010 17:35:14 +0200
Subject: writerfilter09: LoggedProperties::sprm: send sprm id as attribute

---
 writerfilter/source/resourcemodel/LoggedResources.cxx | 1 +
 1 file changed, 1 insertion(+)

diff --git a/writerfilter/source/resourcemodel/LoggedResources.cxx b/writerfilter/source/resourcemodel/LoggedResources.cxx
index 9079a682bd07..36761688a166 100644
--- a/writerfilter/source/resourcemodel/LoggedResources.cxx
+++ b/writerfilter/source/resourcemodel/LoggedResources.cxx
@@ -285,6 +285,7 @@ void LoggedProperties::sprm(Sprm & sprm)
 {
 #ifdef DEBUG_LOGGING
     mHelper.startElement("sprm");
+    mHelper.attribute("name", (*QNameToString::Instance())(sprm.getId()));
     mHelper.chars(sprm.toString());
 #endif
 
-- 
cgit 


From 64a8bd7bb1bee1b3523473e71b5bc1ef24f64fc3 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Thu, 12 Aug 2010 12:12:42 +0200
Subject: writerfilter09: make buildable without debug=t

---
 writerfilter/inc/resourcemodel/TagLogger.hxx      | 3 ---
 writerfilter/source/dmapper/GraphicImport.cxx     | 8 ++------
 writerfilter/source/dmapper/PropertyMap.cxx       | 6 +++---
 writerfilter/source/dmapper/PropertyMapHelper.cxx | 3 +--
 writerfilter/source/dmapper/PropertyMapHelper.hxx | 3 +--
 writerfilter/source/dmapper/SettingsTable.cxx     | 4 +++-
 writerfilter/source/resourcemodel/TagLogger.cxx   | 2 --
 7 files changed, 10 insertions(+), 19 deletions(-)

diff --git a/writerfilter/inc/resourcemodel/TagLogger.hxx b/writerfilter/inc/resourcemodel/TagLogger.hxx
index 1692f3cd1c8d..a2c8290e0c4b 100644
--- a/writerfilter/inc/resourcemodel/TagLogger.hxx
+++ b/writerfilter/inc/resourcemodel/TagLogger.hxx
@@ -28,8 +28,6 @@
 #ifndef INCLUDED_TAG_LOGGER_HXX
 #define INCLUDED_TAG_LOGGER_HXX
 
-#ifdef DEBUG
-
 #include <rtl/ustring.hxx>
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <WriterFilterDllApi.hxx>
@@ -154,5 +152,4 @@ namespace writerfilter
 WRITERFILTER_DLLPUBLIC XMLTag::Pointer_t unoPropertySetToTag(uno::Reference<beans::XPropertySet> rPropSet);
 }
 
-#endif // DEBUG
 #endif // INCLUDED_TAG_LOGGER_HXX
diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx
index 5bfba0f8212d..486c5ced7f03 100644
--- a/writerfilter/source/dmapper/GraphicImport.cxx
+++ b/writerfilter/source/dmapper/GraphicImport.cxx
@@ -1118,12 +1118,8 @@ void GraphicImport::lcl_attribute(Id nName, Value & val)
             //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())
+#ifdef DEBUG_DMAPPER_GRAPHIC_IMPORT
+            dmapper_logger->element("unhandled");
 #endif
             ;
     }
diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx
index 9438e645a37f..9a5999b4f353 100644
--- a/writerfilter/source/dmapper/PropertyMap.cxx
+++ b/writerfilter/source/dmapper/PropertyMap.cxx
@@ -116,15 +116,15 @@ uno::Sequence< beans::PropertyValue > PropertyMap::GetPropertyValues()
 void lcl_AnyToTag(XMLTag::Pointer_t pTag, const uno::Any & rAny)
 {
     try {
-        sal_Int32 aInt;
+        sal_Int32 aInt = 0;
         rAny >>= aInt;
         pTag->addAttr("value", aInt);
 
-        sal_uInt32 auInt;
+        sal_uInt32 auInt = 0;
         rAny >>= auInt;
         pTag->addAttr("unsignedValue", auInt);
 
-        float aFloat;
+        float aFloat = 0.0f;
         rAny >>= aFloat;
         pTag->addAttr("floatValue", aFloat);
 
diff --git a/writerfilter/source/dmapper/PropertyMapHelper.cxx b/writerfilter/source/dmapper/PropertyMapHelper.cxx
index 4fb4c759289d..fa5972d217da 100644
--- a/writerfilter/source/dmapper/PropertyMapHelper.cxx
+++ b/writerfilter/source/dmapper/PropertyMapHelper.cxx
@@ -32,7 +32,6 @@
 #include <resourcemodel/TagLogger.hxx>
 #include "PropertyMapHelper.hxx"
 
-#ifdef DEBUG
 namespace writerfilter
 {
 namespace dmapper
@@ -128,4 +127,4 @@ XMLTag::Pointer_t lcl_PropertyValueSeqSeqToTag(PropertyValueSeqSeq_t rPropValSeq
 
 }
 }
-#endif // DEBUG
+
diff --git a/writerfilter/source/dmapper/PropertyMapHelper.hxx b/writerfilter/source/dmapper/PropertyMapHelper.hxx
index 4a528f1736c0..a5a25a2f357a 100644
--- a/writerfilter/source/dmapper/PropertyMapHelper.hxx
+++ b/writerfilter/source/dmapper/PropertyMapHelper.hxx
@@ -28,7 +28,6 @@
  *
  ************************************************************************/
 
-#ifdef DEBUG
 #include "PropertyMap.hxx"
 #include <com/sun/star/beans/PropertyValues.hpp>
 
@@ -47,4 +46,4 @@ typedef uno::Sequence<PropertyValueSeq_t> PropertyValueSeqSeq_t;
 XMLTag::Pointer_t lcl_PropertyValueSeqSeqToTag(PropertyValueSeqSeq_t & rPropValSeqSeq);
 }
 }
-#endif // DEBUG
+
diff --git a/writerfilter/source/dmapper/SettingsTable.cxx b/writerfilter/source/dmapper/SettingsTable.cxx
index facd3f9cb40e..94a4eb5b74b3 100755
--- a/writerfilter/source/dmapper/SettingsTable.cxx
+++ b/writerfilter/source/dmapper/SettingsTable.cxx
@@ -222,7 +222,9 @@ void SettingsTable::lcl_sprm(Sprm& rSprm)
         break;
     default:
     {
-        OSL_ENSURE( false, "unknown sprmid in SettingsTable::sprm()");
+#ifdef DEBUG_DMAPPER_SETTINGS_TABLE
+        dmapper_logger->element("unhandled");
+#endif
     }
     }
 }
diff --git a/writerfilter/source/resourcemodel/TagLogger.cxx b/writerfilter/source/resourcemodel/TagLogger.cxx
index 3760923aa523..0a6f2d1aea1d 100644
--- a/writerfilter/source/resourcemodel/TagLogger.cxx
+++ b/writerfilter/source/resourcemodel/TagLogger.cxx
@@ -25,7 +25,6 @@
  *
  ************************************************************************/
 
-#ifdef DEBUG
 #include <fstream>
 #include <string.h>
 #include <resourcemodel/TagLogger.hxx>
@@ -488,4 +487,3 @@ XMLTag::Pointer_t unoPropertySetToTag(uno::Reference<beans::XPropertySet> rPropS
 }
 
 }
-#endif // DEBUG
-- 
cgit 


From 98e01f2726e01bd618821573c894d5304e00f103 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 17 Aug 2010 11:17:17 +0200
Subject: writerfilter09: new class WrapPolygonHandler

---
 writerfilter/source/dmapper/WrapPolygonHandler.cxx | 112 +++++++++++++++++++++
 writerfilter/source/dmapper/WrapPolygonHandler.hxx |  62 ++++++++++++
 2 files changed, 174 insertions(+)
 create mode 100644 writerfilter/source/dmapper/WrapPolygonHandler.cxx
 create mode 100644 writerfilter/source/dmapper/WrapPolygonHandler.hxx

diff --git a/writerfilter/source/dmapper/WrapPolygonHandler.cxx b/writerfilter/source/dmapper/WrapPolygonHandler.cxx
new file mode 100644
index 000000000000..14a750388e30
--- /dev/null
+++ b/writerfilter/source/dmapper/WrapPolygonHandler.cxx
@@ -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 <com/sun/star/drawing/PointSequence.hpp>
+
+#include <ooxml/resourceids.hxx>
+#include <resourcemodel/ResourceModelHelper.hxx>
+
+#include "ConversionHelper.hxx"ConversionHelper::convertTwipToMM100(
+#include "WrapPolygonHandler.hxx"
+#include "dmapperLoggers.hxx"
+
+namespace writerfilter {
+
+using resourcemodel::resolveSprmProps;
+
+namespace dmapper {
+
+WrapPolygonHandler::WrapPolygonHandler()
+: LoggedProperties(dmapper_logger, "WrapPolygonHandler")
+{
+}
+
+WrapPolygonHandler::~WrapPolygonHandler()
+{
+}
+
+void WrapPolygonHandler::lcl_attribute(Id Name, Value & val)
+{
+    sal_Int32 nIntValue = val.getInt();
+
+    switch(Name)
+    {
+    case NS_ooxml::LN_CT_Point2D_x:
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+        mnX = nIntValue;
+        break;
+    case NS_ooxml::LN_CT_Point2D_y:
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+        mnY = nIntValue;
+        break;
+    default:
+#ifdef DEBUG_WRAP_POLYGON_HANDLER
+        dmapper_logger->element("unhandled");
+#endif
+        break;
+    }
+}
+
+void WrapPolygonHandler::lcl_sprm(Sprm & sprm)
+{
+    switch (sprm.getId())
+    {
+    case NS_ooxml::LN_CT_WrapPath_lineTo:
+    case NS_ooxml::LN_CT_WrapPath_start:
+        /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+        {
+            resolveSprmProps(*this, sprm);
+
+            awt::Point aPoint(mnX, mnY);
+            mPoints.push_back(aPoint);
+        }
+        break;
+    default:
+#ifdef DEBUG_WRAP_POLYGON_HANDLER
+        dmapper_logger->element("unhandled");
+#endif
+        break;
+    }
+}
+
+drawing::PointSequenceSequence WrapPolygonHandler::getPolygon()
+{
+    drawing::PointSequenceSequence aPolyPolygon(1L);
+    drawing::PointSequence * pPolygon = aPolyPolygon.getArray();
+    pPolygon->realloc(mPoints.size());
+
+    sal_uInt32 n = 0;
+    for (Points_t::const_iterator aIt = mPoints.begin(); aIt != mPoints.end(); aIt++)
+    {
+        (*pPolygon)[n] = *aIt;
+        ++n;
+    }
+
+    return aPolyPolygon;
+}
+
+}}
diff --git a/writerfilter/source/dmapper/WrapPolygonHandler.hxx b/writerfilter/source/dmapper/WrapPolygonHandler.hxx
new file mode 100644
index 000000000000..5bbeab891859
--- /dev/null
+++ b/writerfilter/source/dmapper/WrapPolygonHandler.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 WRAP_POLYGON_HANDLER_HXX
+#define WRAP_POLYGON_HANDLER_HXX
+
+#include <com/sun/star/drawing/PointSequenceSequence.hpp>
+#include <resourcemodel/LoggedResources.hxx>
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+
+class WrapPolygonHandler : public LoggedProperties
+{
+public:
+    WrapPolygonHandler();
+    virtual ~WrapPolygonHandler();
+
+    drawing::PointSequenceSequence getPolygon();
+
+private:
+    typedef ::std::deque<awt::Point> Points_t;
+    Points_t mPoints;
+
+    sal_uInt32 mnX;
+    sal_uInt32 mnY;
+
+    // Properties
+    virtual void lcl_attribute(Id Name, Value & val);
+    virtual void lcl_sprm(Sprm & sprm);
+
+};
+
+}}
+
+#endif // WRAP_POLYGON_HANDLER_HXX
-- 
cgit 


From 0ddda96e69eefbc284f5678c08644b46525ad853 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 17 Aug 2010 11:17:52 +0200
Subject: writerfilter09: new class Fraction

---
 writerfilter/inc/resourcemodel/Fraction.hxx    |  53 +++++++++++
 writerfilter/source/resourcemodel/Fraction.cxx | 118 +++++++++++++++++++++++++
 writerfilter/source/resourcemodel/makefile.mk  |   1 +
 3 files changed, 172 insertions(+)
 create mode 100644 writerfilter/inc/resourcemodel/Fraction.hxx
 create mode 100644 writerfilter/source/resourcemodel/Fraction.cxx

diff --git a/writerfilter/inc/resourcemodel/Fraction.hxx b/writerfilter/inc/resourcemodel/Fraction.hxx
new file mode 100644
index 000000000000..1916bd433651
--- /dev/null
+++ b/writerfilter/inc/resourcemodel/Fraction.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_FRACTION_HXX
+#define INCLUDED_FRACTION_HXX
+
+#include <sal/types.h>
+
+namespace writerfilter {
+namespace resourcemodel {
+
+class Fraction
+{
+    explicit Fraction(sal_Int32 nNumerator, sal_Int32 nDenominator = 1);
+    virtual ~Fraction();
+
+    Fraction operator=(const Fraction & rFraction) const;
+    Fraction operator+(const Fraction & rFraction) const;
+    Fraction operator-(const Fraction & rFraction) const;
+    Fraction operator*(const Fraction & rFraction) const;
+    Fraction operator/(const Fraction & rFraction) const;
+    operator sal_Int32() const;
+    operator float() const;
+
+private:
+    sal_Int32 mnNumerator;
+    sal_Int32 mnDenominator;
+};
+}}
+#endif // INCLUDED_FRACTION_HXX
diff --git a/writerfilter/source/resourcemodel/Fraction.cxx b/writerfilter/source/resourcemodel/Fraction.cxx
new file mode 100644
index 000000000000..2fea20772878
--- /dev/null
+++ b/writerfilter/source/resourcemodel/Fraction.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 <resourcemodel/Fraction.hxx>
+
+namespace writerfilter {
+namespace resourcemodel {
+
+sal_uInt32 gcd(sal_uInt32 a, sal_uInt32 b)
+{
+    if (a == 0 || b == 0)
+        return a | b;
+
+    sal_uInt32 nShift = 0;
+    while (((a | b) & 1) == 0)
+    {
+        a >>= 1;
+        b >>= 1;
+        ++nShift;
+    }
+
+    while ((a & 1) == 0)
+        a >>= 1;
+
+    do
+    {
+        while ((b & 1) == 0)
+            b >>= 1;
+
+        if (a < b)
+        {
+            a -= b;
+        }
+        else
+        {
+            sal_uInt32 nDiff = a - b;
+            a = b;
+            b = nDiff;
+        }
+
+        b >>= 1;
+    }
+    while (b != 0);
+
+    return a << nShift;
+}
+
+sal_uInt32 lcm(sal_Int32 a, sal_Int32 b)
+{
+    return abs(a * b) / gcd(a, b);
+}
+
+Fraction::Fraction(sal_Int32 nNumerator, sal_Int32 nDenominator)
+{
+    sal_uInt32 nGCD = gcd(nNumerator, nDenominator);
+
+    mnNumerator = nNumerator / nGCD;
+    mnDenominator = nDenominator / nGCD;
+}
+
+Fraction::~Fraction()
+{
+}
+
+Fraction Fraction::operator + (const Fraction & rFraction) const
+{
+    sal_uInt32 nLCM = lcm(mnDenominator, rFraction.mnDenominator);
+
+    return Fraction(mnNumerator * nLCM / mnDenominator + rFraction.mnNumerator * nLCM / rFraction.mnDenominator, nLCM);
+}
+
+Fraction Fraction::operator - (const Fraction & rFraction) const
+{
+    sal_uInt32 nLCM = lcm(mnDenominator, rFraction.mnDenominator);
+
+    return Fraction(mnNumerator * nLCM / mnDenominator - rFraction.mnNumerator * nLCM / rFraction.mnDenominator, nLCM);
+}
+
+Fraction Fraction::operator * (const Fraction & rFraction) const
+{
+    return Fraction(mnNumerator * rFraction.mnNumerator, mnDenominator * rFraction.mnDenominator);
+}
+
+Fraction::operator sal_Int32() const
+{
+    return mnNumerator / mnDenominator;
+}
+
+Fraction::operator float() const
+{
+    return mnNumerator / mnDenominator;
+}
+
+}}
diff --git a/writerfilter/source/resourcemodel/makefile.mk b/writerfilter/source/resourcemodel/makefile.mk
index 204c524856ff..71f730e77303 100644
--- a/writerfilter/source/resourcemodel/makefile.mk
+++ b/writerfilter/source/resourcemodel/makefile.mk
@@ -49,6 +49,7 @@ NOOPTFILES= \
     $(SLO)$/qnametostr.obj
 
 SLOFILES= \
+    $(SLO)$/Fraction.obj \
     $(SLO)$/LoggedResources.obj \
     $(SLO)$/Protocol.obj \
     $(SLO)$/ResourceModelHelper.obj \
-- 
cgit 


From 86898639d4144a078ed295d0a8bef406868802cb Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 17 Aug 2010 11:18:40 +0200
Subject: writerfilter09: use WrapPolygonHandler

---
 writerfilter/source/dmapper/GraphicImport.cxx | 65 ++++++++++++++++++---------
 writerfilter/source/dmapper/makefile.mk       |  8 ++--
 2 files changed, 48 insertions(+), 25 deletions(-)

diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx
index 486c5ced7f03..6988ac7752c7 100644
--- a/writerfilter/source/dmapper/GraphicImport.cxx
+++ b/writerfilter/source/dmapper/GraphicImport.cxx
@@ -25,38 +25,44 @@
  *
  ************************************************************************/
 
-#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/drawing/PointSequenceSequence.hpp>
+#include <com/sun/star/drawing/XShape.hpp>
 #include <com/sun/star/graphic/XGraphic.hpp>
+#include <com/sun/star/graphic/XGraphicProvider.hpp>
+#include <com/sun/star/io/XInputStream.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/TextContentAnchorType.hpp>
 #include <com/sun/star/text/VertOrientation.hpp>
 #include <com/sun/star/text/WrapTextMode.hpp>
-#include <com/sun/star/drawing/XShape.hpp>
+#include <com/sun/star/text/XTextContent.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+
+#include <cppuhelper/implbase1.hxx>
 #include <rtl/ustrbuf.hxx>
 
+#include <dmapper/DomainMapper.hxx>
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#include <resourcemodel/ResourceModelHelper.hxx>
+
+#include "ConversionHelper.hxx"
+#include "GraphicHelpers.hxx"
+#include "GraphicImport.hxx"
+#include "PropertyMap.hxx"
+#include "WrapPolygonHandler.hxx"
 #include "dmapperLoggers.hxx"
 
 namespace writerfilter {
+
+using resourcemodel::resolveSprmProps;
+
 namespace dmapper
 {
 using namespace ::std;
@@ -219,6 +225,7 @@ public:
     sal_Int32 nWrap;
     bool      bOpaque;
     bool      bContour;
+    drawing::PointSequenceSequence mContourPolyPolygon;
     bool      bIgnoreWRK;
 
     sal_Int32 nLeftMargin;
@@ -281,6 +288,7 @@ public:
         ,nWrap(0)
         ,bOpaque( true )
         ,bContour(false)
+        ,mContourPolyPolygon(0)
         ,bIgnoreWRK(true)
         ,nLeftMargin(319)
         ,nRightMargin(319)
@@ -1004,6 +1012,7 @@ void GraphicImport::lcl_attribute(Id nName, Value & val)
             }
         break;
         case NS_ooxml::LN_CT_WrapTight_wrapText: // 90934;
+        case NS_ooxml::LN_CT_WrapThrough_wrapText:
             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
             m_pImpl->bContour = true;
             //no break;
@@ -1362,12 +1371,12 @@ void GraphicImport::lcl_sprm(Sprm & rSprm)
         case NS_ooxml::LN_CT_Anchor_effectExtent: // 90979;
         case NS_ooxml::LN_EG_WrapType_wrapSquare: // 90945;
         case NS_ooxml::LN_EG_WrapType_wrapTight: // 90946;
+        case NS_ooxml::LN_EG_WrapType_wrapThrough:
         case NS_ooxml::LN_CT_Anchor_docPr: // 90980;
         case NS_ooxml::LN_CT_Anchor_cNvGraphicFramePr: // 90981;
         case NS_ooxml::LN_CT_Anchor_a_graphic: // 90982;
         case NS_ooxml::LN_CT_WrapPath_start: // 90924;
         case NS_ooxml::LN_CT_WrapPath_lineTo: // 90925;
-        case NS_ooxml::LN_CT_WrapTight_wrapPolygon: // 90933;
         case NS_ooxml::LN_graphic_graphic:
         case NS_ooxml::LN_pic_pic:
             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
@@ -1379,6 +1388,17 @@ void GraphicImport::lcl_sprm(Sprm & rSprm)
             }
         }
         break;
+        case NS_ooxml::LN_CT_WrapTight_wrapPolygon:
+        case NS_ooxml::LN_CT_WrapThrough_wrapPolygon:
+            /* WRITERFILTERSTATUS: done: 100, planned: 4, spent: 2 */
+            {
+                WrapPolygonHandler aHandler;
+
+                resolveSprmProps(aHandler, rSprm);
+
+                m_pImpl->mContourPolyPolygon = aHandler.getPolygon();
+            }
+            break;
         case NS_ooxml::LN_CT_Anchor_positionH: // 90976;
         {
             // Use a special handler for the positionning
@@ -1429,10 +1449,6 @@ void GraphicImport::lcl_sprm(Sprm & rSprm)
             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
             m_pImpl->nWrap = text::WrapTextMode_NONE;
         break;
-        case NS_ooxml::LN_EG_WrapType_wrapThrough: // 90947;
-            /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
-            m_pImpl->nWrap = text::WrapTextMode_THROUGHT;
-        break;
         case 0xf010:
         case 0xf011:
             //ignore - doesn't contain useful members
@@ -1620,8 +1636,13 @@ uno::Reference< text::XTextContent > GraphicImport::createGraphicObject( const b
                 xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_BOTTOM_MARGIN ),
                     uno::makeAny(m_pImpl->nBottomMargin));
 
+                uno::Any aContourPolyPolygon;
+                if (m_pImpl->mContourPolyPolygon.getLength() >0)
+                    aContourPolyPolygon <<= m_pImpl->mContourPolyPolygon;
+
                 xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_CONTOUR_POLY_POLYGON),
-                    uno::Any());
+                    aContourPolyPolygon);
+
                 if( m_pImpl->eColorMode == drawing::ColorMode_STANDARD &&
                     m_pImpl->nContrast == -70 &&
                     m_pImpl->nBrightness == 70 )
diff --git a/writerfilter/source/dmapper/makefile.mk b/writerfilter/source/dmapper/makefile.mk
index 300dfb31d959..a4b000411b4e 100755
--- a/writerfilter/source/dmapper/makefile.mk
+++ b/writerfilter/source/dmapper/makefile.mk
@@ -48,13 +48,13 @@ SLOFILES= \
     $(SLO)$/DomainMapperTableManager.obj \
     $(SLO)$/DomainMapper_Impl.obj \
     $(SLO)$/FFDataHandler.obj \
-    $(SLO)$/FormControlHelper.obj \
     $(SLO)$/FontTable.obj \
+    $(SLO)$/FormControlHelper.obj \
     $(SLO)$/GraphicHelpers.obj \
     $(SLO)$/GraphicImport.obj \
-    $(SLO)$/NumberingManager.obj  \
     $(SLO)$/MeasureHandler.obj \
     $(SLO)$/ModelEventListener.obj \
+    $(SLO)$/NumberingManager.obj  \
     $(SLO)$/OLEHandler.obj \
     $(SLO)$/PageBordersHandler.obj \
     $(SLO)$/PropertyIds.obj \
@@ -66,7 +66,9 @@ SLOFILES= \
     $(SLO)$/TDefTableHandler.obj \
     $(SLO)$/TablePropertiesHandler.obj \
     $(SLO)$/TblStylePrHandler.obj \
-    $(SLO)$/ThemeTable.obj 
+    $(SLO)$/ThemeTable.obj \
+    $(SLO)$/WrapPolygonHandler.obj \
+
 
 # --- Targets ----------------------------------
 
-- 
cgit 


From 1fd3d9c3074b80f59279189d1b06f138990d8075 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 17 Aug 2010 16:44:32 +0200
Subject: writerfilter09: Fraction: constructor from Fractions, init, assign,
 inverse, operator=

---
 writerfilter/inc/resourcemodel/Fraction.hxx    |  9 +++++-
 writerfilter/source/resourcemodel/Fraction.cxx | 40 +++++++++++++++++++++++---
 2 files changed, 44 insertions(+), 5 deletions(-)

diff --git a/writerfilter/inc/resourcemodel/Fraction.hxx b/writerfilter/inc/resourcemodel/Fraction.hxx
index 1916bd433651..a038d25c98f1 100644
--- a/writerfilter/inc/resourcemodel/Fraction.hxx
+++ b/writerfilter/inc/resourcemodel/Fraction.hxx
@@ -34,10 +34,17 @@ namespace resourcemodel {
 
 class Fraction
 {
+public:
     explicit Fraction(sal_Int32 nNumerator, sal_Int32 nDenominator = 1);
+    explicit Fraction(const Fraction & a, const Fraction & b);
     virtual ~Fraction();
 
-    Fraction operator=(const Fraction & rFraction) const;
+    void init(sal_Int32 nNumerator, sal_Int32 nDenominator);
+    void assign(const Fraction & rFraction);
+
+    Fraction inverse() const;
+
+    Fraction operator=(const Fraction & rFraction);
     Fraction operator+(const Fraction & rFraction) const;
     Fraction operator-(const Fraction & rFraction) const;
     Fraction operator*(const Fraction & rFraction) const;
diff --git a/writerfilter/source/resourcemodel/Fraction.cxx b/writerfilter/source/resourcemodel/Fraction.cxx
index 2fea20772878..98892a759bfb 100644
--- a/writerfilter/source/resourcemodel/Fraction.cxx
+++ b/writerfilter/source/resourcemodel/Fraction.cxx
@@ -53,7 +53,7 @@ sal_uInt32 gcd(sal_uInt32 a, sal_uInt32 b)
 
         if (a < b)
         {
-            a -= b;
+            b -= a;
         }
         else
         {
@@ -71,19 +71,39 @@ sal_uInt32 gcd(sal_uInt32 a, sal_uInt32 b)
 
 sal_uInt32 lcm(sal_Int32 a, sal_Int32 b)
 {
-    return abs(a * b) / gcd(a, b);
+    return abs(a * b) / gcd(abs(a), abs(b));
 }
 
 Fraction::Fraction(sal_Int32 nNumerator, sal_Int32 nDenominator)
+{
+    init(nNumerator, nDenominator);
+}
+
+Fraction::Fraction(const Fraction & a, const Fraction & b)
+{
+    init(a.mnNumerator * b.mnDenominator, a.mnDenominator * b.mnNumerator);
+}
+
+Fraction::~Fraction()
+{
+}
+
+void Fraction::init(sal_Int32 nNumerator, sal_Int32 nDenominator)
 {
     sal_uInt32 nGCD = gcd(nNumerator, nDenominator);
 
-    mnNumerator = nNumerator / nGCD;
+    mnNumerator = nNumerator/ nGCD;
     mnDenominator = nDenominator / nGCD;
 }
 
-Fraction::~Fraction()
+void Fraction::assign(const Fraction & rFraction)
 {
+    init(rFraction.mnNumerator, rFraction.mnDenominator);
+}
+
+Fraction Fraction::inverse() const
+{
+    return Fraction(mnDenominator, mnNumerator);
 }
 
 Fraction Fraction::operator + (const Fraction & rFraction) const
@@ -105,6 +125,18 @@ Fraction Fraction::operator * (const Fraction & rFraction) const
     return Fraction(mnNumerator * rFraction.mnNumerator, mnDenominator * rFraction.mnDenominator);
 }
 
+Fraction Fraction::operator / (const Fraction & rFraction) const
+{
+    return *this * rFraction.inverse();
+}
+
+Fraction Fraction::operator = (const Fraction & rFraction)
+{
+    assign(rFraction);
+
+    return *this;
+}
+
 Fraction::operator sal_Int32() const
 {
     return mnNumerator / mnDenominator;
-- 
cgit 


From 4548b7649d46d5a3153963bb37c7c3842edce6ae Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 17 Aug 2010 16:46:10 +0200
Subject: writerfilter09: WrapPolygonHandler: use WrapPolygon and
 correctWordWrapPolygon

---
 writerfilter/source/dmapper/GraphicImport.cxx      |  29 +++--
 writerfilter/source/dmapper/WrapPolygonHandler.cxx | 132 ++++++++++++++++++---
 writerfilter/source/dmapper/WrapPolygonHandler.hxx |  35 +++++-
 3 files changed, 169 insertions(+), 27 deletions(-)

diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx
index 6988ac7752c7..39382a009f2b 100644
--- a/writerfilter/source/dmapper/GraphicImport.cxx
+++ b/writerfilter/source/dmapper/GraphicImport.cxx
@@ -225,7 +225,7 @@ public:
     sal_Int32 nWrap;
     bool      bOpaque;
     bool      bContour;
-    drawing::PointSequenceSequence mContourPolyPolygon;
+    WrapPolygon::Pointer_t mpWrapPolygon;
     bool      bIgnoreWRK;
 
     sal_Int32 nLeftMargin;
@@ -288,7 +288,6 @@ public:
         ,nWrap(0)
         ,bOpaque( true )
         ,bContour(false)
-        ,mContourPolyPolygon(0)
         ,bIgnoreWRK(true)
         ,nLeftMargin(319)
         ,nRightMargin(319)
@@ -1396,7 +1395,7 @@ void GraphicImport::lcl_sprm(Sprm & rSprm)
 
                 resolveSprmProps(aHandler, rSprm);
 
-                m_pImpl->mContourPolyPolygon = aHandler.getPolygon();
+                m_pImpl->mpWrapPolygon = aHandler.getPolygon();
             }
             break;
         case NS_ooxml::LN_CT_Anchor_positionH: // 90976;
@@ -1636,13 +1635,6 @@ uno::Reference< text::XTextContent > GraphicImport::createGraphicObject( const b
                 xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_BOTTOM_MARGIN ),
                     uno::makeAny(m_pImpl->nBottomMargin));
 
-                uno::Any aContourPolyPolygon;
-                if (m_pImpl->mContourPolyPolygon.getLength() >0)
-                    aContourPolyPolygon <<= m_pImpl->mContourPolyPolygon;
-
-                xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_CONTOUR_POLY_POLYGON),
-                    aContourPolyPolygon);
-
                 if( m_pImpl->eColorMode == drawing::ColorMode_STANDARD &&
                     m_pImpl->nContrast == -70 &&
                     m_pImpl->nBrightness == 70 )
@@ -1670,16 +1662,31 @@ uno::Reference< text::XTextContent > GraphicImport::createGraphicObject( const b
                     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;
+
+                uno::Any aContourPolyPolygon;
+                if( aGraphicSize.Width && aGraphicSize.Height &&
+                    m_pImpl->mpWrapPolygon.get() != NULL)
+                {
+                    awt::Size aDstSize(m_pImpl->getXSize(), m_pImpl->getYSize());
+                    WrapPolygon::Pointer_t pCorrected = m_pImpl->mpWrapPolygon->correctWordWrapPolygon(aGraphicSize, aDstSize);
+                    aContourPolyPolygon <<= pCorrected->getPointSequenceSequence();
+                }
+
+                xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_CONTOUR_POLY_POLYGON),
+                                                           aContourPolyPolygon);
+
                 if( aGraphicSize.Width && aGraphicSize.Height )
                 {
                     //todo: i71651 graphic size is not provided by the GraphicDescriptor
@@ -1688,9 +1695,11 @@ uno::Reference< text::XTextContent > GraphicImport::createGraphicObject( const b
                     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)
diff --git a/writerfilter/source/dmapper/WrapPolygonHandler.cxx b/writerfilter/source/dmapper/WrapPolygonHandler.cxx
index 14a750388e30..452eb9d66473 100644
--- a/writerfilter/source/dmapper/WrapPolygonHandler.cxx
+++ b/writerfilter/source/dmapper/WrapPolygonHandler.cxx
@@ -40,8 +40,123 @@ using resourcemodel::resolveSprmProps;
 
 namespace dmapper {
 
+WrapPolygon::WrapPolygon()
+{
+}
+
+WrapPolygon::~WrapPolygon()
+{
+}
+
+void WrapPolygon::addPoint(const awt::Point & rPoint)
+{
+    mPoints.push_back(rPoint);
+}
+
+WrapPolygon::Points_t::const_iterator WrapPolygon::begin() const
+{
+    return mPoints.begin();
+}
+
+WrapPolygon::Points_t::const_iterator WrapPolygon::end() const
+{
+    return mPoints.end();
+}
+
+WrapPolygon::Points_t::iterator WrapPolygon::begin()
+{
+    return mPoints.begin();
+}
+
+WrapPolygon::Points_t::iterator WrapPolygon::end()
+{
+    return mPoints.end();
+}
+
+size_t WrapPolygon::size() const
+{
+    return mPoints.size();
+}
+
+WrapPolygon::Pointer_t WrapPolygon::move(const awt::Point & rPoint)
+{
+    WrapPolygon::Pointer_t pResult(new WrapPolygon);
+
+    Points_t::iterator aIt = begin();
+    Points_t::iterator aItEnd = end();
+
+    while (aIt != aItEnd)
+    {
+        awt::Point aPoint(aIt->X + rPoint.X, aIt->Y + rPoint.Y);
+        pResult->addPoint(aPoint);
+        aIt++;
+    }
+
+    return pResult;
+}
+
+WrapPolygon::Pointer_t WrapPolygon::scale(const Fraction & rFractionX, const Fraction & rFractionY)
+{
+    WrapPolygon::Pointer_t pResult(new WrapPolygon);
+
+    Points_t::iterator aIt = begin();
+    Points_t::iterator aItEnd = end();
+
+    while (aIt != aItEnd)
+    {
+        awt::Point aPoint(Fraction(aIt->X) * rFractionX, Fraction(aIt->Y) * rFractionY);
+        pResult->addPoint(aPoint);
+        aIt++;
+    }
+
+    return pResult;
+}
+
+WrapPolygon::Pointer_t WrapPolygon::correctWordWrapPolygon(const awt::Size & rSrcSize, const awt::Size & rDstSize)
+{
+    WrapPolygon::Pointer_t pResult;
+
+    const sal_uInt32 nWrap100Percent = 21600;
+
+    Fraction aMove(nWrap100Percent, rSrcSize.Width);
+    aMove = aMove * Fraction(15, 1);
+    awt::Point aMovePoint(aMove, 0);
+    pResult = move(aMovePoint);
+
+    Fraction aScaleX(nWrap100Percent, Fraction(nWrap100Percent) + aMove);
+    Fraction aScaleY(nWrap100Percent, Fraction(nWrap100Percent) - aMove);
+    pResult = pResult->scale(aScaleX, aScaleY);
+
+    Fraction aScaleDestX(rDstSize.Width, nWrap100Percent);
+    Fraction aScaleDestY(rDstSize.Height, nWrap100Percent);
+    pResult = pResult->scale(aScaleDestX, aScaleDestY);
+
+    return pResult;
+}
+
+drawing::PointSequenceSequence WrapPolygon::getPointSequenceSequence() const
+{
+    drawing::PointSequenceSequence aPolyPolygon(1L);
+    drawing::PointSequence * pPolygon = aPolyPolygon.getArray();
+    pPolygon->realloc(size());
+
+    sal_uInt32 n = 0;
+    Points_t::const_iterator aIt = begin();
+    Points_t::const_iterator aItEnd = end();
+
+    while (aIt != aItEnd)
+    {
+        (*pPolygon)[n] = *aIt;
+        ++n;
+        aIt++;
+    }
+
+    return aPolyPolygon;
+}
+
 WrapPolygonHandler::WrapPolygonHandler()
 : LoggedProperties(dmapper_logger, "WrapPolygonHandler")
+, mpPolygon(new WrapPolygon)
 {
 }
 
@@ -82,7 +197,7 @@ void WrapPolygonHandler::lcl_sprm(Sprm & sprm)
             resolveSprmProps(*this, sprm);
 
             awt::Point aPoint(mnX, mnY);
-            mPoints.push_back(aPoint);
+            mpPolygon->addPoint(aPoint);
         }
         break;
     default:
@@ -93,20 +208,9 @@ void WrapPolygonHandler::lcl_sprm(Sprm & sprm)
     }
 }
 
-drawing::PointSequenceSequence WrapPolygonHandler::getPolygon()
+WrapPolygon::Pointer_t WrapPolygonHandler::getPolygon()
 {
-    drawing::PointSequenceSequence aPolyPolygon(1L);
-    drawing::PointSequence * pPolygon = aPolyPolygon.getArray();
-    pPolygon->realloc(mPoints.size());
-
-    sal_uInt32 n = 0;
-    for (Points_t::const_iterator aIt = mPoints.begin(); aIt != mPoints.end(); aIt++)
-    {
-        (*pPolygon)[n] = *aIt;
-        ++n;
-    }
-
-    return aPolyPolygon;
+    return mpPolygon;
 }
 
 }}
diff --git a/writerfilter/source/dmapper/WrapPolygonHandler.hxx b/writerfilter/source/dmapper/WrapPolygonHandler.hxx
index 5bbeab891859..05161096f81a 100644
--- a/writerfilter/source/dmapper/WrapPolygonHandler.hxx
+++ b/writerfilter/source/dmapper/WrapPolygonHandler.hxx
@@ -30,11 +30,41 @@
 
 #include <com/sun/star/drawing/PointSequenceSequence.hpp>
 #include <resourcemodel/LoggedResources.hxx>
+#include <resourcemodel/Fraction.hxx>
 
 namespace writerfilter {
 namespace dmapper {
 
 using namespace ::com::sun::star;
+using resourcemodel::Fraction;
+
+class WrapPolygon
+{
+public:
+    typedef ::std::deque<awt::Point> Points_t;
+    typedef ::boost::shared_ptr<WrapPolygon> Pointer_t;
+
+private:
+    Points_t mPoints;
+
+public:
+    WrapPolygon();
+    virtual ~WrapPolygon();
+
+    void addPoint(const awt::Point & rPoint);
+
+    Points_t::const_iterator begin() const;
+    Points_t::const_iterator end() const;
+    Points_t::iterator begin();
+    Points_t::iterator end();
+
+    size_t size() const;
+
+    WrapPolygon::Pointer_t move(const awt::Point & rMove);
+    WrapPolygon::Pointer_t scale(const Fraction & rFractionX, const Fraction & rFractionY);
+    WrapPolygon::Pointer_t correctWordWrapPolygon(const awt::Size & rSrcSize, const awt::Size & rDstSize);
+    drawing::PointSequenceSequence getPointSequenceSequence() const;
+};
 
 class WrapPolygonHandler : public LoggedProperties
 {
@@ -42,11 +72,10 @@ public:
     WrapPolygonHandler();
     virtual ~WrapPolygonHandler();
 
-    drawing::PointSequenceSequence getPolygon();
+    WrapPolygon::Pointer_t getPolygon();
 
 private:
-    typedef ::std::deque<awt::Point> Points_t;
-    Points_t mPoints;
+    WrapPolygon::Pointer_t mpPolygon;
 
     sal_uInt32 mnX;
     sal_uInt32 mnY;
-- 
cgit 


From 3fbaee30ee7832d79b02f21f6f1a14a70e735bd9 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 17 Aug 2010 17:31:32 +0200
Subject: writerfilter09: handle 'wrap tight' and 'wrap through' differently

---
 writerfilter/source/dmapper/GraphicImport.cxx | 58 ++++++++++++++++++---------
 writerfilter/source/dmapper/GraphicImport.hxx |  2 +
 2 files changed, 41 insertions(+), 19 deletions(-)

diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx
index 39382a009f2b..6bbfcbd68665 100644
--- a/writerfilter/source/dmapper/GraphicImport.cxx
+++ b/writerfilter/source/dmapper/GraphicImport.cxx
@@ -225,6 +225,7 @@ public:
     sal_Int32 nWrap;
     bool      bOpaque;
     bool      bContour;
+    bool      bContourOutside;
     WrapPolygon::Pointer_t mpWrapPolygon;
     bool      bIgnoreWRK;
 
@@ -288,6 +289,7 @@ public:
         ,nWrap(0)
         ,bOpaque( true )
         ,bContour(false)
+        ,bContourOutside(true)
         ,bIgnoreWRK(true)
         ,nLeftMargin(319)
         ,nRightMargin(319)
@@ -365,6 +367,27 @@ GraphicImport::~GraphicImport()
 {
     delete m_pImpl;
 }
+
+void GraphicImport::handleWrapTextValue(sal_uInt32 nVal)
+{
+    switch (nVal)
+    {
+    case NS_ooxml::LN_Value_wordprocessingDrawing_ST_WrapText_bothSides: // 90920;
+        m_pImpl->nWrap = text::WrapTextMode_PARALLEL;
+        break;
+    case NS_ooxml::LN_Value_wordprocessingDrawing_ST_WrapText_left: // 90921;
+        m_pImpl->nWrap = text::WrapTextMode_LEFT;
+        break;
+    case NS_ooxml::LN_Value_wordprocessingDrawing_ST_WrapText_right: // 90922;
+        m_pImpl->nWrap = text::WrapTextMode_RIGHT;
+        break;
+    case NS_ooxml::LN_Value_wordprocessingDrawing_ST_WrapText_largest: // 90923;
+        m_pImpl->nWrap = text::WrapTextMode_DYNAMIC;
+        break;
+    default:;
+    }
+}
+
 /*-- 01.11.2006 09:45:01---------------------------------------------------
 
   -----------------------------------------------------------------------*/
@@ -1011,29 +1034,26 @@ void GraphicImport::lcl_attribute(Id nName, Value & val)
             }
         break;
         case NS_ooxml::LN_CT_WrapTight_wrapText: // 90934;
+            /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+            m_pImpl->bContour = true;
+            m_pImpl->bContourOutside = true;
+
+            handleWrapTextValue(val.getInt());
+
+            break;
         case NS_ooxml::LN_CT_WrapThrough_wrapText:
             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
             m_pImpl->bContour = true;
-            //no break;
+            m_pImpl->bContourOutside = false;
+
+            handleWrapTextValue(val.getInt());
+
+            break;
         case NS_ooxml::LN_CT_WrapSquare_wrapText: //90928;
             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
-            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;
+
+            handleWrapTextValue(val.getInt());
+            break;
         case NS_ooxml::LN_shape:
             /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
             {
@@ -1625,7 +1645,7 @@ uno::Reference< text::XTextContent > GraphicImport::createGraphicObject( const b
                 xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_SURROUND_CONTOUR ),
                     uno::makeAny(m_pImpl->bContour));
                 xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_CONTOUR_OUTSIDE ),
-                    uno::makeAny(true));
+                    uno::makeAny(m_pImpl->bContourOutside));
                 xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_LEFT_MARGIN ),
                     uno::makeAny(m_pImpl->nLeftMargin));
                 xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_RIGHT_MARGIN ),
diff --git a/writerfilter/source/dmapper/GraphicImport.hxx b/writerfilter/source/dmapper/GraphicImport.hxx
index 8ca6b18d5d55..87e99ce975b6 100644
--- a/writerfilter/source/dmapper/GraphicImport.hxx
+++ b/writerfilter/source/dmapper/GraphicImport.hxx
@@ -122,6 +122,8 @@ public:
     virtual void lcl_info(const string & info);
     virtual void lcl_startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
     virtual void lcl_endShape( );
+
+    void handleWrapTextValue(sal_uInt32 nVal);
 };
 
 typedef boost::shared_ptr< GraphicImport >          GraphicImportPtr;
-- 
cgit 


From eb51984cee2d08c943680983ecdc5fede61a4c94 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 18 Aug 2010 14:42:28 +0200
Subject: writerfilter09: handle CT_DocDefaults as defaults, too

---
 writerfilter/source/dmapper/StyleSheetTable.cxx | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index 4f8478c80904..86d02a026542 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -549,7 +549,7 @@ void StyleSheetTable::lcl_sprm(Sprm & rSprm)
         break;
         case NS_ooxml::LN_CT_Style_tblPr: //contains table properties
         case NS_ooxml::LN_CT_Style_tblStylePr: //contains  to table properties
-        case NS_ooxml::LN_CT_DocDefaults_rPrDefault:
+
         case NS_ooxml::LN_CT_TblPrBase_tblInd: //table properties - at least width value and type
         case NS_ooxml::LN_EG_RPrBase_rFonts: //table fonts
         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
@@ -579,6 +579,7 @@ void StyleSheetTable::lcl_sprm(Sprm & rSprm)
             break;
         }
         case NS_ooxml::LN_CT_PPrDefault_pPr:
+        case NS_ooxml::LN_CT_DocDefaults_pPrDefault:
         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
             m_pImpl->m_rDMapper.PushStyleSheetProperties( m_pImpl->m_pDefaultParaProps );
             m_pImpl->m_rDMapper.sprm( rSprm );
@@ -586,6 +587,7 @@ void StyleSheetTable::lcl_sprm(Sprm & rSprm)
             applyDefaults( true );
         break;
         case NS_ooxml::LN_CT_RPrDefault_rPr:
+        case NS_ooxml::LN_CT_DocDefaults_rPrDefault:
         /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
             m_pImpl->m_rDMapper.PushStyleSheetProperties( m_pImpl->m_pDefaultCharProps );
             m_pImpl->m_rDMapper.sprm( rSprm );
@@ -626,6 +628,7 @@ void StyleSheetTable::lcl_sprm(Sprm & rSprm)
                     pTEntry->m_nColBandSize = nIntValue;
             }
         }
+        break;
         case NS_ooxml::LN_CT_TblPrBase_tblCellMar:
             //no cell margins in styles
         break;
-- 
cgit 


From 99c348b9cdbe13be097789a187f05e9ff9e92e67 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Mon, 23 Aug 2010 10:46:33 +0200
Subject: #i114011# added license headers for NumberingManager

---
 writerfilter/source/dmapper/NumberingManager.cxx | 26 ++++++++++++++++++++++++
 writerfilter/source/dmapper/NumberingManager.hxx | 26 ++++++++++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/writerfilter/source/dmapper/NumberingManager.cxx b/writerfilter/source/dmapper/NumberingManager.cxx
index 5c08d17a3367..9e66e1a467c3 100644
--- a/writerfilter/source/dmapper/NumberingManager.cxx
+++ b/writerfilter/source/dmapper/NumberingManager.cxx
@@ -1,3 +1,29 @@
+/*************************************************************************
+ *
+ * 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 "NumberingManager.hxx"
 #include "StyleSheetTable.hxx"
diff --git a/writerfilter/source/dmapper/NumberingManager.hxx b/writerfilter/source/dmapper/NumberingManager.hxx
index dbe05e1b20ac..3285bc85f416 100644
--- a/writerfilter/source/dmapper/NumberingManager.hxx
+++ b/writerfilter/source/dmapper/NumberingManager.hxx
@@ -1,3 +1,29 @@
+/*************************************************************************
+ *
+ * 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_NUMBERINGMANAGER_HXX
 #define INCLUDED_NUMBERINGMANAGER_HXX
 
-- 
cgit 


From 2de8e26ed7284f7b5e5526778d478ff36aab19eb Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 8 Sep 2010 13:02:09 +0200
Subject: annotated model.xml with tags and used tags to calculate left efforts

---
 writerfilter/source/ooxml/analyzemodel.xsl |   1 +
 writerfilter/source/ooxml/effort.xsl       |  59 +--
 writerfilter/source/ooxml/model.xml        | 666 ++++++++++++++---------------
 3 files changed, 367 insertions(+), 359 deletions(-)

diff --git a/writerfilter/source/ooxml/analyzemodel.xsl b/writerfilter/source/ooxml/analyzemodel.xsl
index d887a9a178a6..3cce9795a947 100644
--- a/writerfilter/source/ooxml/analyzemodel.xsl
+++ b/writerfilter/source/ooxml/analyzemodel.xsl
@@ -98,6 +98,7 @@
 				</xsl:for-each>
 			</xsl:when>
 		</xsl:choose>
+        <xsl:copy-of select="@tag"/>
 	</xsl:for-each>
 </xsl:template>
 </xsl:stylesheet>
\ No newline at end of file
diff --git a/writerfilter/source/ooxml/effort.xsl b/writerfilter/source/ooxml/effort.xsl
index 47f278a63f4f..3dfc102e0780 100644
--- a/writerfilter/source/ooxml/effort.xsl
+++ b/writerfilter/source/ooxml/effort.xsl
@@ -7,33 +7,40 @@
 <xsl:output method="text"/>
     
 <xsl:template match="/">
-    <xsl:text>Namespace,Define,Name,Done,Planned,qname-count&#xa;</xsl:text>
-    <xsl:for-each select="/todo/attribute|/todo/element">
-        <xsl:for-each select=".//status">
-                <xsl:for-each select="ancestor::attribute|ancestor::element">
-                    <xsl:value-of select="@namespace"/>
-                    <xsl:text>,</xsl:text>
-                    <xsl:value-of select="@define"/>
-                    <xsl:text>,</xsl:text>
-                    <xsl:value-of select="@name"/>
-                    <xsl:text>,</xsl:text>
-                </xsl:for-each>
-                <xsl:value-of select="@done"/>
-                <xsl:text>,</xsl:text>
-                <xsl:value-of select="@planned"/>
-                <xsl:text>,</xsl:text>
-                <xsl:value-of select="@qname-count"/>
-                <xsl:text>&#xa;</xsl:text>
-        </xsl:for-each>
-        <xsl:if test="not(.//status)">
-                <xsl:value-of select="@namespace"/>
-                <xsl:text>,</xsl:text>
-                <xsl:value-of select="@define"/>
-                <xsl:text>,</xsl:text>
-                <xsl:value-of select="@name"/>
-                <xsl:text>,0,0.5,1&#xa;</xsl:text>
-        </xsl:if>
+  <xsl:text>Namespace,Define,Name,Tag,Done,Planned,qname-count&#xa;</xsl:text>
+  <xsl:for-each select="/todo/attribute|/todo/element">
+    <xsl:variable name="namespace" select="@namespace"/>
+    <xsl:variable name="define" select="@define"/>
+    <xsl:variable name="name" select="@name"/>
+    <xsl:variable name="tag" select="@tag"/>
+
+    <xsl:for-each select=".//status">
+      <xsl:value-of select="$namespace"/>
+      <xsl:text>,</xsl:text>
+      <xsl:value-of select="$define"/>
+      <xsl:text>,</xsl:text>
+      <xsl:value-of select="$name"/>
+      <xsl:text>,</xsl:text>
+      <xsl:value-of select="$tag"/>
+      <xsl:text>,</xsl:text>
+      <xsl:value-of select="@done"/>
+      <xsl:text>,</xsl:text>
+      <xsl:value-of select="@planned"/>
+      <xsl:text>,</xsl:text>
+      <xsl:value-of select="@qname-count"/>
+      <xsl:text>&#xa;</xsl:text>
     </xsl:for-each>
+    <xsl:if test="not(.//status)">
+      <xsl:value-of select="$namespace"/>
+      <xsl:text>,</xsl:text>
+      <xsl:value-of select="$define"/>
+      <xsl:text>,</xsl:text>
+      <xsl:value-of select="$name"/>
+      <xsl:text>,</xsl:text>
+      <xsl:value-of select="$tag"/>
+      <xsl:text>,0,0.5,1&#xa;</xsl:text>
+    </xsl:if>
+  </xsl:for-each>
 </xsl:template>
 
 </xsl:stylesheet>
\ No newline at end of file
diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
index f78c0be0b2f5..3aa5741ad576 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -191,11 +191,11 @@
       </define>
     </grammar>
     <resource name="CT_OfficeStyleSheet" resource="Table" tokenid="ooxml:THEMETABLE"/>
-    <resource name="theme" resource="Stream">
+    <resource name="theme" resource="Stream" tag="theme">
       <element name="theme" tokenid="ooxml:THEMETABLE"/>
     </resource>
-    <resource name="themeOverride" resource="Stream"/>
-    <resource name="themeManager" resource="Stream"/>
+    <resource name="themeOverride" resource="Stream" tag="theme"/>
+    <resource name="themeManager" resource="Stream" tag="theme"/>
   </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">
@@ -1114,7 +1114,7 @@
       <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">
+    <resource name="CT_ColorScheme" resource="Properties" tag="theme">
       <element name="dk1" tokenid="ooxml:CT_ColorScheme_dk1"/>
       <element name="lt1" tokenid="ooxml:CT_ColorScheme_lt1"/>
       <element name="dk2" tokenid="ooxml:CT_ColorScheme_dk2"/>
@@ -1130,39 +1130,39 @@
       <element name="extLst" tokenid="ooxml:CT_ColorScheme_extLst"/>
       <attribute name="name" tokenid="ooxml:CT_ColorScheme_name"/>
     </resource>
-    <resource name="CT_SupplementalFont" resource="Properties">
+    <resource name="CT_SupplementalFont" resource="Properties" tag="theme">
       <attribute name="script" tokenid="ooxml:CT_SupplementalFont_script"/>
       <attribute name="typeface" tokenid="ooxml:CT_SupplementalFont_typeface"/>
     </resource>
-    <resource name="CT_FontCollection" resource="Properties">
+    <resource name="CT_FontCollection" resource="Properties" tag="theme">
       <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">
+    <resource name="CT_FontScheme" resource="Properties" tag="theme">
       <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">
+    <resource name="CT_FillStyleList" resource="Properties" tag="theme"/>
+    <resource name="CT_LineStyleList" resource="Properties" tag="theme">
       <element name="ln" tokenid="ooxml:CT_LineStyleList_ln"/>
     </resource>
-    <resource name="CT_EffectStyleList" resource="Properties">
+    <resource name="CT_EffectStyleList" resource="Properties" tag="theme">
       <element name="effectStyle" tokenid="ooxml:CT_EffectStyleList_effectStyle"/>
     </resource>
-    <resource name="CT_BackgroundFillStyleList" resource="Properties"/>
-    <resource name="CT_StyleMatrix" resource="Properties">
+    <resource name="CT_BackgroundFillStyleList" resource="Properties" tag="theme"/>
+    <resource name="CT_StyleMatrix" resource="Properties" tag="theme">
       <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">
+    <resource name="CT_BaseStyles" resource="Properties" tag="theme">
       <element name="clrScheme" tokenid="ooxml:CT_BaseStyles_clrScheme"/>
       <element name="fontScheme" tokenid="ooxml:CT_BaseStyles_fontScheme"/>
       <element name="fmtScheme" tokenid="ooxml:CT_BaseStyles_fmtScheme"/>
@@ -1541,7 +1541,7 @@
     <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">
+    <resource name="CT_TextFont" resource="Properties" tag="character">
       <attribute name="typeface" tokenid="ooxml:CT_TextFont_typeface"/>
       <attribute name="panose" tokenid="ooxml:CT_TextFont_panose"/>
       <attribute name="pitchFamily" tokenid="ooxml:CT_TextFont_pitchFamily"/>
@@ -2738,7 +2738,7 @@
       <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="CT_SolidColorFillProperties" resource="Properties" tag="shape"/>
     <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>
@@ -2750,7 +2750,7 @@
       <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">
+    <resource name="CT_GradientStop" resource="Properties" tag="shape">
       <attribute name="pos" tokenid="ooxml:CT_GradientStop_pos"/>
     </resource>
     <resource name="CT_TileInfoProperties" resource="Properties">
@@ -2761,10 +2761,10 @@
       <attribute name="flip" tokenid="ooxml:CT_TileInfoProperties_flip"/>
       <attribute name="algn" tokenid="ooxml:CT_TileInfoProperties_algn"/>
     </resource>
-    <resource name="CT_StretchInfoProperties" resource="Properties">
+    <resource name="CT_StretchInfoProperties" resource="Properties" tag="shape">
       <element name="fillRect" tokenid="ooxml:CT_StretchInfoProperties_fillRect"/>
     </resource>
-    <resource name="EG_FillModeProperties" resource="Properties">
+    <resource name="EG_FillModeProperties" resource="Properties" tag="shape">
       <element name="tile" tokenid="ooxml:EG_FillModeProperties_tile"/>
       <element name="stretch" tokenid="ooxml:EG_FillModeProperties_stretch"/>
     </resource>
@@ -2775,7 +2775,7 @@
       <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">
+    <resource name="CT_Blip" resource="Properties" tag="shape">
       <element name="alphaBiLevel" tokenid="ooxml:CT_Blip_alphaBiLevel"/>
       <element name="alphaCeiling" tokenid="ooxml:CT_Blip_alphaCeiling"/>
       <element name="alphaFloor" tokenid="ooxml:CT_Blip_alphaFloor"/>
@@ -2796,7 +2796,7 @@
       <element name="extLst" tokenid="ooxml:CT_Blip_extLst"/>
       <attribute name="cstate" tokenid="ooxml:CT_Blip_cstate"/>
     </resource>
-    <resource name="CT_BlipFillProperties" resource="Properties">
+    <resource name="CT_BlipFillProperties" resource="Properties" tag="shape">
       <element name="blip" tokenid="ooxml:CT_BlipFillProperties_blip"/>
       <element name="srcRect" tokenid="ooxml:CT_BlipFillProperties_srcRect"/>
       <attribute name="dpi" tokenid="ooxml:CT_BlipFillProperties_dpi"/>
@@ -2865,7 +2865,7 @@
       <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">
+    <resource name="EG_Effect" resource="Properties" tag="shape">
       <element name="cont" tokenid="ooxml:EG_Effect_cont"/>
       <element name="effect" tokenid="ooxml:EG_Effect_effect"/>
       <element name="alphaBiLevel" tokenid="ooxml:EG_Effect_alphaBiLevel"/>
@@ -2901,7 +2901,7 @@
       <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">
+    <resource name="CT_EffectContainer" resource="Properties" tag="shape">
       <attribute name="type" tokenid="ooxml:CT_EffectContainer_type"/>
       <attribute name="name" tokenid="ooxml:CT_EffectContainer_name"/>
     </resource>
@@ -3197,12 +3197,12 @@
       <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">
+    <resource name="CT_LineEndProperties" resource="Properties" tag="shape">
       <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">
+    <resource name="EG_LineFillProperties" resource="Properties" tag="shape">
       <element name="noFill" tokenid="ooxml:EG_LineFillProperties_noFill"/>
       <element name="solidFill" tokenid="ooxml:EG_LineFillProperties_solidFill"/>
       <element name="gradFill" tokenid="ooxml:EG_LineFillProperties_gradFill"/>
@@ -3237,7 +3237,7 @@
       <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">
+    <resource name="CT_LineProperties" resource="Properties" tag="shape">
       <element name="headEnd" tokenid="ooxml:CT_LineProperties_headEnd"/>
       <element name="tailEnd" tokenid="ooxml:CT_LineProperties_tailEnd"/>
       <element name="extLst" tokenid="ooxml:CT_LineProperties_extLst"/>
@@ -3331,7 +3331,7 @@
         </optional>
       </define>
     </grammar>
-    <resource name="CT_ShapeProperties" resource="Properties">
+    <resource name="CT_ShapeProperties" resource="Properties" tag="shape">
       <element name="xfrm" tokenid="ooxml:CT_ShapeProperties_xfrm"/>
       <element name="ln" tokenid="ooxml:CT_ShapeProperties_ln"/>
       <element name="scene3d" tokenid="ooxml:CT_ShapeProperties_scene3d"/>
@@ -4429,41 +4429,41 @@
       <attribute name="val" tokenid="ooxml:CT_Angle_val" action="setValue"/>
       <action name="start" action="setDefaultIntegerValue"/>
     </resource>
-    <resource name="CT_PositiveFixedAngle" resource="Value" generated="yes">
+    <resource name="CT_PositiveFixedAngle" resource="Value" generated="yes" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_PositiveFixedAngle_val" action="setValue"/>
     </resource>
     <resource name="ST_Percentage" resource="Integer" generated="yes"/>
-    <resource name="CT_Percentage" resource="Value" generated="yes">
+    <resource name="CT_Percentage" resource="Value" generated="yes" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_Percentage_val" action="setValue"/>
       <action name="start" action="setDefaultIntegerValue"/>
     </resource>
-    <resource name="CT_PositivePercentage" resource="Value" generated="yes">
+    <resource name="CT_PositivePercentage" resource="Value" generated="yes" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_PositivePercentage_val" action="setValue"/>
     </resource>
-    <resource name="CT_FixedPercentage" resource="Value" generated="yes">
+    <resource name="CT_FixedPercentage" resource="Value" generated="yes" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_FixedPercentage_val" action="setValue"/>
     </resource>
-    <resource name="CT_PositiveFixedPercentage" resource="Value" generated="yes">
+    <resource name="CT_PositiveFixedPercentage" resource="Value" generated="yes" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_PositiveFixedPercentage_val" action="setValue"/>
     </resource>
-    <resource name="CT_Point2D" resource="Properties">
+    <resource name="CT_Point2D" resource="Properties" tag="shape">
       <attribute name="x" tokenid="ooxml:CT_Point2D_x"/>
       <attribute name="y" tokenid="ooxml:CT_Point2D_y"/>
     </resource>
-    <resource name="CT_PositiveSize2D" resource="Properties">
+    <resource name="CT_PositiveSize2D" resource="Properties" tag="shape">
       <attribute name="cx" tokenid="ooxml:CT_PositiveSize2D_cx"/>
       <attribute name="cy" tokenid="ooxml:CT_PositiveSize2D_cy"/>
     </resource>
-    <resource name="CT_ScRgbColor" resource="Properties">
+    <resource name="CT_ScRgbColor" resource="Properties" tag="shape">
       <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">
+    <resource name="CT_SRgbColor" resource="Properties" tag="shape">
       <attribute name="val" tokenid="ooxml:CT_SRgbColor_val"/>
     </resource>
-    <resource name="CT_HslColor" resource="Properties">
+    <resource name="CT_HslColor" resource="Properties" tag="shape">
       <attribute name="hue" tokenid="ooxml:CT_HslColor_hue"/>
       <attribute name="sat" tokenid="ooxml:CT_HslColor_sat"/>
       <attribute name="lum" tokenid="ooxml:CT_HslColor_lum"/>
@@ -4500,7 +4500,7 @@
       <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">
+    <resource name="CT_SystemColor" resource="Properties" tag="shape">
       <attribute name="val" tokenid="ooxml:CT_SystemColor_val"/>
       <attribute name="lastClr" tokenid="ooxml:CT_SytemColor_lastClr"/>
     </resource>
@@ -4523,7 +4523,7 @@
       <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">
+    <resource name="CT_SchemeColor" resource="Properties" tag="shape">
       <attribute name="val" tokenid="ooxml:CT_SchemeColor_val"/>
     </resource>
     <resource name="ST_PresetColorVal" resource="List">
@@ -4668,10 +4668,10 @@
       <value tokenid="0xffff00">yellow</value>
       <value tokenid="0x9acd32">yellowGreen</value>
     </resource>
-    <resource name="CT_PresetColor" resource="Properties">
+    <resource name="CT_PresetColor" resource="Properties" tag="shape">
       <attribute name="val" tokenid="ooxml:CT_PresetColor_val"/>
     </resource>
-    <resource name="CT_Transform2D" resource="Properties">
+    <resource name="CT_Transform2D" resource="Properties" tag="shape">
       <element name="off" tokenid="ooxml:CT_Transform2D_off"/>
       <element name="ext" tokenid="ooxml:CT_Transform2D_ext"/>
       <attribute name="rot" tokenid="ooxml:CT_Transform2D_rot"/>
@@ -4690,7 +4690,7 @@
       <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">
+    <resource name="EG_ColorChoice" resource="Properties" tag="shape">
       <element name="scrgbClr" tokenid="ooxml:EG_ColorChoice_scrgbClr"/>
       <element name="srgbClr" tokenid="ooxml:EG_ColorChoice_srgbClr"/>
       <element name="hslClr" tokenid="ooxml:EG_ColorChoice_hslClr"/>
@@ -4698,8 +4698,8 @@
       <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="CT_Color" resource="Properties" tag="shape"/>
+    <resource name="CT_ColorMRU" resource="Properties" tag="shape"/>
     <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>
@@ -4713,7 +4713,7 @@
       <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">
+    <resource xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" name="AG_Blob" resource="Properties" tag="shape">
       <attribute name="r:embed" tokenid="ooxml:AG_Blob_r_embed"/>
       <attribute name="r:link" tokenid="ooxml:AG_Blob_r_link"/>
     </resource>
@@ -5100,7 +5100,7 @@
         </optional>
       </define>
     </grammar>
-    <resource name="CT_GraphicalObjectFrameLocking" resource="Properties">
+    <resource name="CT_GraphicalObjectFrameLocking" resource="Properties" tag="shape">
       <element name="extLst" tokenid="ooxml:CT_GraphicalObjectFrameLocking_extLst"/>
       <attribute name="noGrp" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noGrp"/>
       <attribute name="noDrilldown" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noDrilldown"/>
@@ -5109,7 +5109,7 @@
       <attribute name="noMove" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noMove"/>
       <attribute name="noResize" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noResize"/>
     </resource>
-    <resource name="CT_NonVisualDrawingProps" resource="Properties">
+    <resource name="CT_NonVisualDrawingProps" resource="Properties" tag="shape">
       <element name="hlinkClick" tokenid="ooxml:CT_NonVisualDrawingProps_hlinkClick"/>
       <element name="hlinkHover" tokenid="ooxml:CT_NonVisualDrawingProps_hlinkHover"/>
       <element name="extLst" tokenid="ooxml:CT_NonVisualDrawingProps_extLst"/>
@@ -5118,12 +5118,12 @@
       <attribute name="descr" tokenid="ooxml:CT_NonVisualDrawingProps_descr"/>
       <attribute name="hidden" tokenid="ooxml:CT_NonVisualDrawingProps_hidden"/>
     </resource>
-    <resource name="CT_NonVisualPictureProperties" resource="Properties">
+    <resource name="CT_NonVisualPictureProperties" resource="Properties" tag="shape">
       <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">
+    <resource name="CT_NonVisualGraphicFrameProperties" resource="Properties" tag="shape">
       <element name="graphicFrameLocks" tokenid="ooxml:CT_NonVisualGraphicFrameProperties_graphicFrameLocks"/>
       <element name="extLst" tokenid="ooxml:CT_NonVisualGraphicFrameProperties_extLst"/>
     </resource>
@@ -5159,14 +5159,14 @@
         </element>
       </define>
     </grammar>
-    <resource name="CT_GraphicalObjectData" resource="Properties">
+    <resource name="CT_GraphicalObjectData" resource="Properties" tag="shape">
       <element name="pic" tokenid="ooxml:CT_GraphicalObjectData_pic"/>
       <attribute name="uri" tokenid="ooxml:CT_GraphicalObjectData_uri"/>
     </resource>
-    <resource name="CT_GraphicalObject" resource="Properties">
+    <resource name="CT_GraphicalObject" resource="Properties" tag="shape">
       <element name="graphicData" tokenid="ooxml:CT_GraphicalObject_graphicData"/>
     </resource>
-    <resource name="graphic" resource="Properties">
+    <resource name="graphic" resource="Properties" tag="shape">
       <element name="graphic" tokenid="ooxml:graphic_graphic"/>
     </resource>
   </namespace>
@@ -6271,7 +6271,7 @@
     </resource>
     <resource name="ST_GeomGuideName" resource="String" generated="yes"/>
     <resource name="ST_GeomGuideFormula" resource="String" generated="yes"/>
-    <resource name="CT_GeomGuideList" resource="Properties">
+    <resource name="CT_GeomGuideList" resource="Properties" tag="shape">
       <element name="gd" tokenid="ooxml:CT_GeomGuideList_gd"/>
     </resource>
     <resource name="ST_PathFillMode" resource="List" generated="yes">
@@ -6282,11 +6282,11 @@
       <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">
+    <resource name="CT_PresetGeometry2D" resource="Properties" tag="shape">
       <element name="avLst" tokenid="ooxml:CT_PresetGeometry2D_avLst"/>
       <attribute name="prst" tokenid="ooxml:CT_PresetGeometry2D_prst"/>
     </resource>
-    <resource name="CT_CustomGeometry2D" resource="Properties">
+    <resource name="CT_CustomGeometry2D" resource="Properties" tag="shape">
       <element name="avLst" tokenid="ooxml:CT_CustomGeometry2D_avLst"/>
       <element name="gdLst" tokenid="ooxml:CT_CustomGeometry2D_gdLst"/>
       <element name="ahLst" tokenid="ooxml:CT_CustomGeometry2D_ahLst"/>
@@ -6294,7 +6294,7 @@
       <element name="rect" tokenid="ooxml:CT_CustomGeometry2D_rect"/>
       <element name="pathLst" tokenid="ooxml:CT_CustomGeometry2D_pathLst"/>
     </resource>
-    <resource name="EG_Geometry" resource="Properties">
+    <resource name="EG_Geometry" resource="Properties" tag="shape">
       <element name="custGeom" tokenid="ooxml:EG_Geometry_custGeom"/>
       <element name="prstGeom" tokenid="ooxml:EG_Geometry_prstGeom"/>
     </resource>
@@ -6764,14 +6764,14 @@
         </element>
       </define>
     </grammar>
-    <resource name="CT_EffectExtent" resource="Properties">
+    <resource name="CT_EffectExtent" resource="Properties" tag="shape">
       <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">
+    <resource xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="CT_Inline" resource="Properties" tag="shape">
       <element name="extent" tokenid="ooxml:CT_Inline_extent"/>
       <element name="effectExtent" tokenid="ooxml:CT_Inline_effectExtent"/>
       <element name="docPr" tokenid="ooxml:CT_Inline_docPr"/>
@@ -6788,13 +6788,13 @@
       <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">
+    <resource name="CT_WrapPath" resource="Properties" tag="shape">
       <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">
+    <resource name="CT_WrapNone" resource="Properties" tag="shape"/>
+    <resource name="CT_WrapSquare" resource="Properties" tag="shape">
       <element name="effectExtent" tokenid="ooxml:CT_WrapSquare_effectExtent"/>
       <attribute name="wrapText" tokenid="ooxml:CT_WrapSquare_wrapText"/>
       <attribute name="distT" tokenid="ooxml:CT_WrapSquare_distT"/>
@@ -6802,34 +6802,34 @@
       <attribute name="distL" tokenid="ooxml:CT_WrapSquare_distL"/>
       <attribute name="distR" tokenid="ooxml:CT_WrapSquare_distR"/>
     </resource>
-    <resource name="CT_WrapTight" resource="Properties">
+    <resource name="CT_WrapTight" resource="Properties" tag="shape">
       <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">
+    <resource name="CT_WrapThrough" resource="Properties" tag="shape">
       <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">
+    <resource name="CT_WrapTopBottom" resource="Properties" tag="shape">
       <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">
+    <resource name="EG_WrapType" resource="Properties" tag="shape">
       <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="CT_PositionOffset" resource="Value"/>
+    <resource name="CT_PositionOffset" resource="Value" tag="shape"/>
     <resource name="ST_PositionOffset" resource="Integer" generated="yes"/>
-    <resource name="CT_AlignH" resource="Value"/>
-    <resource name="ST_AlignH" resource="List" generated="yes">
+    <resource name="CT_AlignH" resource="Value" tag="shape"/>
+    <resource name="ST_AlignH" resource="List" generated="yes" tag="shape">
       <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>
@@ -6846,12 +6846,12 @@
       <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">
+    <resource name="CT_PosH" resource="Properties" tag="shape">
       <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="Value"/>
+    <resource name="CT_AlignV" resource="Value" tag="shape"/>
     <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>
@@ -6869,12 +6869,12 @@
       <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">
+    <resource name="CT_PosV" resource="Properties" tag="shape">
       <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">
+    <resource xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="CT_Anchor" resource="Properties" tag="shape">
       <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"/>
@@ -6895,10 +6895,10 @@
       <attribute name="hidden" tokenid="ooxml:CT_Anchor_hidden"/>
       <attribute name="allowOverlap" tokenid="ooxml:CT_Anchor_allowOverlap"/>
     </resource>
-    <resource name="inline" resource="Properties">
+    <resource name="inline" resource="Properties" tag="shape">
       <element name="inline" tokenid="ooxml:inline_inline"/>
     </resource>
-    <resource name="anchor" resource="Properties">
+    <resource name="anchor" resource="Properties" tag="shape">
       <element name="anchor" tokenid="ooxml:anchor_anchor"/>
     </resource>
   </namespace>
@@ -8202,27 +8202,27 @@
       </define>
     </grammar>
     <resource name="ST_Integer255" resource="Integer" generated="yes"/>
-    <resource name="CT_Integer255" resource="Value" generated="yes">
+    <resource name="CT_Integer255" resource="Value" generated="yes" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_Integer255_val" action="setValue"/>
       <action name="start" action="setDefaultIntegerValue"/>
     </resource>
     <resource name="ST_Integer2" resource="Integer" generated="yes"/>
-    <resource name="CT_Integer2" resource="Value" generated="yes">
+    <resource name="CT_Integer2" resource="Value" generated="yes" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_Integer2_val" action="setValue"/>
       <action name="start" action="setDefaultIntegerValue"/>
     </resource>
     <resource name="ST_SpacingRule" resource="Integer" generated="yes"/>
-    <resource name="CT_SpacingRule" resource="Value" generated="yes">
+    <resource name="CT_SpacingRule" resource="Value" generated="yes" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_SpacingRule_val" action="setValue"/>
       <action name="start" action="setDefaultIntegerValue"/>
     </resource>
     <resource name="ST_UnSignedInteger" resource="Integer" generated="yes"/>
-    <resource name="CT_UnSignedInteger" resource="Value" generated="yes">
+    <resource name="CT_UnSignedInteger" resource="Value" generated="yes" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_UnSignedInteger_val" action="setValue"/>
       <action name="start" action="setDefaultIntegerValue"/>
     </resource>
     <resource name="ST_Char" resource="String" generated="yes"/>
-    <resource name="CT_Char" resource="Value" generated="yes">
+    <resource name="CT_Char" resource="Value" generated="yes" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_Char_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
@@ -8230,12 +8230,12 @@
       <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="Value">
+    <resource name="CT_OnOff" resource="Value" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_OnOff_val" action="setValue"/>
       <action name="start" action="setDefaultBooleanValue"/>
     </resource>
     <resource name="ST_String" resource="String" generated="yes"/>
-    <resource name="CT_String" resource="Value" generated="yes">
+    <resource name="CT_String" resource="Value" generated="yes" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_String_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
@@ -8244,7 +8244,7 @@
       <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="CT_XAlign" resource="Value" generated="yes">
+    <resource name="CT_XAlign" resource="Value" generated="yes" tag="math">
       <attribute name="val" tokenid="ooxml:CT_XAlign_val" action="setValue"/>
     </resource>
     <resource name="ST_YAlign" resource="List" generated="yes">
@@ -8252,14 +8252,14 @@
       <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="CT_YAlign" resource="Value" generated="yes">
+    <resource name="CT_YAlign" resource="Value" generated="yes" tag="math">
       <attribute name="val" tokenid="ooxml:CT_YAlign_val" action="setValue"/>
     </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="CT_Shp" resource="Value" generated="yes">
+    <resource name="CT_Shp" resource="Value" generated="yes" tag="math">
       <attribute name="val" tokenid="ooxml:CT_Shp_val" action="setValue"/>
     </resource>
     <resource name="ST_FType" resource="List" generated="yes">
@@ -8268,21 +8268,21 @@
       <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="CT_FType" resource="Value" generated="yes">
+    <resource name="CT_FType" resource="Value" generated="yes" tag="math">
       <attribute name="val" tokenid="ooxml:CT_FType_val" action="setValue"/>
     </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="CT_LimLoc" resource="Value" generated="yes">
+    <resource name="CT_LimLoc" resource="Value" generated="yes" tag="math">
       <attribute name="val" tokenid="ooxml:CT_LimLoc_val" action="setValue"/>
     </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="CT_TopBot" resource="Value" generated="yes">
+    <resource name="CT_TopBot" resource="Value" generated="yes" tag="math">
       <attribute name="val" tokenid="ooxml:CT_TopBot_val" action="setValue"/>
     </resource>
     <resource name="ST_Script" resource="List" generated="yes">
@@ -8293,7 +8293,7 @@
       <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="CT_Script" resource="Value" generated="yes">
+    <resource name="CT_Script" resource="Value" generated="yes" tag="math">
       <attribute name="val" tokenid="ooxml:CT_Script_val" action="setValue"/>
     </resource>
     <resource name="ST_Style" resource="List">
@@ -8302,7 +8302,7 @@
       <value tokenid="ooxml:Value_ST_Style_i">i</value>
       <value tokenid="ooxml:Value_ST_Style_p">p</value>
     </resource>
-    <resource name="CT_Style" resource="Value">
+    <resource name="CT_Style" resource="Value" tag="math">
       <attribute name="val" tokenid="ooxml:CT_Style_val" action="setValue"/>
     </resource>
     <resource name="ST_Jc" resource="List" generated="yes">
@@ -8311,11 +8311,11 @@
       <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="CT_OMathJc" resource="Value" generated="yes">
+    <resource name="CT_OMathJc" resource="Value" generated="yes" tag="math">
       <attribute name="val" tokenid="ooxml:CT_OMathJc_val" action="setValue"/>
     </resource>
     <resource name="ST_TwipsMeasure" resource="Integer" generated="yes"/>
-    <resource name="CT_TwipsMeasure" resource="Value" generated="yes">
+    <resource name="CT_TwipsMeasure" resource="Value" generated="yes" tag="math">
       <attribute name="val" tokenid="ooxml:CT_TwipsMeasure_val" action="setValue"/>
       <action name="start" action="setDefaultIntegerValue"/>
     </resource>
@@ -8324,7 +8324,7 @@
       <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="CT_BreakBin" resource="Value" generated="yes">
+    <resource name="CT_BreakBin" resource="Value" generated="yes" tag="math">
       <attribute name="val" tokenid="ooxml:CT_BreakBin_val" action="setValue"/>
     </resource>
     <resource name="ST_BreakBinSub" resource="List" generated="yes">
@@ -8332,7 +8332,7 @@
       <value name="mp" tokenid="ooxml:Value_math_ST_BreakBinSub_mp">-+</value>
       <value name="pm" tokenid="ooxml:Value_math_ST_BreakBinSub_pm">+-</value>
     </resource>
-    <resource name="CT_BreakBinSub" resource="Value" generated="yes">
+    <resource name="CT_BreakBinSub" resource="Value" generated="yes" tag="math">
       <attribute name="val" tokenid="ooxml:CT_BreakBinSub_val" action="setValue"/>
     </resource>
   </namespace>
@@ -8418,16 +8418,16 @@
         </element>
       </define>
     </grammar>
-    <resource name="CT_PictureNonVisual" resource="Properties">
+    <resource name="CT_PictureNonVisual" resource="Properties" tag="shape">
       <element name="cNvPr" tokenid="ooxml:CT_PictureNonVisual_cNvPr"/>
       <element name="cNvPicPr" tokenid="ooxml:CT_PictureNonVisual_cNvPicPr"/>
     </resource>
-    <resource name="CT_Picture" resource="Shape">
+    <resource name="CT_Picture" resource="Shape" tag="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">
+    <resource name="pic" resource="Properties" tag="shape">
       <element name="pic" tokenid="ooxml:pic_pic"/>
     </resource>
   </namespace>
@@ -11939,10 +11939,10 @@
         </zeroOrMore>
       </define>
     </grammar>
-    <resource name="OLEObject" resource="Properties">
+    <resource name="OLEObject" resource="Properties" tag="ole">
       <element name="OLEObject" tokenid="ooxml:OLEObject_OLEObject"/>
     </resource>
-    <resource xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" name="CT_OLEObject" resource="Properties">
+    <resource xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" name="CT_OLEObject" resource="Properties" tag="ole">
       <element name="LinkType" tokenid="ooxml:CT_OLEObject_LinkType"/>
       <element name="LockedField" tokenid="ooxml:CT_OLEObject_LockedField"/>
       <element name="FieldCodes" tokenid="ooxml:CT_OLEObject_FieldCodes"/>
@@ -12320,10 +12320,10 @@
         </list>
       </define>
     </grammar>
-    <resource name="wrap" resource="Properties">
+    <resource name="wrap" resource="Properties" tag="shape">
       <element name="wrap" tokenid="ooxml:wrap_wrap"/>
     </resource>
-    <resource name="CT_Wrap" resource="Properties">
+    <resource name="CT_Wrap" resource="Properties" tag="shape">
       <attribute name="type" tokenid="ooxml:CT_Wrap_type"/>
       <attribute name="side" tokenid="ooxml:CT_Wrap_side"/>
       <attribute name="anchorx" tokenid="ooxml:CT_Wrap_anchorx"/>
@@ -21048,77 +21048,77 @@
         </zeroOrMore>
       </define>
     </grammar>
-    <resource name="CT_Empty" resource="Stream">
+    <resource name="CT_Empty" resource="Stream" tag="content">
       <action name="end" tokenid="ooxml:EG_RunInnerContent_noBreakHyphen" action="noBreakHyphen"/>
       <action name="end" tokenid="ooxml:EG_RunInnerContent_softHyphen" action="softHyphen"/>
       <action name="end" tokenid="ooxml:EG_RunInnerContent_cr" action="cr"/>
     </resource>
     <resource name="ST_OnOff" resource="Boolean"/>
-    <resource name="CT_OnOff" resource="Value">
+    <resource name="CT_OnOff" resource="Value" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_OnOff_val" action="setValue"/>
       <action name="start" action="setDefaultBooleanValue"/>
     </resource>
     <resource name="ST_LongHexNumber" resource="Hex"/>
-    <resource name="CT_LongHexNumber" resource="Value">
+    <resource name="CT_LongHexNumber" resource="Value" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_LongHexNumber_val" action="setValue"/>
       <action name="start" action="setDefaultHexValue"/>
     </resource>
     <resource name="ST_ShortHexNumber" resource="Hex"/>
-    <resource name="CT_ShortHexNumber" resource="Value">
+    <resource name="CT_ShortHexNumber" resource="Value" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_ShortHexNumber_val" action="setValue"/>
       <action name="start" action="setDefaultHexValue"/>
     </resource>
     <resource name="ST_UcharHexNumber" resource="Hex"/>
-    <resource name="CT_UcharHexNumber" resource="Value">
+    <resource name="CT_UcharHexNumber" resource="Value" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_UcharHexNumber_val" action="setValue"/>
       <action name="start" action="setDefaultHexValue"/>
     </resource>
     <resource name="ST_DecimalNumber" resource="Integer"/>
-    <resource name="CT_DecimalNumber" resource="Value">
+    <resource name="CT_DecimalNumber" resource="Value" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_DecimalNumber_val" action="setValue"/>
       <action name="start" action="setDefaultIntegerValue"/>
     </resource>
     <resource name="ST_UnsignedDecimalNumber" resource="Integer" generated="yes"/>
     <resource name="ST_TwipsMeasure" resource="Integer"/>
-    <resource name="CT_TwipsMeasure" resource="Value">
+    <resource name="CT_TwipsMeasure" resource="Value" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_TwipsMeasure_val" action="setValue"/>
       <action name="start" action="setDefaultIntegerValue"/>
     </resource>
     <resource name="ST_SignedTwipsMeasure" resource="Integer"/>
-    <resource name="CT_SignedTwipsMeasure" resource="Value">
+    <resource name="CT_SignedTwipsMeasure" resource="Value" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_SignedTwipsMeasure_val" action="setValue"/>
       <action name="start" action="setDefaultIntegerValue"/>
     </resource>
     <resource name="ST_PixelsMeasure" resource="Integer" generated="yes"/>
-    <resource name="CT_PixelsMeasure" resource="Value">
+    <resource name="CT_PixelsMeasure" resource="Value" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_PixelsMeasure_val" action="setValue"/>
       <action name="start" action="setDefaultIntegerValue"/>
     </resource>
     <resource name="ST_HpsMeasure" resource="Integer"/>
-    <resource name="CT_HpsMeasure" resource="Value">
+    <resource name="CT_HpsMeasure" resource="Value" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_HpsMeasure_val" action="setValue"/>
       <action name="start" action="setDefaultIntegerValue"/>
     </resource>
     <resource name="ST_SignedHpsMeasure" resource="Integer"/>
-    <resource name="CT_SignedHpsMeasure" resource="Value">
+    <resource name="CT_SignedHpsMeasure" resource="Value" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_SignedHpsMeasure_val" action="setValue"/>
       <action name="start" action="setDefaultIntegerValue"/>
     </resource>
     <resource name="ST_DateTime" resource="String" generated="yes"/>
     <resource name="ST_MacroName" resource="String" generated="yes"/>
-    <resource name="CT_MacroName" resource="Value" generated="yes">
+    <resource name="CT_MacroName" resource="Value" generated="yes" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_MacroName_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
     <resource name="ST_EighthPointMeasure" resource="Integer"/>
     <resource name="ST_PointMeasure" resource="Integer"/>
     <resource name="ST_String" resource="String"/>
-    <resource name="CT_String" resource="Value">
+    <resource name="CT_String" resource="Value" tag="attribute" >
       <attribute name="val" tokenid="ooxml:CT_String_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
     <resource name="ST_TextScale" resource="Integer"/>
-    <resource name="CT_TextScale" resource="Value">
+    <resource name="CT_TextScale" resource="Value" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_TextScale_val" action="setValue"/>
       <action name="start" action="setDefaultIntegerValue"/>
     </resource>
@@ -21141,7 +21141,7 @@
       <value tokenid="16">lightGray</value>
       <value tokenid="0">none</value>
     </resource>
-    <resource name="CT_Highlight" resource="Value">
+    <resource name="CT_Highlight" resource="Value" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_Highlight_val" action="setValue"/>
     </resource>
     <resource name="ST_HexColorAuto" resource="List">
@@ -21149,7 +21149,7 @@
     </resource>
     <resource name="ST_HexColorRGB" resource="Hex"/>
     <resource name="ST_HexColor" resource="Hex"/>
-    <resource name="CT_Color" resource="Properties">
+    <resource name="CT_Color" resource="Properties" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_Color_val"/>
       <attribute name="themeColor" tokenid="ooxml:CT_Color_themeColor"/>
       <attribute name="themeTint" tokenid="ooxml:CT_Color_themeTint"/>
@@ -21157,12 +21157,12 @@
     </resource>
     <resource name="ST_LangCode" resource="Hex" generated="yes"/>
     <resource name="ST_Lang" resource="String"/>
-    <resource name="CT_Lang" resource="Value">
+    <resource name="CT_Lang" resource="Value" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_Lang_val" action="setValue"/>
       <action name="start" action="setDefaultIntegerValue"/>
     </resource>
     <resource name="ST_Guid" resource="String"/>
-    <resource name="CT_Guid" resource="Value">
+    <resource name="CT_Guid" resource="Value" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_Guid_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
@@ -21186,7 +21186,7 @@
       <value tokenid="43">wavyDouble</value>
       <value tokenid="0">none</value>
     </resource>
-    <resource name="CT_Underline" resource="Properties">
+    <resource name="CT_Underline" resource="Properties" tag="character">
       <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"/>
@@ -21202,7 +21202,7 @@
       <value tokenid="5">antsRed</value>
       <value tokenid="6">shimmer</value>
     </resource>
-    <resource name="CT_TextEffect" resource="Value">
+    <resource name="CT_TextEffect" resource="Value" tag="character">
       <attribute name="val" tokenid="ooxml:CT_TextEffect_val" action="setValue"/>
     </resource>
     <resource name="ST_Border" resource="List">
@@ -21398,7 +21398,7 @@
       <value tokenid="226">zigZag</value>
       <value tokenid="227">zigZagStitch</value>
     </resource>
-    <resource name="CT_Border" resource="Properties">
+    <resource name="CT_Border" resource="Properties" tag="attribute">
       <attribute name="val" tokenid="rtf:BRCTYPE"/>
       <attribute name="color" tokenid="ooxml:CT_Border_color"/>
       <attribute name="themeColor" tokenid="ooxml:CT_Border_themeColor"/>
@@ -21449,7 +21449,7 @@
       <value tokenid="13">pct90</value>
       <value tokenid="60">pct95</value>
     </resource>
-    <resource name="CT_Shd" resource="Properties">
+    <resource name="CT_Shd" resource="Properties" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_Shd_val"/>
       <attribute name="color" tokenid="ooxml:CT_Shd_color"/>
       <attribute name="themeColor" tokenid="ooxml:CT_Shd_themeColor"/>
@@ -21460,16 +21460,16 @@
       <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">
+    <resource name="ST_VerticalAlignRun" resource="List" generated="yes" tag="character">
       <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="Value" generated="yes">
+    <resource name="CT_VerticalAlignRun" resource="Value" generated="yes" tag="character">
       <attribute name="val" tokenid="ooxml:CT_VerticalAlignRun_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
-    <resource name="CT_FitText" resource="Properties">
+    <resource name="CT_FitText" resource="Properties" tag="paragraph">
       <attribute name="val" tokenid="ooxml:CT_FitText_val"/>
       <attribute name="id" tokenid="ooxml:CT_FitText_id"/>
     </resource>
@@ -21480,10 +21480,10 @@
       <value tokenid="3">circle</value>
       <value tokenid="4">underDot</value>
     </resource>
-    <resource name="CT_Em" resource="Value">
+    <resource name="CT_Em" resource="Value" tag="character">
       <attribute name="val" tokenid="ooxml:CT_Em_val" action="setValue"/>
     </resource>
-    <resource name="CT_Language" resource="Properties">
+    <resource name="CT_Language" resource="Properties" tag="character">
       <attribute name="val" tokenid="ooxml:CT_Language_val"/>
       <attribute name="eastAsia" tokenid="ooxml:CT_Language_eastAsia"/>
       <attribute name="bidi" tokenid="ooxml:CT_Language_bidi"/>
@@ -21495,7 +21495,7 @@
       <value tokenid="3">angle</value>
       <value tokenid="4">curly</value>
     </resource>
-    <resource name="CT_EastAsianLayout" resource="Properties">
+    <resource name="CT_EastAsianLayout" resource="Properties" tag="character">
       <attribute name="id" tokenid="ooxml:CT_EastAsianLayout_id"/>
       <attribute name="combine" tokenid="ooxml:CT_EastAsianLayout_combine"/>
       <attribute name="combineBrackets" tokenid="ooxml:CT_EastAsianLayout_combineBrackets"/>
@@ -21545,7 +21545,7 @@
       <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">
+    <resource name="CT_FramePr" resource="Properties" tag="frame">
       <kind name="paragraph"/>
       <attribute name="dropCap" tokenid="ooxml:CT_FramePr_dropCap"/>
       <attribute name="lines" tokenid="ooxml:CT_FramePr_lines"/>
@@ -21580,7 +21580,7 @@
       <value tokenid="4">heavy</value>
       <value tokenid="ooxml:Value_ST_TabTlc_middleDot">middleDot</value>
     </resource>
-    <resource name="CT_TabStop" resource="Properties">
+    <resource name="CT_TabStop" resource="Properties" tag="paragraph">
       <attribute name="val" tokenid="ooxml:CT_TabStop_val"/>
       <attribute name="leader" tokenid="ooxml:CT_TabStop_leader"/>
       <attribute name="pos" tokenid="ooxml:CT_TabStop_pos"/>
@@ -21590,7 +21590,7 @@
       <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">
+    <resource name="CT_Spacing" resource="Properties" tag="paragraüh">
       <attribute name="before" tokenid="ooxml:CT_Spacing_before"/>
       <attribute name="beforeLines" tokenid="ooxml:CT_Spacing_beforeLines"/>
       <attribute name="beforeAutospacing" tokenid="ooxml:CT_Spacing_beforeAutospacing"/>
@@ -21600,7 +21600,7 @@
       <attribute name="line" tokenid="ooxml:CT_Spacing_line"/>
       <attribute name="lineRule" tokenid="ooxml:CT_Spacing_lineRule"/>
     </resource>
-    <resource name="CT_Ind" resource="Properties">
+    <resource name="CT_Ind" resource="Properties" tag="paragraph">
       <attribute name="left" tokenid="ooxml:CT_Ind_left"/>
       <attribute name="leftChars" tokenid="ooxml:CT_Ind_leftChars"/>
       <attribute name="right" tokenid="ooxml:CT_Ind_right"/>
@@ -21622,7 +21622,7 @@
       <value tokenid="ooxml:Value_ST_Jc_lowKashida">lowKashida</value>
       <value tokenid="ooxml:Value_ST_Jc_thaiDistribute">thaiDistribute</value>
     </resource>
-    <resource name="CT_Jc" resource="Value">
+    <resource name="CT_Jc" resource="Value" tag="character">
       <attribute name="val" tokenid="ooxml:CT_Jc_val" action="setValue"/>
     </resource>
     <resource name="ST_View" resource="List" generated="yes">
@@ -21633,7 +21633,7 @@
       <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">
+    <resource name="CT_View" resource="Properties" tag="settings">
       <attribute name="val" tokenid="ooxml:CT_View_val"/>
     </resource>
     <resource name="ST_Zoom" resource="List" generated="yes">
@@ -21642,11 +21642,11 @@
       <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">
+    <resource name="CT_Zoom" resource="Properties" tag="settings">
       <attribute name="val" tokenid="ooxml:CT_Zoom_val"/>
       <attribute name="percent" tokenid="ooxml:CT_Zoom_percent"/>
     </resource>
-    <resource name="CT_WritingStyle" resource="Properties">
+    <resource name="CT_WritingStyle" resource="Properties" tag="settings">
       <attribute name="lang" tokenid="ooxml:CT_WritingStyle_lang"/>
       <attribute name="vendorID" tokenid="ooxml:CT_WritingStyle_vendorID"/>
       <attribute name="dllVersion" tokenid="ooxml:CT_WritingStyle_dllVersion"/>
@@ -21658,7 +21658,7 @@
       <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">
+    <resource name="CT_Proof" resource="Properties" tag="redline">
       <attribute name="spelling" tokenid="ooxml:CT_Proof_spelling"/>
       <attribute name="grammar" tokenid="ooxml:CT_Proof_grammar"/>
     </resource>
@@ -21667,7 +21667,7 @@
       <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">
+    <resource name="CT_DocType" resource="Properties" tag="document">
       <attribute name="val" tokenid="ooxml:CT_DocType_val"/>
     </resource>
     <resource name="ST_DocProtect" resource="List" generated="yes">
@@ -21701,7 +21701,7 @@
       <attribute name="hash" tokenid="ooxml:AG_Password_hash"/>
       <attribute name="salt" tokenid="ooxml:AG_Password_salt"/>
     </resource>
-    <resource name="CT_DocProtect" resource="Properties">
+    <resource name="CT_DocProtect" resource="Properties" tag="document">
       <attribute name="edit" tokenid="ooxml:CT_DocProtect_edit"/>
       <attribute name="formatting" tokenid="ooxml:CT_DocProtect_formatting"/>
       <attribute name="enforcement" tokenid="ooxml:CT_DocProtect_enforcement"/>
@@ -21714,7 +21714,7 @@
       <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="Value" generated="yes">
+    <resource name="CT_MailMergeDocType" resource="Value" generated="yes" tag="mailmerge">
       <attribute name="val" tokenid="ooxml:CT_MailMergeDocType_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
@@ -21726,7 +21726,7 @@
       <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="Value" generated="yes">
+    <resource name="CT_MailMergeDataType" resource="Value" generated="yes" tag="mailmerge">
       <attribute name="val" tokenid="ooxml:CT_MailMergeDataType_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
@@ -21736,7 +21736,7 @@
       <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="Value" generated="yes">
+    <resource name="CT_MailMergeDest" resource="Value" generated="yes" tag="mailmerge">
       <attribute name="val" tokenid="ooxml:CT_MailMergeDest_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
@@ -21744,18 +21744,18 @@
       <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="Value" generated="yes">
+    <resource name="CT_MailMergeOdsoFMDFieldType" resource="Value" generated="yes" tag="mailmerge">
       <attribute name="val" tokenid="ooxml:CT_MailMergeOdsoFMDFieldType_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
-    <resource name="CT_TrackChangesView" resource="Properties">
+    <resource name="CT_TrackChangesView" resource="Properties" tag="redline">
       <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">
+    <resource name="CT_Kinsoku" resource="Properties" tag="character">
       <attribute name="lang" tokenid="ooxml:CT_Kinsoku_lang"/>
       <attribute name="val" tokenid="ooxml:CT_Kinsoku_val"/>
     </resource>
@@ -21767,7 +21767,7 @@
       <value tokenid="5">tbRlV</value>
       <value tokenid="ooxml:Value_ST_TextDirection_tbLrV">tbLrV</value>
     </resource>
-    <resource name="CT_TextDirection" resource="Value">
+    <resource name="CT_TextDirection" resource="Value" tag="paragraph">
       <attribute name="val" tokenid="ooxml:CT_TextDirection_val" action="setValue"/>
     </resource>
     <resource name="ST_TextAlignment" resource="List" generated="yes">
@@ -21777,7 +21777,7 @@
       <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="CT_TextAlignment" resource="Value" generated="yes">
+    <resource name="CT_TextAlignment" resource="Value" generated="yes" tag="paragraph">
       <attribute name="val" tokenid="ooxml:CT_TextAlignment_val" action="setValue"/>
     </resource>
     <resource name="ST_DisplacedByCustomXml" resource="List" generated="yes">
@@ -21788,80 +21788,80 @@
       <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">
+    <resource name="CT_Markup" resource="Properties" tag="redline">
       <attribute name="id" tokenid="ooxml:CT_Markup_id"/>
     </resource>
-    <resource name="CT_TrackChange" resource="Properties">
+    <resource name="CT_TrackChange" resource="Properties" tag="redline">
       <attribute name="author" tokenid="ooxml:CT_TrackChange_author"/>
       <attribute name="date" tokenid="ooxml:CT_TrackChange_date"/>
     </resource>
-    <resource name="CT_CellMergeTrackChange" resource="Properties">
+    <resource name="CT_CellMergeTrackChange" resource="Properties" tag="redline">
       <attribute name="vMerge" tokenid="ooxml:CT_CellMergeTrackChange_vMerge"/>
       <attribute name="vMergeOrig" tokenid="ooxml:CT_CellMergeTrackChange_vMergeOrig"/>
     </resource>
-    <resource name="CT_TrackChangeRange" resource="Properties">
+    <resource name="CT_TrackChangeRange" resource="Properties" tag="redline">
       <attribute name="displacedByCustomXml" tokenid="ooxml:CT_TrackChangeRange_displacedByCustomXml"/>
     </resource>
-    <resource name="CT_MarkupRange" resource="Properties">
+    <resource name="CT_MarkupRange" resource="Properties" tag="redline">
       <attribute name="displacedByCustomXml" tokenid="ooxml:CT_MarkupRange_displacedByCustomXml"/>
     </resource>
-    <resource name="CT_MarkupRangeBookmark" resource="Properties">
+    <resource name="CT_MarkupRangeBookmark" resource="Properties" tag="redline">
       <attribute name="id" tokenid="rtf:IBKL"/>
     </resource>
-    <resource name="CT_BookmarkRange" resource="Properties">
+    <resource name="CT_BookmarkRange" resource="Properties" tag="reference">
       <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">
+    <resource name="CT_Bookmark" resource="Properties" tag="reference">
       <type name="Bookmark"/>
       <attribute name="name" tokenid="rtf:BOOKMARKNAME"/>
     </resource>
-    <resource name="CT_MoveBookmark" resource="Properties">
+    <resource name="CT_MoveBookmark" resource="Properties" tag="reference">
       <attribute name="author" tokenid="ooxml:CT_MoveBookmark_author"/>
       <attribute name="date" tokenid="ooxml:CT_MoveBookmark_date"/>
     </resource>
-    <resource name="CT_Comment" resource="XNote">
+    <resource name="CT_Comment" resource="XNote" tag="content">
       <attribute name="id" action="checkId"/>
       <attribute name="initials" tokenid="ooxml:CT_Comment_initials"/>
     </resource>
-    <resource name="CT_TrackChangeNumbering" resource="Properties">
+    <resource name="CT_TrackChangeNumbering" resource="Properties" tag="numbering">
       <attribute name="original" tokenid="ooxml:CT_TrackChangeNumbering_original"/>
     </resource>
-    <resource name="CT_TblPrExChange" resource="Properties">
+    <resource name="CT_TblPrExChange" resource="Properties" tag="table">
       <element name="tblPrEx" tokenid="ooxml:CT_TblPrExChange_tblPrEx"/>
     </resource>
-    <resource name="CT_TcPrChange" resource="Properties">
+    <resource name="CT_TcPrChange" resource="Properties" tag="table">
       <element name="tcPr" tokenid="ooxml:CT_TcPrChange_tcPr"/>
     </resource>
-    <resource name="CT_TrPrChange" resource="Properties">
+    <resource name="CT_TrPrChange" resource="Properties" tag="table">
       <element name="trPr" tokenid="ooxml:CT_TrPrChange_trPr"/>
     </resource>
-    <resource name="CT_TblGridChange" resource="Properties">
+    <resource name="CT_TblGridChange" resource="Properties" tag="table">
       <element name="tblGrid" tokenid="ooxml:CT_TblGridChange_tblGrid"/>
     </resource>
-    <resource name="CT_TblPrChange" resource="Properties">
+    <resource name="CT_TblPrChange" resource="Properties" tag="table">
       <element name="tblPr" tokenid="ooxml:CT_TblPrChange_tblPr"/>
     </resource>
-    <resource name="CT_SectPrChange" resource="Properties">
+    <resource name="CT_SectPrChange" resource="Properties" tag="section">
       <element name="sectPr" tokenid="ooxml:CT_SectPrChange_sectPr"/>
     </resource>
-    <resource name="CT_PPrChange" resource="Properties">
+    <resource name="CT_PPrChange" resource="Properties" tag="paragraph">
       <element name="pPr" tokenid="ooxml:CT_PPrChange_pPr"/>
     </resource>
-    <resource name="CT_RPrChange" resource="Properties">
+    <resource name="CT_RPrChange" resource="Properties" tag="character">
       <element name="rPr" tokenid="ooxml:CT_RPrChange_rPr"/>
     </resource>
-    <resource name="CT_ParaRPrChange" resource="Properties">
+    <resource name="CT_ParaRPrChange" resource="Properties" tag="character">
       <element name="rPr" tokenid="ooxml:CT_ParaRPrChange_rPr"/>
     </resource>
-    <resource name="CT_RunTrackChange" resource="Stream">
+    <resource name="CT_RunTrackChange" resource="Stream" tag="redlines">
       <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="EG_RangeMarkupElements" resource="Properties">
+    <resource name="EG_RangeMarkupElements" resource="Properties" tag="redlines">
       <element name="bookmarkStart" tokenid="ooxml:EG_RangeMarkupElements_bookmarkStart"/>
       <element name="bookmarkEnd" tokenid="ooxml:EG_RangeMarkupElements_bookmarkEnd"/>
       <element name="moveFromRangeStart" tokenid="ooxml:EG_RangeMarkupElements_moveFromRangeStart"/>
@@ -21879,14 +21879,14 @@
       <element name="customXmlMoveToRangeStart" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeStart"/>
       <element name="customXmlMoveToRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeEnd"/>
     </resource>
-    <resource name="CT_NumPr" resource="Properties">
+    <resource name="CT_NumPr" resource="Properties" tag="numbering">
       <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">
+    <resource name="CT_PBdr" resource="Properties" tag="paragraph">
       <kind name="paragraph"/>
       <element name="top" tokenid="sprm:PBrcTop"/>
       <element name="left" tokenid="sprm:PBrcLeft"/>
@@ -21895,7 +21895,7 @@
       <element name="between" tokenid="sprm:PBrcBetween"/>
       <element name="bar" tokenid="sprm:PBrcBar"/>
     </resource>
-    <resource name="CT_Tabs" resource="Properties">
+    <resource name="CT_Tabs" resource="Properties" tag="paragraph">
       <element name="tab" tokenid="ooxml:CT_Tabs_tab"/>
     </resource>
     <resource name="ST_TextboxTightWrap" resource="List" generated="yes">
@@ -21905,11 +21905,11 @@
       <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="Value" generated="yes">
+    <resource name="CT_TextboxTightWrap" resource="Value" generated="yes" tag="textbox">
       <attribute name="val" tokenid="ooxml:CT_TextboxTightWrap_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
-    <resource name="CT_PPrBase" resource="Properties">
+    <resource name="CT_PPrBase" resource="Properties" tag="paragraph">
       <kind name="paragraph"/>
       <element name="pStyle" tokenid="ooxml:CT_PPrBase_pStyle"/>
       <element name="keepNext" tokenid="sprm:PFKeepFollow"/>
@@ -21945,12 +21945,12 @@
       <element name="divId" tokenid="ooxml:CT_PPrBase_divId"/>
       <element name="cnfStyle" tokenid="ooxml:CT_PPrBase_cnfStyle"/>
     </resource>
-    <resource name="CT_PPr" resource="Properties">
+    <resource name="CT_PPr" resource="Properties" tag="paragraph">
       <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">
+    <resource xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" name="CT_Control" resource="Properties" tag="control">
       <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"/>
@@ -21964,24 +21964,24 @@
     <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">
+    <resource name="CT_PictureBase" resource="Properties" tag="shape"/>
+    <resource name="CT_Object" resource="Shape" tag="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">
+    <resource name="CT_Picture" resource="Shape" tag="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">
+    <resource name="CT_Drawing" resource="Properties" tag="shape">
       <action name="end" action="handlePicture"/>
     </resource>
-    <resource name="CT_SimpleField" resource="Stream">
+    <resource name="CT_SimpleField" resource="Stream" tag="field">
       <element name="fldData" tokenid="ooxml:CT_SimpleField_fldData"/>
       <attribute name="instr" tokenid="ooxml:CT_SimpleField_instr"/>
       <attribute name="fldLock" tokenid="ooxml:CT_SimpleField_fldLock"/>
@@ -22013,15 +22013,15 @@
       <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="Value" generated="yes">
+    <resource name="CT_FFTextType" resource="Value" generated="yes" tag="field">
       <attribute name="val" tokenid="ooxml:CT_FFTextType_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
-    <resource name="CT_FFName" resource="Value" generated="yes">
+    <resource name="CT_FFName" resource="Value" generated="yes" tag="field">
       <attribute name="val" tokenid="ooxml:CT_FFName_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
-    <resource name="CT_FldChar" resource="Stream">
+    <resource name="CT_FldChar" resource="Stream" tag="field">
       <element name="fldData" tokenid="ooxml:CT_FldChar_fldData"/>
       <element name="ffData" tokenid="ooxml:CT_FldChar_ffData"/>
       <element name="numberingChange" tokenid="ooxml:CT_FldChar_numberingChange"/>
@@ -22038,7 +22038,7 @@
         <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">
+    <resource xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" name="CT_Hyperlink" resource="Stream" tag="link">
       <attribute name="tgtFrame" tokenid="ooxml:CT_Hyperlink_tgtFrame"/>
       <attribute name="tooltip" tokenid="ooxml:CT_Hyperlink_tooltip"/>
       <attribute name="docLocation" tokenid="ooxml:CT_Hyperlink_docLocation"/>
@@ -22050,7 +22050,7 @@
       <action name="start" action="fieldsep"/>
       <action name="end" action="fieldend"/>
     </resource>
-    <resource name="CT_FFData" resource="Properties">
+    <resource name="CT_FFData" resource="Properties" tag="field">
       <element name="name" tokenid="ooxml:CT_FFData_name"/>
       <element name="enabled" tokenid="ooxml:CT_FFData_enabled"/>
       <element name="calcOnExit" tokenid="ooxml:CT_FFData_calcOnExit"/>
@@ -22064,39 +22064,39 @@
       <action name="end" action="propagateCharacterPropertiesAsSet" sendtokenid="ooxml:ffdata"/>
       <action name="end" action="clearProps"/>
     </resource>
-    <resource name="CT_FFHelpText" resource="Properties">
+    <resource name="CT_FFHelpText" resource="Properties" tag="field">
       <attribute name="type" tokenid="ooxml:CT_FFHelpText_type"/>
       <attribute name="val" tokenid="ooxml:CT_FFHelpText_val"/>
     </resource>
-    <resource name="CT_FFStatusText" resource="Properties">
+    <resource name="CT_FFStatusText" resource="Properties" tag="field">
       <attribute name="type" tokenid="ooxml:CT_FFStatusText_type"/>
       <attribute name="val" tokenid="ooxml:CT_FFStatusText_val"/>
     </resource>
-    <resource name="CT_FFCheckBox" resource="Properties">
+    <resource name="CT_FFCheckBox" resource="Properties" tag="field">
       <element name="size" tokenid="ooxml:CT_FFCheckBox_size"/>
       <element name="sizeAuto" tokenid="ooxml:CT_FFCheckBox_sizeAuto"/>
       <element name="default" tokenid="ooxml:CT_FFCheckBox_default"/>
       <element name="checked" tokenid="ooxml:CT_FFCheckBox_checked"/>
     </resource>
-    <resource name="CT_FFDDList" resource="Properties">
+    <resource name="CT_FFDDList" resource="Properties" tag="field">
       <element name="result" tokenid="ooxml:CT_FFDDList_result"/>
       <element name="default" tokenid="ooxml:CT_FFDDList_default"/>
       <element name="listEntry" tokenid="ooxml:CT_FFDDList_listEntry"/>
     </resource>
-    <resource name="CT_FFTextInput" resource="Properties">
+    <resource name="CT_FFTextInput" resource="Properties" tag="field">
       <element name="type" tokenid="ooxml:CT_FFTextInput_type"/>
       <element name="default" tokenid="ooxml:CT_FFTextInput_default"/>
       <element name="maxLength" tokenid="ooxml:CT_FFTextInput_maxLength"/>
       <element name="format" tokenid="ooxml:CT_FFTextInput_format"/>
     </resource>
-    <resource name="ST_SectionMark" resource="List">
+    <resource name="ST_SectionMark" resource="List" tag="section">
       <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="Value">
+    <resource name="CT_SectType" resource="Value" tag="section">
       <attribute name="val" tokenid="ooxml:CT_SectType_val" action="setValue"/>
     </resource>
     <resource name="ST_NumberFormat" resource="List">
@@ -22165,13 +22165,13 @@
       <value tokenid="0">portrait</value>
       <value tokenid="1">landscape</value>
     </resource>
-    <resource name="CT_PageSz" resource="Properties">
+    <resource name="CT_PageSz" resource="Properties" tag="page">
       <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">
+    <resource name="CT_PageMar" resource="Properties" tag="page">
       <attribute name="top" tokenid="ooxml:CT_PageMar_top"/>
       <attribute name="right" tokenid="ooxml:CT_PageMar_right"/>
       <attribute name="bottom" tokenid="ooxml:CT_PageMar_bottom"/>
@@ -22193,7 +22193,7 @@
       <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">
+    <resource name="CT_PageBorders" resource="Properties" tag="page">
       <element name="top" tokenid="ooxml:CT_PageBorders_top"/>
       <element name="left" tokenid="ooxml:CT_PageBorders_left"/>
       <element name="bottom" tokenid="ooxml:CT_PageBorders_bottom"/>
@@ -22214,23 +22214,23 @@
       <value tokenid="1">newSection</value>
       <value tokenid="2">continuous</value>
     </resource>
-    <resource name="CT_LineNumber" resource="Properties">
+    <resource name="CT_LineNumber" resource="Properties" tag="section">
       <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">
+    <resource name="CT_PageNumber" resource="Properties" tag="page">
       <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">
+    <resource name="CT_Column" resource="Properties" tag="page">
       <attribute name="space" tokenid="ooxml:CT_Column_space"/>
       <attribute name="w" tokenid="ooxml:CT_Column_w"/>
     </resource>
-    <resource name="CT_Columns" resource="Properties">
+    <resource name="CT_Columns" resource="Properties" tag="page">
       <attribute name="equalWidth" tokenid="ooxml:CT_Columns_equalWidth"/>
       <attribute name="space" tokenid="ooxml:CT_Columns_space"/>
       <attribute name="num" tokenid="ooxml:CT_Columns_num"/>
@@ -22243,7 +22243,7 @@
       <value tokenid="2">both</value>
       <value tokenid="3">bottom</value>
     </resource>
-    <resource name="CT_VerticalJc" resource="Value">
+    <resource name="CT_VerticalJc" resource="Value" tag="page">
       <attribute name="val" tokenid="ooxml:CT_VerticalJc_val" action="setValue"/>
     </resource>
     <resource name="ST_DocGrid" resource="List" generated="yes">
@@ -22252,7 +22252,7 @@
       <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="CT_DocGrid" resource="Properties">
+    <resource name="CT_DocGrid" resource="Properties" tag="document">
       <attribute name="type" tokenid="ooxml:CT_DocGrid_type"/>
       <attribute name="linePitch" tokenid="ooxml:CT_DocGrid_linePitch"/>
       <attribute name="charSpace" tokenid="ooxml:CT_DocGrid_charSpace"/>
@@ -22268,17 +22268,17 @@
       <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">
+    <resource xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" name="CT_HdrFtrRef" resource="Properties" tag="header">
       <attribute name="type" tokenid="ooxml:CT_HdrFtrRef_type"/>
       <attribute name="r:id" tokenid="ooxml:CT_HdrFtrRef_id"/>
       <action name="end" action="handleHdrFtr"/>
     </resource>
-    <resource name="EG_HdrFtrReferences" resource="Properties">
+    <resource name="EG_HdrFtrReferences" resource="Properties" tag="header">
       <element name="headerReference" tokenid="ooxml:EG_HdrFtrReferences_headerReference"/>
       <element name="footerReference" tokenid="ooxml:EG_HdrFtrReferences_footerReference"/>
     </resource>
-    <resource name="CT_HdrFtr" resource="Stream"/>
-    <resource name="EG_SectPrContents" resource="Properties">
+    <resource name="CT_HdrFtr" resource="Stream" tag="header"/>
+    <resource name="EG_SectPrContents" resource="Properties" tag="section">
       <element name="bidi" tokenid="ooxml:EG_SectPrContents_bidi"/>
       <element name="cols" tokenid="ooxml:EG_SectPrContents_cols"/>
       <element name="docGrid" tokenid="ooxml:EG_SectPrContents_docGrid"/>
@@ -22299,8 +22299,8 @@
       <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">
+    <resource name="CT_SectPrBase" resource="Properties" tag="section"/>
+    <resource name="CT_SectPr" resource="Properties" tag="section">
       <element name="sectPrChange" tokenid="ooxml:CT_SectPr_sectPrChange"/>
       <action name="start" action="setLastParagraphInSection"/>
     </resource>
@@ -22315,7 +22315,7 @@
       <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">
+    <resource name="CT_Br" resource="Properties" tag="content">
       <attribute name="type" tokenid="ooxml:CT_Br_type"/>
       <attribute name="clear" tokenid="ooxml:CT_Br_clear"/>
       <action name="end" action="handleBreak"/>
@@ -22336,13 +22336,13 @@
       <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">
+    <resource name="CT_PTab" resource="Stream" tag="paragraph">
       <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">
+    <resource name="CT_Sym" resource="Properties" tag="character">
       <attribute name="font" tokenid="ooxml:CT_Sym_font"/>
       <attribute name="char" tokenid="ooxml:CT_Sym_char"/>
     </resource>
@@ -22361,29 +22361,29 @@
       <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">
+    <resource name="CT_Text" resource="Stream" tag="content">
       <attribute name="xml:space" tokenid="ooxml:CT_Text_space"/>
       <action name="characters" action="text"/>
     </resource>
-    <resource name="CT_FtnEdnRefChar" resource="Stream">
+    <resource name="CT_FtnEdnRefChar" resource="Stream" tag="reference">
       <action name="end" action="ftnednref"/>
     </resource>
-    <resource name="CT_FtnEdnSep" resource="Stream">
+    <resource name="CT_FtnEdnSep" resource="Stream" tag="reference">
       <action name="end" action="ftnednsep"/>
     </resource>
-    <resource name="CT_FtnEdnCont" resource="Stream">
+    <resource name="CT_FtnEdnCont" resource="Stream" tag="reference">
       <action name="end" action="ftnedncont"/>
     </resource>
-    <resource name="CT_PgNum" resource="Stream">
+    <resource name="CT_PgNum" resource="Stream" tag="reference">
       <action name="end" action="pgNum"/>
     </resource>
-    <resource name="CT_Cr" resource="Stream">
+    <resource name="CT_Cr" resource="Stream" tag="content">
       <action name="end" action="endOfParagraph"/>
     </resource>
-    <resource name="CT_Tab" resource="Stream">
+    <resource name="CT_Tab" resource="Stream" tag="content">
       <action name="end" action="tab"/>
     </resource>
-    <resource name="EG_RunInnerContent" resource="Stream">
+    <resource name="EG_RunInnerContent" resource="Stream" tag="content">
       <element name="br" tokenid="ooxml:EG_RunInnerContent_br"/>
       <element name="t" tokenid="ooxml:EG_RunInnerContent_t"/>
       <element name="delText" tokenid="ooxml:EG_RunInnerContent_delText"/>
@@ -22417,7 +22417,7 @@
       <element name="ptab" tokenid="ooxml:EG_RunInnerContent_ptab"/>
       <element name="lastRenderedPageBreak" tokenid="ooxml:EG_RunInnerContent_lastRenderedPageBreak"/>
     </resource>
-    <resource name="CT_R" resource="Stream">
+    <resource name="CT_R" resource="Stream" tag="content">
       <action name="start" action="startCharacterGroup"/>
     </resource>
     <resource name="ST_Hint" resource="List">
@@ -22435,7 +22435,7 @@
       <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">
+    <resource name="CT_Fonts" resource="Properties" tag="font">
       <attribute name="hint" tokenid="ooxml:CT_Fonts_hint"/>
       <attribute name="ascii" tokenid="ooxml:CT_Fonts_ascii"/>
       <attribute name="hAnsi" tokenid="ooxml:CT_Fonts_hAnsi"/>
@@ -22446,7 +22446,7 @@
       <attribute name="eastAsiaTheme" tokenid="ooxml:CT_Fonts_eastAsiaTheme"/>
       <attribute name="cstheme" tokenid="ooxml:CT_Fonts_cstheme"/>
     </resource>
-    <resource name="EG_RPrBase" resource="Properties">
+    <resource name="EG_RPrBase" resource="Properties" tag="paragraph">
       <kind name="paragraph"/>
       <element name="rStyle" tokenid="ooxml:EG_RPrBase_rStyle"/>
       <element name="rFonts" tokenid="ooxml:EG_RPrBase_rFonts"/>
@@ -22488,19 +22488,19 @@
       <element name="specVanish" tokenid="0x818"/>
       <element name="oMath" tokenid="ooxml:EG_RPrBase_oMath"/>
     </resource>
-    <resource name="EG_RPrContent" resource="Properties">
+    <resource name="EG_RPrContent" resource="Properties" tag="character">
       <element name="rPrChange" tokenid="ooxml:EG_RPrContent_rPrChange"/>
     </resource>
-    <resource name="CT_RPr" resource="Properties">
+    <resource name="CT_RPr" resource="Properties" tag="character">
     </resource>
-    <resource name="CT_RPrOriginal" resource="Properties"/>
-    <resource name="CT_ParaRPrOriginal" resource="Properties"/>
-    <resource name="CT_ParaRPr" resource="Properties">
+    <resource name="CT_RPrOriginal" resource="Properties" tag="character"/>
+    <resource name="CT_ParaRPrOriginal" resource="Properties" tag="paragraph"/>
+    <resource name="CT_ParaRPr" resource="Properties" tag="redline">
       <element name="ins" tokenid="ooxml:CT_ParaRPr_ins"/>
       <element name="del" tokenid="ooxml:CT_ParaRPr_del"/>
       <element name="rPrChange" tokenid="ooxml:CT_ParaRPr_rPrChange"/>
     </resource>
-    <resource name="CT_ParaTrackChange" resource="Properties">
+    <resource name="CT_ParaTrackChange" resource="Properties" tag="redline">
       <action name="start" action="tokenproperty"/>
       <action name="start" action="propagateCharacterPropertiesAsSet" sendtokenid="ooxml:paratrackchange"/>
       <action name="start" action="clearProps"/>
@@ -22513,7 +22513,7 @@
       <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="Value" generated="yes">
+    <resource name="CT_RubyAlign" resource="Value" generated="yes" tag="character">
       <attribute name="val" tokenid="ooxml:CT_RubyAlign_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
@@ -22523,7 +22523,7 @@
       <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="Value" generated="yes">
+    <resource name="CT_Lock" resource="Value" generated="yes" tag="content">
       <attribute name="val" tokenid="ooxml:CT_Lock_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
@@ -22532,7 +22532,7 @@
       <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="Value" generated="yes">
+    <resource name="CT_SdtDateMappingType" resource="Value" generated="yes" tag="content">
       <attribute name="val" tokenid="ooxml:CT_SdtDateMappingType_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
@@ -22548,32 +22548,32 @@
       <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="Value" generated="yes">
+    <resource name="CT_CalendarType" resource="Value" generated="yes" tag="content">
       <attribute name="val" tokenid="ooxml:CT_CalendarType_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
-    <resource name="CT_SdtContentRun" resource="Properties"/>
-    <resource name="CT_Attr" resource="Properties">
+    <resource name="CT_SdtContentRun" resource="Properties" tag="content"/>
+    <resource name="CT_Attr" resource="Properties" tag="content">
       <attribute name="uri" tokenid="ooxml:CT_Attr_uri"/>
       <attribute name="name" tokenid="ooxml:CT_Attr_name"/>
       <attribute name="val" tokenid="ooxml:CT_Attr_val"/>
     </resource>
-    <resource name="CT_CustomXmlRun" resource="Properties">
+    <resource name="CT_CustomXmlRun" resource="Properties" tag="content">
       <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">
+    <resource name="CT_SmartTagRun" resource="Properties" tag="content">
       <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">
+    <resource name="EG_PContent" resource="Properties" tag="content">
       <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">
+    <resource name="CT_P" resource="Stream" tag="content">
       <action name="start" action="handleLastParagraphInSection"/>
       <action name="start" action="startParagraphGroup"/>
       <action name="start" action="setHandle"/>
@@ -22586,27 +22586,27 @@
       <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">
+    <resource name="CT_Height" resource="Properties" tag="attribute">
       <attribute name="val" tokenid="ooxml:CT_Height_val"/>
       <attribute name="hRule" tokenid="ooxml:CT_Height_hRule"/>
     </resource>
-    <resource name="CT_TblWidth" resource="Properties">
+    <resource name="CT_TblWidth" resource="Properties" tag="table">
       <attribute name="w" tokenid="ooxml:CT_TblWidth_w"/>
       <attribute name="type" tokenid="ooxml:CT_TblWidth_type"/>
     </resource>
-    <resource name="CT_TblGridCol" resource="Value">
+    <resource name="CT_TblGridCol" resource="Value" tag="table">
       <attribute name="w" tokenid="ooxml:CT_TblGridCol_w" action="setValue"/>
       <action name="start" action="setDefaultIntegerValue"/>
     </resource>
-    <resource name="CT_TblGridBase" resource="Properties">
+    <resource name="CT_TblGridBase" resource="Properties" tag="table">
       <element name="gridCol" tokenid="ooxml:CT_TblGridBase_gridCol"/>
     </resource>
-    <resource name="CT_TblGrid" resource="Properties">
+    <resource name="CT_TblGrid" resource="Properties" tag="table">
       <element name="tblGridChange" tokenid="ooxml:CT_TblGrid_tblGridChange"/>
       <action name="end" action="propagateTableProperties"/>
       <action name="end" action="clearProps"/>
     </resource>
-    <resource name="CT_TcBorders" resource="Properties">
+    <resource name="CT_TcBorders" resource="Properties" tag="table">
       <kind name="table"/>
       <element name="top" tokenid="ooxml:CT_TcBorders_top"/>
       <element name="left" tokenid="ooxml:CT_TcBorders_left"/>
@@ -22617,7 +22617,7 @@
       <element name="tl2br" tokenid="ooxml:CT_TcBorders_tl2br"/>
       <element name="tr2bl" tokenid="ooxml:CT_TcBorders_tr2bl"/>
     </resource>
-    <resource name="CT_TcMar" resource="Properties">
+    <resource name="CT_TcMar" resource="Properties" tag="table">
       <kind name="table"/>
       <element name="top" tokenid="ooxml:CT_TcMar_top"/>
       <element name="left" tokenid="ooxml:CT_TcMar_left"/>
@@ -22629,13 +22629,13 @@
       <value tokenid="ooxml:Value_ST_Merge_restart">restart</value>
       <default tokenid="ooxml:Value_ST_Merge_continue"/>
     </resource>
-    <resource name="CT_VMerge" resource="Value">
+    <resource name="CT_VMerge" resource="Value" tag="table">
       <attribute name="val" tokenid="ooxml:CT_VMerge_val" action="setValue"/>
     </resource>
-    <resource name="CT_HMerge" resource="Value">
+    <resource name="CT_HMerge" resource="Value" tag="table">
       <attribute name="val" tokenid="ooxml:CT_HMerge_val" action="setValue"/>
     </resource>
-    <resource name="CT_TcPrBase" resource="Properties">
+    <resource name="CT_TcPrBase" resource="Properties" tag="table">
       <kind name="table"/>
       <element name="cnfStyle" tokenid="ooxml:CT_TcPrBase_cnfStyle"/>
       <element name="tcW" tokenid="ooxml:CT_TcPrBase_tcW"/>
@@ -22651,12 +22651,12 @@
       <element name="vAlign" tokenid="ooxml:CT_TcPrBase_vAlign"/>
       <element name="hideMark" tokenid="ooxml:CT_TcPrBase_hideMark"/>
     </resource>
-    <resource name="CT_TcPr" resource="Properties">
+    <resource name="CT_TcPr" resource="Properties" tag="table">
       <element name="tcPrChange" tokenid="ooxml:CT_TcPr_tcPrChange"/>
       <action name="end" action="propagateCellProperties"/>
       <action name="end" action="clearProps"/>
     </resource>
-    <resource name="CT_TcPrInner" resource="Properties"/>
+    <resource name="CT_TcPrInner" resource="Properties" tag="table"/>
     <resource name="CT_Tc" resource="TextTableCell">
       <action name="start" action="startCell"/>
       <action name="end" action="endCell"/>
@@ -22664,11 +22664,11 @@
       <action name="end" action="endParagraphGroup"/>
     </resource>
     <resource name="ST_Cnf" resource="String" generated="yes"/>
-    <resource name="CT_Cnf" resource="Value" generated="yes">
+    <resource name="CT_Cnf" resource="Value" generated="yes" tag="content">
       <attribute name="val" tokenid="ooxml:CT_Cnf_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
-    <resource name="CT_TrPrBase" resource="Properties">
+    <resource name="CT_TrPrBase" resource="Properties" tag="table">
       <kind name="table"/>
       <element name="cnfStyle" tokenid="ooxml:CT_TrPrBase_cnfStyle"/>
       <element name="divId" tokenid="ooxml:CT_TrPrBase_divId"/>
@@ -22683,7 +22683,7 @@
       <element name="jc" tokenid="ooxml:CT_TrPrBase_jc"/>
       <element name="hidden" tokenid="ooxml:CT_TrPrBase_hidden"/>
     </resource>
-    <resource name="CT_TrPr" resource="Properties">
+    <resource name="CT_TrPr" resource="Properties" tag="table">
       <kind name="table"/>
       <element name="ins" tokenid="ooxml:CT_TrPr_ins"/>
       <element name="del" tokenid="ooxml:CT_TrPr_del"/>
@@ -22691,7 +22691,7 @@
       <action name="end" action="propagateRowProperties"/>
       <action name="end" action="clearProps"/>
     </resource>
-    <resource name="CT_Row" resource="TextTableRow">
+    <resource name="CT_Row" resource="TextTableRow" tag="table">
       <action name="start" action="startRow"/>
       <action name="end" action="sendRowProperties"/>
       <action name="end" action="sendTableProperties"/>
@@ -22705,16 +22705,16 @@
       <value tokenid="ooxml:Value_ST_TblOverlap_never">never</value>
       <value tokenid="ooxml:Value_ST_TblOverlap_overlap">overlap</value>
     </resource>
-    <resource name="CT_TblOverlap" resource="Value">
+    <resource name="CT_TblOverlap" resource="Value" tag="table">
       <attribute name="val" tokenid="ooxml:CT_TblOverlap_val" action="setValue"/>
     </resource>
-    <resource name="CT_TblCellMar" resource="Properties">
+    <resource name="CT_TblCellMar" resource="Properties" tag="table">
       <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">
+    <resource name="CT_TblBorders" resource="Properties" tag="table">
       <kind name="table"/>
       <element name="top" tokenid="ooxml:CT_TblBorders_top"/>
       <element name="left" tokenid="ooxml:CT_TblBorders_left"/>
@@ -22723,7 +22723,7 @@
       <element name="insideH" tokenid="ooxml:CT_TblBorders_insideH"/>
       <element name="insideV" tokenid="ooxml:CT_TblBorders_insideV"/>
     </resource>
-    <resource name="CT_TblPrBase" resource="Properties">
+    <resource name="CT_TblPrBase" resource="Properties" tag="table">
       <kind name="table"/>
       <element name="tblStyle" tokenid="ooxml:CT_TblPrBase_tblStyle"/>
       <element name="tblpPr" tokenid="ooxml:CT_TblPrBase_tblpPr"/>
@@ -22741,30 +22741,30 @@
       <element name="tblCellMar" tokenid="ooxml:CT_TblPrBase_tblCellMar"/>
       <element name="tblLook" tokenid="ooxml:CT_TblPrBase_tblLook"/>
     </resource>
-    <resource name="CT_TblPr" resource="Properties">
+    <resource name="CT_TblPr" resource="Properties" tag="table">
       <kind name="table"/>
       <element name="tblPrChange" tokenid="ooxml:CT_TblPr_tblPrChange"/>
       <action name="end" action="propagateTableProperties"/>
       <action name="end" action="clearProps"/>
     </resource>
-    <resource name="CT_Tbl" resource="TextTable"/>
+    <resource name="CT_Tbl" resource="TextTable" tag="table"/>
     <resource name="ST_FtnPos" resource="List">
       <value tokenid="ooxml:Value_ST_FtnPos_pageBottom">pageBottom</value>
       <value tokenid="ooxml:Value_ST_FtnPos_beneathText">beneathText</value>
       <value tokenid="ooxml:Value_ST_FtnPos_sectEnd">sectEnd</value>
       <value tokenid="ooxml:Value_ST_FtnPos_docEnd">docEnd</value>
     </resource>
-    <resource name="CT_FtnPos" resource="Value">
+    <resource name="CT_FtnPos" resource="Value" tag="reference">
       <attribute name="val" tokenid="ooxml:CT_FtnPos_val" action="setValue"/>
     </resource>
     <resource name="ST_EdnPos" resource="List">
       <value tokenid="ooxml:Value_ST_EdnPos_sectEnd">sectEnd</value>
       <value tokenid="ooxml:Value_ST_EdnPos_docEnd">docEnd</value>
     </resource>
-    <resource name="CT_EdnPos" resource="Value">
+    <resource name="CT_EdnPos" resource="Value" tag="reference">
       <attribute name="val" tokenid="ooxml:CT_EdnPos_val" action="setValue"/>
     </resource>
-    <resource name="CT_NumFmt" resource="Value">
+    <resource name="CT_NumFmt" resource="Value" tag="numbering">
       <attribute name="val" tokenid="ooxml:CT_NumFmt_val" action="setValue"/>
     </resource>
     <resource name="ST_RestartNumber" resource="List">
@@ -22772,42 +22772,42 @@
       <value tokenid="ooxml:Value_ST_RestartNumber_eachSect">eachSect</value>
       <value tokenid="ooxml:Value_ST_RestartNumber_eachPage">eachPage</value>
     </resource>
-    <resource name="CT_NumRestart" resource="Value">
+    <resource name="CT_NumRestart" resource="Value" tag="numbering">
       <attribute name="val" tokenid="ooxml:CT_NumRestart_val" action="setValue"/>
     </resource>
-    <resource name="CT_FtnEdnRef" resource="Properties">
+    <resource name="CT_FtnEdnRef" resource="Properties" tag="reference">
       <attribute name="customMarkFollows" tokenid="ooxml:CT_FtnEdnRef_customMarkFollows"/>
       <attribute name="id" tokenid="ooxml:CT_FtnEdnRef_id" action="setXNoteId"/>
       <action name="end" action="handleXNotes"/>
     </resource>
-    <resource name="CT_FtnEdnSepRef" resource="Properties">
+    <resource name="CT_FtnEdnSepRef" resource="Properties" tag="reference">
       <attribute name="id" tokenid="ooxml:CT_FtnEdnSepRef_id"/>
     </resource>
-    <resource name="CT_FtnEdn" resource="XNote">
+    <resource name="CT_FtnEdn" resource="XNote" tag="reference">
       <attribute name="type" tokenid="ooxml:CT_FtnEdn_type"/>
       <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">
+    <resource name="CT_CommentRef" resource="Properties" tag="reference">
       <action name="end" action="handleComment"/>
     </resource>
-    <resource name="EG_FtnEdnNumProps" resource="Properties">
+    <resource name="EG_FtnEdnNumProps" resource="Properties" tag="reference">
       <element name="numStart" tokenid="ooxml:EG_FtnEdnNumProps_numStart"/>
       <element name="numRestart" tokenid="ooxml:EG_FtnEdnNumProps_numRestart"/>
     </resource>
-    <resource name="CT_FtnProps" resource="Properties">
+    <resource name="CT_FtnProps" resource="Properties" tag="reference">
       <element name="pos" tokenid="ooxml:CT_FtnProps_pos"/>
       <element name="numFmt" tokenid="ooxml:CT_FtnProps_numFmt"/>
     </resource>
-    <resource name="CT_EdnProps" resource="Properties">
+    <resource name="CT_EdnProps" resource="Properties" tag="reference">
       <element name="pos" tokenid="ooxml:CT_EdnProps_pos"/>
       <element name="numFmt" tokenid="ooxml:CT_EdnProps_numFmt"/>
     </resource>
-    <resource name="CT_FtnDocProps" resource="Properties">
+    <resource name="CT_FtnDocProps" resource="Properties" tag="reference">
       <element name="footnote" tokenid="ooxml:CT_FtnDocProps_footnote"/>
     </resource>
-    <resource name="CT_EdnDocProps" resource="Properties">
+    <resource name="CT_EdnDocProps" resource="Properties" tag="reference">
       <element name="endnote" tokenid="ooxml:CT_EdnDocProps_endnote"/>
     </resource>
     <resource name="ST_MailMergeSourceType" resource="List" generated="yes">
@@ -22821,11 +22821,11 @@
       <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="Value" generated="yes">
+    <resource name="CT_MailMergeSourceType" resource="Value" generated="yes" tag="mailmerge">
       <attribute name="val" tokenid="ooxml:CT_MailMergeSourceType_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
-    <resource name="CT_MailMerge" resource="Properties">
+    <resource name="CT_MailMerge" resource="Properties" tag="mailmerge">
       <element name="mainDocumentType" tokenid="ooxml:CT_MailMerge_mainDocumentType"/>
       <element name="linkToQuery" tokenid="ooxml:CT_MailMerge_linkToQuery"/>
       <element name="dataType" tokenid="ooxml:CT_MailMerge_dataType"/>
@@ -22856,11 +22856,11 @@
       <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="Value" generated="yes">
+    <resource name="CT_TargetScreenSz" resource="Value" generated="yes" tag="settings">
       <attribute name="val" tokenid="ooxml:CT_TargetScreenSz_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
-    <resource name="CT_Compat" resource="Properties">
+    <resource name="CT_Compat" resource="Properties" tag="settings">
       <element name="useSingleBorderforContiguousCells" tokenid="ooxml:CT_Compat_useSingleBorderforContiguousCells"/>
       <element name="wpJustification" tokenid="ooxml:CT_Compat_wpJustification"/>
       <element name="noTabHangInd" tokenid="ooxml:CT_Compat_noTabHangInd"/>
@@ -22927,11 +22927,11 @@
       <element name="useAnsiKerningPairs" tokenid="ooxml:CT_Compat_useAnsiKerningPairs"/>
       <element name="cachedColBalance" tokenid="ooxml:CT_Compat_cachedColBalance"/>
     </resource>
-    <resource name="CT_DocVar" resource="Properties">
+    <resource name="CT_DocVar" resource="Properties" tag="document">
       <attribute name="name" tokenid="ooxml:CT_DocVar_name"/>
       <attribute name="val" tokenid="ooxml:CT_DocVar_val"/>
     </resource>
-    <resource name="CT_DocRsids" resource="Properties">
+    <resource name="CT_DocRsids" resource="Properties" tag="redline">
       <element name="rsidRoot" tokenid="ooxml:CT_DocRsids_rsidRoot"/>
       <element name="rsid" tokenid="ooxml:CT_DocRsids_rsid"/>
     </resource>
@@ -22940,21 +22940,21 @@
       <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="Value" generated="yes">
+    <resource name="CT_CharacterSpacing" resource="Value" generated="yes" tag="character">
       <attribute name="val" tokenid="ooxml:CT_CharacterSpacing_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
-    <resource name="CT_SaveThroughXslt" resource="Properties">
+    <resource name="CT_SaveThroughXslt" resource="Properties" tag="settings">
       <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">
+    <resource name="CT_RPrDefault" resource="Properties" tag="character">
       <element name="rPr" tokenid="ooxml:CT_RPrDefault_rPr"/>
     </resource>
-    <resource name="CT_PPrDefault" resource="Properties">
+    <resource name="CT_PPrDefault" resource="Properties" tag="paragraph">
       <element name="pPr" tokenid="ooxml:CT_PPrDefault_pPr"/>
     </resource>
-    <resource name="CT_DocDefaults" resource="Properties">
+    <resource name="CT_DocDefaults" resource="Properties" tag="document">
       <element name="pPrDefault" tokenid="ooxml:CT_DocDefaults_pPrDefault"/>
       <element name="rPrDefault" tokenid="ooxml:CT_DocDefaults_rPrDefault"/>
     </resource>
@@ -22978,10 +22978,10 @@
       <attribute name="h" tokenid="ooxml:CT_ReadingModeInkLockDown_h"/>
       <attribute name="fontSz" tokenid="ooxml:CT_ReadingModeInkLockDown_fontSz"/>
     </resource>
-    <resource name="CT_WriteProtection" resource="Properties">
+    <resource name="CT_WriteProtection" resource="Properties" tag="document">
       <attribute name="recommended" tokenid="ooxml:CT_WriteProtection_recommended"/>
     </resource>
-    <resource name="CT_Settings" resource="PropertyTable" tokenid="ooxml:SETTINGS">
+    <resource name="CT_Settings" resource="PropertyTable" tokenid="ooxml:SETTINGS" tag="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"/>
@@ -23085,7 +23085,7 @@
       <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="Value" generated="yes">
+    <resource name="CT_FrameScrollbar" resource="Value" generated="yes" tag="frame">
       <attribute name="val" tokenid="ooxml:CT_FrameScrollbar_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
@@ -23094,7 +23094,7 @@
       <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="Value" generated="yes">
+    <resource name="CT_FrameLayout" resource="Value" generated="yes" tag="frame">
       <attribute name="val" tokenid="ooxml:CT_FrameLayout_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
@@ -23103,20 +23103,20 @@
       <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="Value" generated="yes">
+    <resource name="CT_LevelSuffix" resource="Value" generated="yes" tag="numbering">
       <attribute name="val" tokenid="ooxml:CT_LevelSuffix_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
-    <resource name="CT_LevelText" resource="Properties">
+    <resource name="CT_LevelText" resource="Properties" tag="numbering">
       <attribute name="val" tokenid="ooxml:CT_LevelText_val"/>
       <attribute name="null" tokenid="ooxml:CT_LevelText_null"/>
     </resource>
-    <resource name="CT_LvlLegacy" resource="Properties">
+    <resource name="CT_LvlLegacy" resource="Properties" tag="numbering">
       <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">
+    <resource name="CT_Lvl" resource="Properties" tag="numbering">
       <kind name="paragraph"/>
       <element name="start" tokenid="rtf:ISTARTAT"/>
       <element name="numFmt" tokenid="rtf:NFC"/>
@@ -23134,15 +23134,15 @@
       <attribute name="tplc" tokenid="ooxml:CT_Lvl_tplc"/>
       <attribute name="tentative" tokenid="ooxml:CT_Lvl_tentative"/>
     </resource>
-    <resource name="ST_MultiLevelType" resource="List">
+    <resource name="ST_MultiLevelType" resource="List" tag="numbering">
       <value tokenid="ooxml:Value_ST_MultiLevelType_singleLevel">singleLevel</value>
       <value tokenid="ooxml:Value_ST_MultiLevelType_multilevel">multilevel</value>
       <value tokenid="ooxml:Value_ST_MultiLevelType_hybridMultilevel">hybridMultilevel</value>
     </resource>
-    <resource name="CT_MultiLevelType" resource="Value">
+    <resource name="CT_MultiLevelType" resource="Value" tag="numbering">
       <attribute name="val" tokenid="ooxml:CT_MultiLevelType_val" action="setValue"/>
     </resource>
-    <resource name="CT_AbstractNum" resource="Properties">
+    <resource name="CT_AbstractNum" resource="Properties" tag="numbering">
       <kind name="paragraph"/>
       <element name="nsid" tokenid="rtf:LSID"/>
       <element name="multiLevelType" tokenid="ooxml:CT_AbstractNum_multiLevelType"/>
@@ -23153,19 +23153,19 @@
       <element name="lvl" tokenid="ooxml:CT_AbstractNum_lvl"/>
       <attribute name="abstractNumId" tokenid="ooxml:CT_AbstractNum_abstractNumId"/>
     </resource>
-    <resource name="CT_NumLvl" resource="Properties">
+    <resource name="CT_NumLvl" resource="Properties" tag="numbering">
       <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">
+    <resource name="CT_Num" resource="Properties" tag="numbering">
       <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">
+    <resource name="CT_Numbering" resource="PropertyTable" tokenid="ooxml:NUMBERING" tag="numbering">
       <kind name="paragraph"/>
       <element name="numPicBullet" tokenid="ooxml:CT_Numbering_numPicBullet"/>
       <element name="abstractNum" tokenid="ooxml:CT_Numbering_abstractNum"/>
@@ -23187,7 +23187,7 @@
       <value tokenid="12">seCell</value>
       <value tokenid="13">swCell</value>
     </resource>
-    <resource name="CT_Style_tblStylePr" resource="Properties">
+    <resource name="CT_Style_tblStylePr" resource="Properties" tag="style">
       <element name="pPr" tokenid="ooxml:CT_PPrBase"/>
       <element name="rPr" tokenid="ooxml:EG_RPrBase"/>
       <element name="tblPr" tokenid="ooxml:CT_TblPrBase"/>
@@ -23201,7 +23201,7 @@
       <value tokenid="3">table</value>
       <value tokenid="4">numbering</value>
     </resource>
-    <resource name="CT_Style" resource="Properties">
+    <resource name="CT_Style" resource="Properties" tag="style">
       <element name="name" tokenid="ooxml:CT_Style_name"/>
       <element name="aliases" tokenid="ooxml:CT_Style_aliases"/>
       <element name="basedOn" tokenid="ooxml:CT_Style_basedOn"/>
@@ -23229,9 +23229,9 @@
       <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="CT_Styles" resource="Table" tokenid="rtf:STYLESHEET" tag="style"/>
     <resource name="ST_Panose" resource="Hex"/>
-    <resource name="CT_Panose" resource="Value">
+    <resource name="CT_Panose" resource="Value" tag="font">
       <attribute name="val" tokenid="ooxml:CT_Panose_val" action="setValue"/>
       <action name="start" action="setDefaultHexValue"/>
     </resource>
@@ -23243,7 +23243,7 @@
       <value tokenid="ooxml:Value_ST_FontFamily_swiss">swiss</value>
       <value tokenid="ooxml:Value_ST_FontFamily_auto">auto</value>
     </resource>
-    <resource name="CT_FontFamily" resource="Value">
+    <resource name="CT_FontFamily" resource="Value" tag="font">
       <attribute name="val" tokenid="ooxml:CT_FontFamily_val" action="setValue"/>
     </resource>
     <resource name="ST_Pitch" resource="List">
@@ -23251,10 +23251,10 @@
       <value tokenid="ooxml:Value_ST_Pitch_variable">variable</value>
       <value tokenid="ooxml:Value_ST_Pitch_default">default</value>
     </resource>
-    <resource name="CT_Pitch" resource="Value">
+    <resource name="CT_Pitch" resource="Value" tag="font">
       <attribute name="val" tokenid="ooxml:CT_Pitch_val" action="setValue"/>
     </resource>
-    <resource name="CT_FontSig" resource="Properties">
+    <resource name="CT_FontSig" resource="Properties" tag="font">
       <attribute name="usb0" tokenid="ooxml:CT_FontSig_usb0"/>
       <attribute name="usb1" tokenid="ooxml:CT_FontSig_usb1"/>
       <attribute name="usb2" tokenid="ooxml:CT_FontSig_usb2"/>
@@ -23262,11 +23262,11 @@
       <attribute name="csb0" tokenid="ooxml:CT_FontSig_csb0"/>
       <attribute name="csb1" tokenid="ooxml:CT_FontSig_csb1"/>
     </resource>
-    <resource name="CT_FontRel" resource="Properties">
+    <resource name="CT_FontRel" resource="Properties" tag="font">
       <attribute name="fontKey" tokenid="ooxml:CT_FontRel_fontKey"/>
       <attribute name="subsetted" tokenid="ooxml:CT_FontRel_subsetted"/>
     </resource>
-    <resource name="CT_Font" resource="Properties">
+    <resource name="CT_Font" resource="Properties" tag="font">
       <kind name="character"/>
       <element name="altName" tokenid="ooxml:CT_Font_altName"/>
       <element name="panose1" tokenid="ooxml:CT_Font_panose1"/>
@@ -23281,8 +23281,8 @@
       <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">
+    <resource name="CT_FontsList" resource="Table" tokenid="rtf:FONTTABLE" tag="font"/>
+    <resource name="EG_RunLevelElts" resource="Stream" tag="character">
       <element name="proofErr" tokenid="ooxml:EG_RunLevelElts_proofErr"/>
       <element name="permStart" tokenid="ooxml:EG_RunLevelElts_permStart"/>
       <element name="permEnd" tokenid="ooxml:EG_RunLevelElts_permEnd"/>
@@ -23293,7 +23293,7 @@
       <element name="moveFrom" tokenid="ooxml:EG_RunLevelElts_moveFrom"/>
       <element name="moveTo" tokenid="ooxml:EG_RunLevelElts_moveTo"/>
     </resource>
-    <resource name="CT_Body" resource="Stream">
+    <resource name="CT_Body" resource="Stream" tag="content">
       <action name="start" action="startSectionGroup"/>
       <!--
       <action name="start" action="footnoteSeparator"/>
@@ -23305,7 +23305,7 @@
       <action name="end" action="endParagraphGroup"/>
       <action name="end" action="endSectionGroup"/>
     </resource>
-    <resource xmlns:v="urn:schemas-microsoft-com:vml" name="CT_ShapeDefaults" resource="Properties">
+    <resource xmlns:v="urn:schemas-microsoft-com:vml" name="CT_ShapeDefaults" resource="Properties" tag="shape">
       <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"/>
@@ -23320,15 +23320,15 @@
       <attribute name="strokecolor" tokenid="ooxml:CT_ShapeDefaults_strokecolor"/>
       <attribute name="allowincell" tokenid="ooxml:CT_ShapeDefaults_allowincell"/>
     </resource>
-    <resource name="CT_Comments" resource="Stream">
+    <resource name="CT_Comments" resource="Stream" tag="content">
       <action name="start" action="startSectionGroup"/>
       <action name="end" action="endSectionGroup"/>
     </resource>
-    <resource name="CT_Footnotes" resource="Stream"/>
-    <resource name="footnotes" resource="Stream"/>
-    <resource name="CT_Endnotes" resource="Stream"/>
-    <resource name="endnotes" resource="Stream"/>
-    <resource name="CT_SmartTagType" resource="Properties">
+    <resource name="CT_Footnotes" resource="Stream" tag="reference"/>
+    <resource name="footnotes" resource="Stream" tag="reference"/>
+    <resource name="CT_Endnotes" resource="Stream" tag="reference"/>
+    <resource name="endnotes" resource="Stream" tag="reference"/>
+    <resource name="CT_SmartTagType" resource="Properties" tag="content">
       <attribute name="namespaceuri" tokenid="ooxml:CT_SmartTagType_namespaceuri"/>
       <attribute name="name" tokenid="ooxml:CT_SmartTagType_name"/>
       <attribute name="url" tokenid="ooxml:CT_SmartTagType_url"/>
@@ -23357,7 +23357,7 @@
       <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="Value" generated="yes">
+    <resource name="CT_DocPartBehavior" resource="Value" generated="yes" tag="document">
       <attribute name="val" tokenid="ooxml:CT_DocPartBehavior_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
@@ -23370,7 +23370,7 @@
       <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="Value" generated="yes">
+    <resource name="CT_DocPartType" resource="Value" generated="yes" tag="document">
       <attribute name="val" tokenid="ooxml:CT_DocPartType_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
@@ -23414,24 +23414,24 @@
       <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="Value" generated="yes">
+    <resource name="CT_DocPartGallery" resource="Value" generated="yes" tag="document">
       <attribute name="val" tokenid="ooxml:CT_DocPartGallery_val" action="setValue"/>
       <action name="start" action="setDefaultStringValue"/>
     </resource>
-    <resource name="CT_DocPartName" resource="Properties">
+    <resource name="CT_DocPartName" resource="Properties" tag="document">
       <attribute name="val" tokenid="ooxml:CT_DocPartName_val"/>
       <attribute name="decorated" tokenid="ooxml:CT_DocPartName_decorated"/>
     </resource>
-    <resource name="settings" resource="Stream">
+    <resource name="settings" resource="Stream" tag="settings">
       <element name="settings" tokenid="ooxml:settings_settings"/>
     </resource>
-    <resource name="fonts" resource="Stream">
+    <resource name="fonts" resource="Stream" tag="font">
       <element name="fonts" tokenid="rtf:FONTTABLE"/>
     </resource>
-    <resource name="numbering" resource="Stream">
+    <resource name="numbering" resource="Stream" tag="numbering">
       <element name="numbering" tokenid="ooxml:NUMBERING"/>
     </resource>
-    <resource name="styles" resource="Stream">
+    <resource name="styles" resource="Stream" tag="style">
       <element name="styles" tokenid="rtf:STYLESHEET"/>
     </resource>
     <resource name="ST_CaptionPos" resource="List" generated="yes">
@@ -23440,7 +23440,7 @@
       <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">
+    <resource name="CT_Caption" resource="Properties" tag="content">
       <attribute name="name" tokenid="ooxml:CT_Caption_name"/>
       <attribute name="pos" tokenid="ooxml:CT_Caption_pos"/>
       <attribute name="chapNum" tokenid="ooxml:CT_Caption_chapNum"/>
@@ -23449,23 +23449,23 @@
       <attribute name="numFmt" tokenid="ooxml:CT_Caption_numFmt"/>
       <attribute name="sep" tokenid="ooxml:CT_Caption_sep"/>
     </resource>
-    <resource name="CT_AutoCaption" resource="Properties">
+    <resource name="CT_AutoCaption" resource="Properties" tag="content">
       <attribute name="name" tokenid="ooxml:CT_AutoCaption_name"/>
       <attribute name="caption" tokenid="ooxml:CT_AutoCaption_caption"/>
     </resource>
-    <resource name="CT_AutoCaptions" resource="Properties">
+    <resource name="CT_AutoCaptions" resource="Properties" tag="content">
       <element name="autoCaption" tokenid="ooxml:CT_AutoCaptions_autoCaption"/>
     </resource>
-    <resource name="CT_Captions" resource="Properties">
+    <resource name="CT_Captions" resource="Properties" tag="content">
       <element name="caption" tokenid="ooxml:CT_Captions_caption"/>
       <element name="autoCaptions" tokenid="ooxml:CT_Captions_autoCaptions"/>
     </resource>
-    <resource name="CT_DocumentBase" resource="Properties">
+    <resource name="CT_DocumentBase" resource="Properties" tag="content">
       <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"/>
+    <resource name="CT_Document" resource="Stream" tag="content"/>
+    <resource name="CT_GlossaryDocument" resource="Stream" tag="content"/>
+    <resource name="document" resource="Stream" tag="content"/>
+    <resource name="glossaryDocument" resource="Stream" tag="content"/>
   </namespace>
 </model>
-- 
cgit 


From 8c244d7ee5c202c3bfe569d60560d2c9b29e4f2f Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Tue, 7 Dec 2010 15:40:49 +0100
Subject: resolved warnings on unxlngi6.pro

---
 writerfilter/source/dmapper/WrapPolygonHandler.cxx |  8 ++---
 writerfilter/source/ooxml/factoryimpl_ns.xsl       | 36 +++++++++++++---------
 .../source/resourcemodel/LoggedResources.cxx       | 12 ++++----
 3 files changed, 31 insertions(+), 25 deletions(-)

diff --git a/writerfilter/source/dmapper/WrapPolygonHandler.cxx b/writerfilter/source/dmapper/WrapPolygonHandler.cxx
index 452eb9d66473..2aabc1a375a9 100644
--- a/writerfilter/source/dmapper/WrapPolygonHandler.cxx
+++ b/writerfilter/source/dmapper/WrapPolygonHandler.cxx
@@ -30,7 +30,7 @@
 #include <ooxml/resourceids.hxx>
 #include <resourcemodel/ResourceModelHelper.hxx>
 
-#include "ConversionHelper.hxx"ConversionHelper::convertTwipToMM100(
+#include "ConversionHelper.hxx"
 #include "WrapPolygonHandler.hxx"
 #include "dmapperLoggers.hxx"
 
@@ -186,15 +186,15 @@ void WrapPolygonHandler::lcl_attribute(Id Name, Value & val)
     }
 }
 
-void WrapPolygonHandler::lcl_sprm(Sprm & sprm)
+void WrapPolygonHandler::lcl_sprm(Sprm & _sprm)
 {
-    switch (sprm.getId())
+    switch (_sprm.getId())
     {
     case NS_ooxml::LN_CT_WrapPath_lineTo:
     case NS_ooxml::LN_CT_WrapPath_start:
         /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
         {
-            resolveSprmProps(*this, sprm);
+            resolveSprmProps(*this, _sprm);
 
             awt::Point aPoint(mnX, mnY);
             mpPolygon->addPoint(aPoint);
diff --git a/writerfilter/source/ooxml/factoryimpl_ns.xsl b/writerfilter/source/ooxml/factoryimpl_ns.xsl
index d5dfeeac25ab..adc4c977e1f9 100644
--- a/writerfilter/source/ooxml/factoryimpl_ns.xsl
+++ b/writerfilter/source/ooxml/factoryimpl_ns.xsl
@@ -571,18 +571,7 @@ CreateElementMapPointer </xsl:text>
 <!-- factoryaction -->
 <xsl:template name="factoryaction">
   <xsl:param name="action"/>
-  <xsl:text>&#xa;&#xa;</xsl:text>
-  <xsl:text>void </xsl:text>
-  <xsl:call-template name="factoryclassname"/>
-  <xsl:text>::</xsl:text>
-  <xsl:value-of select="$action"/>
-  <xsl:text>Action(OOXMLFastContextHandler * pHandler</xsl:text>
-  <xsl:if test="$action='characters'">
-    <xsl:text>, const ::rtl::OUString &amp; sText</xsl:text>
-  </xsl:if>
-  <xsl:text>)&#xa;</xsl:text>
-  <xsl:text>{&#xa;</xsl:text>
-  <xsl:variable name="switch1block">
+  <xsl:variable name="switchblock1">
     <xsl:for-each select="resource[action/@name=$action]">
       <xsl:text>
       </xsl:text>
@@ -611,13 +600,30 @@ CreateElementMapPointer </xsl:text>
       </xsl:for-each>
     </xsl:if>
   </xsl:variable>
-  <xsl:if test="string-length($switch1block) > 0 or string-length($switchblock2) > 0">
+  <xsl:text>&#xa;&#xa;</xsl:text>
+  <xsl:text>void </xsl:text>
+  <xsl:call-template name="factoryclassname"/>
+  <xsl:text>::</xsl:text>
+  <xsl:value-of select="$action"/>
+  <xsl:text>Action(OOXMLFastContextHandler*</xsl:text>
+  <xsl:if test="string-length($switchblock1) &gt; 0 or string-length($switchblock2) &gt; 0">
+    <xsl:text> pHandler</xsl:text>
+  </xsl:if>
+  <xsl:if test="$action='characters'">
+    <xsl:text>, const ::rtl::OUString &amp;</xsl:text>
+    <xsl:if test="contains($switchblock1, 'sText') or contains($switchblock2, 'sText')">
+      <xsl:text> sText</xsl:text>
+    </xsl:if>
+  </xsl:if>
+  <xsl:text>)&#xa;</xsl:text>
+  <xsl:text>{&#xa;</xsl:text>
+  <xsl:if test="string-length($switchblock1) > 0 or string-length($switchblock2) > 0">
     <xsl:text>    sal_uInt32 nDefine = pHandler->getDefine();&#xa;</xsl:text>
   </xsl:if>
-  <xsl:if test="string-length($switch1block) > 0">
+  <xsl:if test="string-length($switchblock1) > 0">
     <xsl:text>    switch (nDefine)&#xa;</xsl:text>
     <xsl:text>    {&#xa;</xsl:text>
-    <xsl:value-of select="$switch1block"/>
+    <xsl:value-of select="$switchblock1"/>
     <xsl:text>    default:&#xa;</xsl:text>
     <xsl:text>        break;&#xa;</xsl:text>
     <xsl:text>    }&#xa;</xsl:text>
diff --git a/writerfilter/source/resourcemodel/LoggedResources.cxx b/writerfilter/source/resourcemodel/LoggedResources.cxx
index 36761688a166..f60b48b82b5b 100644
--- a/writerfilter/source/resourcemodel/LoggedResources.cxx
+++ b/writerfilter/source/resourcemodel/LoggedResources.cxx
@@ -245,14 +245,14 @@ void LoggedStream::substream(Id name, writerfilter::Reference<Stream>::Pointer_t
 #endif
 }
 
-void LoggedStream::info(const string & info)
+void LoggedStream::info(const string & _info)
 {
 #ifdef DEBUG_LOGGING
     mHelper.startElement("info");
-    mHelper.attribute("text", info);
+    mHelper.attribute("text", _info);
 #endif
 
-    lcl_info(info);
+    lcl_info(_info);
 
 #ifdef DEBUG_LOGGING
     mHelper.endElement("info");
@@ -281,15 +281,15 @@ void LoggedProperties::attribute(Id name, Value & val)
     lcl_attribute(name, val);
 }
 
-void LoggedProperties::sprm(Sprm & sprm)
+void LoggedProperties::sprm(Sprm & _sprm)
 {
 #ifdef DEBUG_LOGGING
     mHelper.startElement("sprm");
-    mHelper.attribute("name", (*QNameToString::Instance())(sprm.getId()));
+    mHelper.attribute("name", (*QNameToString::Instance())(_sprm.getId()));
     mHelper.chars(sprm.toString());
 #endif
 
-    lcl_sprm(sprm);
+    lcl_sprm(_sprm);
 
 #ifdef DEBUG_LOGGING
     mHelper.endElement("sprm");
-- 
cgit 


From 94fae542b504dcde605cfa311ce997094ad9b553 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Mon, 13 Dec 2010 13:36:59 +0100
Subject: added include <string.h>

---
 writerfilter/source/dmapper/GraphicImport.cxx | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx
index 6bbfcbd68665..beae39a68a29 100644
--- a/writerfilter/source/dmapper/GraphicImport.cxx
+++ b/writerfilter/source/dmapper/GraphicImport.cxx
@@ -25,6 +25,8 @@
  *
  ************************************************************************/
 
+#include <string.h>
+
 #include <com/sun/star/awt/Size.hpp>
 #include <com/sun/star/container/XNamed.hpp>
 #include <com/sun/star/drawing/ColorMode.hpp>
-- 
cgit 


From f1896f1247ff93549a9e52dde90df8ade994daed Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 5 Jan 2011 13:41:21 +0100
Subject: new: XPathLogger

---
 writerfilter/inc/resourcemodel/XPathLogger.hxx     | 65 ++++++++++++++++
 .../source/ooxml/OOXMLFastContextHandler.cxx       |  8 +-
 writerfilter/source/ooxml/OOXMLParserState.cxx     |  5 ++
 writerfilter/source/ooxml/OOXMLParserState.hxx     |  5 ++
 writerfilter/source/resourcemodel/XPathLogger.cxx  | 89 ++++++++++++++++++++++
 writerfilter/source/resourcemodel/makefile.mk      |  1 +
 6 files changed, 172 insertions(+), 1 deletion(-)
 create mode 100644 writerfilter/inc/resourcemodel/XPathLogger.hxx
 create mode 100644 writerfilter/source/resourcemodel/XPathLogger.cxx

diff --git a/writerfilter/inc/resourcemodel/XPathLogger.hxx b/writerfilter/inc/resourcemodel/XPathLogger.hxx
new file mode 100644
index 000000000000..22e50fc15bb9
--- /dev/null
+++ b/writerfilter/inc/resourcemodel/XPathLogger.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_XPATH_LOGGER_HXX
+#define INCLUDED_XPATH_LOGGER_HXX
+
+#include <hash_map>
+#include <stack>
+#include <string>
+#include <vector>
+#include <boost/shared_ptr.hpp>
+#include <WriterFilterDllApi.hxx>
+
+namespace writerfilter
+{
+using ::std::hash_map;
+using ::std::stack;
+using ::std::string;
+using ::std::vector;
+
+class WRITERFILTER_DLLPUBLIC XPathLogger
+{
+    typedef hash_map<string, unsigned int> TokenMap_t;
+    typedef boost::shared_ptr<TokenMap_t> TokenMapPointer_t;
+
+    TokenMapPointer_t mp_tokenMap;
+    stack<TokenMapPointer_t> m_tokenMapStack;
+    vector<string> m_path;
+    string m_currentPath;
+
+    void updateCurrentPath();
+
+public:
+    explicit XPathLogger();
+    virtual ~XPathLogger();
+
+    string getXPath() const;
+    void startElement(string _token);
+    void endElement();
+};
+}
+#endif // INCLUDED_XPATH_LOGGER_HXX
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
index 1f5181e03055..5e4d5604527f 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
@@ -31,6 +31,7 @@
 #include <rtl/uuid.h>
 #include <com/sun/star/drawing/XShapes.hpp>
 #include <resourcemodel/QNameToString.hxx>
+#include <resourcemodel/XPathLogger.hxx>
 #include <resourcemodel/util.hxx>
 #include <ooxml/resourceids.hxx>
 #include <doctok/sprmids.hxx>
@@ -191,8 +192,10 @@ void SAL_CALL OOXMLFastContextHandler::startFastElement
 #ifdef DEBUG_CONTEXT_HANDLER
     debug_logger->startElement("contexthandler.element");
     string sToken = fastTokenToId(Element);
+    mpParserState->getXPathLogger().startElement(sToken);
     debug_logger->attribute("token", sToken);
-    debug_logger->attribute("type",getType());
+    debug_logger->attribute("type", getType());
+    debug_logger->attribute("xpath", mpParserState->getXPathLogger().getXPath());
     debug_logger->startElement("at-start");
     debug_logger->addTag(toTag());
     debug_logger->endElement("at-start");
@@ -210,6 +213,7 @@ throw (uno::RuntimeException, xml::sax::SAXException)
     debug_logger->startElement("contexthandler.unknown-element");
     debug_logger->attribute("namespace", Namespace);
     debug_logger->attribute("name", Name);
+    mpParserState->getXPathLogger().startElement("unknown");
 #else
     (void) Namespace;
     (void) Name;
@@ -231,6 +235,7 @@ throw (uno::RuntimeException, xml::sax::SAXException)
     debug_logger->addTag(toTag());
     debug_logger->endElement("at-end");
     debug_logger->endElement("contexthandler.element");
+    mpParserState->getXPathLogger().endElement();
 #endif
 }
 
@@ -255,6 +260,7 @@ throw (uno::RuntimeException, xml::sax::SAXException)
 {
 #ifdef DEBUG_CONTEXT_HANDLER
     debug_logger->endElement("contexthandler.unknown-element");
+    mpParserState->getXPathLogger().endElement();
 #endif
 }
 
diff --git a/writerfilter/source/ooxml/OOXMLParserState.cxx b/writerfilter/source/ooxml/OOXMLParserState.cxx
index fb347d02048e..41a3738ee7ab 100644
--- a/writerfilter/source/ooxml/OOXMLParserState.cxx
+++ b/writerfilter/source/ooxml/OOXMLParserState.cxx
@@ -320,6 +320,11 @@ XMLTag::Pointer_t OOXMLParserState::toTag() const
 
     return pTag;
  }
+
+XPathLogger & OOXMLParserState::getXPathLogger()
+{
+    return m_xPathLogger;
+}
 #endif
 
 }}
diff --git a/writerfilter/source/ooxml/OOXMLParserState.hxx b/writerfilter/source/ooxml/OOXMLParserState.hxx
index 2dd118a5b96b..12a9876ce6eb 100644
--- a/writerfilter/source/ooxml/OOXMLParserState.hxx
+++ b/writerfilter/source/ooxml/OOXMLParserState.hxx
@@ -33,6 +33,7 @@
 
 #ifdef DEBUG
 #include <resourcemodel/TagLogger.hxx>
+#include <resourcemodel/XPathLogger.hxx>
 #endif
 
 namespace writerfilter {
@@ -57,6 +58,9 @@ class OOXMLParserState
     stack<OOXMLPropertySet::Pointer_t> mCellProps;
     stack<OOXMLPropertySet::Pointer_t> mRowProps;
     stack<OOXMLPropertySet::Pointer_t> mTableProps;
+#ifdef DEBUG
+    XPathLogger m_xPathLogger;
+#endif
 
 public:
     typedef boost::shared_ptr<OOXMLParserState> Pointer_t;
@@ -109,6 +113,7 @@ public:
     unsigned int getContextCount() const;
     string toString() const;
     XMLTag::Pointer_t toTag() const;
+    XPathLogger & getXPathLogger();
 #endif
 
 };
diff --git a/writerfilter/source/resourcemodel/XPathLogger.cxx b/writerfilter/source/resourcemodel/XPathLogger.cxx
new file mode 100644
index 000000000000..6e8ec701bc4a
--- /dev/null
+++ b/writerfilter/source/resourcemodel/XPathLogger.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 <resourcemodel/XPathLogger.hxx>
+
+namespace writerfilter
+{
+XPathLogger::XPathLogger()
+: mp_tokenMap(new TokenMap_t)
+{
+}
+
+XPathLogger::~XPathLogger()
+{
+}
+
+string XPathLogger::getXPath() const
+{
+    return m_currentPath;
+}
+
+void XPathLogger::updateCurrentPath()
+{
+    m_currentPath = "";
+
+    for (vector<string>::const_iterator aIt = m_path.begin();
+         aIt != m_path.end();
+         aIt++)
+    {
+        if (m_currentPath.size() > 0)
+            m_currentPath += "/";
+
+        m_currentPath += *aIt;
+    }
+}
+
+void XPathLogger::startElement(string _token)
+{
+    TokenMap_t::const_iterator aIt = mp_tokenMap->find(_token);
+
+    if (aIt == mp_tokenMap->end())
+        (*mp_tokenMap)[_token] = 1;
+    else
+        (*mp_tokenMap)[_token]++;
+
+    static char sBuffer[256];
+    snprintf(sBuffer, sizeof(sBuffer), "[%d]", (*mp_tokenMap)[_token]);
+    m_path.push_back(_token + sBuffer);
+
+    m_tokenMapStack.push(mp_tokenMap);
+    mp_tokenMap.reset(new TokenMap_t);
+
+    updateCurrentPath();
+}
+
+void XPathLogger::endElement()
+{
+    mp_tokenMap = m_tokenMapStack.top();
+    m_tokenMapStack.pop();
+    m_path.pop_back();
+
+    updateCurrentPath();
+}
+
+}
diff --git a/writerfilter/source/resourcemodel/makefile.mk b/writerfilter/source/resourcemodel/makefile.mk
index 71f730e77303..1bc260455813 100644
--- a/writerfilter/source/resourcemodel/makefile.mk
+++ b/writerfilter/source/resourcemodel/makefile.mk
@@ -55,6 +55,7 @@ SLOFILES= \
     $(SLO)$/ResourceModelHelper.obj \
     $(SLO)$/TagLogger.obj \
     $(SLO)$/WW8Analyzer.obj \
+    $(SLO)$/XPathLogger.obj \
     $(SLO)$/qnametostr.obj \
     $(SLO)$/resourcemodel.obj \
     $(SLO)$/sprmcodetostr.obj \
-- 
cgit 


From 7efe40c915619ac4f1ca5d5a26641a10aeafe418 Mon Sep 17 00:00:00 2001
From: Henning Brinkmann <hbrinkm@openoffice.org>
Date: Wed, 5 Jan 2011 13:43:48 +0100
Subject: DomainMapper_Impl::finishParagraph: check if pParaContext is valid
 DomainMapperTableHandler::endTable: catch all exceptions

---
 writerfilter/source/dmapper/DomainMapperTableHandler.cxx | 4 ++--
 writerfilter/source/dmapper/DomainMapper_Impl.cxx        | 7 +++++--
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
index 1a5f45fe5bac..c6869aca5f2b 100644
--- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
@@ -734,14 +734,14 @@ void DomainMapperTableHandler::endTable()
             dmapper_logger->chars("failed to import table!");
 #endif
         }
-#ifdef DEBUG_DMAPPER_TABLE_HANDLER
         catch ( uno::Exception e )
         {
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
             dmapper_logger->startElement("exception");
             dmapper_logger->chars(rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr( ));
             dmapper_logger->endElement("exeception");
-        }
 #endif
+        }
     }
 
     m_aTableProperties.reset();
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 92349beaf70d..11d03655b5db 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -629,7 +629,7 @@ void DomainMapper_Impl::finishParagraph( PropertyMapPtr pPropertyMap )
     dmapper_logger->attribute("isTextAppend", xTextAppend.is());
 #endif
 
-    if(xTextAppend.is() && ! getTableManager( ).isIgnore())
+    if(xTextAppend.is() && ! getTableManager( ).isIgnore() && pParaContext != NULL)
     {
         try
         {
@@ -648,7 +648,10 @@ void DomainMapper_Impl::finishParagraph( PropertyMapPtr pPropertyMap )
               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;
+            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;
-- 
cgit 


From affe4202add09040ff714c03ed4d2107362e76fa Mon Sep 17 00:00:00 2001
From: hb <hbrinkm@openoffice.org>
Date: Tue, 18 Jan 2011 10:34:17 +0100
Subject: XPathLogger.cxx: added include for <stdio.h>

---
 writerfilter/source/resourcemodel/XPathLogger.cxx | 1 +
 1 file changed, 1 insertion(+)

diff --git a/writerfilter/source/resourcemodel/XPathLogger.cxx b/writerfilter/source/resourcemodel/XPathLogger.cxx
index 6e8ec701bc4a..89255c8311f8 100644
--- a/writerfilter/source/resourcemodel/XPathLogger.cxx
+++ b/writerfilter/source/resourcemodel/XPathLogger.cxx
@@ -25,6 +25,7 @@
  *
  ************************************************************************/
 
+#include <stdio.h>
 #include <resourcemodel/XPathLogger.hxx>
 
 namespace writerfilter
-- 
cgit