summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xediteng/source/editeng/impedit4.cxx19
-rw-r--r--extras/source/wordbook/standard.dicbin11 -> 47 bytes
-rw-r--r--i18npool/source/isolang/mslangid.cxx1
-rwxr-xr-xinstsetoo_native/util/pack.lst12
-rw-r--r--more_fonts/fonts/ttf_liberation/makefile.mk4
-rw-r--r--more_fonts/prj/d.lst5
-rwxr-xr-x[-rw-r--r--]officecfg/registry/data/org/openoffice/Office/Math.xcu5
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Math.xcs23
-rwxr-xr-xooo.lst2
-rw-r--r--package/source/zipapi/ZipFile.cxx10
-rw-r--r--sc/inc/table.hxx2
-rw-r--r--sc/source/core/data/table2.cxx68
-rw-r--r--sc/source/core/data/table5.cxx16
-rw-r--r--sc/source/filter/xml/xmlcelli.cxx32
-rw-r--r--sc/source/ui/cctrl/dpcontrol.cxx8
-rw-r--r--sc/source/ui/dbgui/textimportoptions.src30
-rw-r--r--sc/source/ui/docshell/externalrefmgr.cxx12
-rw-r--r--sc/source/ui/src/optdlg.src6
-rw-r--r--sc/source/ui/unoobj/confuno.cxx13
-rw-r--r--sc/uiconfig/scalc/toolbar/findbar.xml8
-rw-r--r--sd/uiconfig/sdraw/toolbar/findbar.xml8
-rw-r--r--sd/uiconfig/simpress/toolbar/findbar.xml8
-rw-r--r--[-rwxr-xr-x]sfx2/source/dialog/securitypage.cxx30
-rw-r--r--[-rwxr-xr-x]sfx2/source/dialog/securitypage.src0
-rw-r--r--sfx2/source/doc/sfxbasemodel.cxx6
-rw-r--r--sfx2/source/view/viewfrm.cxx9
-rw-r--r--smoketestoo_native/smoketest.cxx44
-rwxr-xr-xsolenv/bin/build.pl221
-rw-r--r--solenv/bin/modules/RepositoryHelper.pm205
-rwxr-xr-x[-rw-r--r--]solenv/bin/modules/SourceConfig.pm146
-rw-r--r--solenv/inc/minor.mk6
-rwxr-xr-x[-rw-r--r--]starmath/inc/format.hxx4
-rw-r--r--starmath/inc/node.hxx23
-rw-r--r--starmath/inc/symbol.hxx12
-rw-r--r--starmath/source/cfgitem.cxx8
-rw-r--r--starmath/source/dialog.cxx4
-rw-r--r--starmath/source/document.cxx36
-rw-r--r--starmath/source/edit.cxx13
-rw-r--r--starmath/source/format.cxx7
-rw-r--r--starmath/source/makefile.mk20
-rw-r--r--starmath/source/mathmlexport.cxx1
-rw-r--r--starmath/source/mathmlimport.cxx1
-rwxr-xr-x[-rw-r--r--]starmath/source/node.cxx96
-rwxr-xr-xstarmath/source/parse.cxx4
-rw-r--r--starmath/source/symbol.cxx35
-rw-r--r--starmath/source/types.cxx2
-rwxr-xr-xstarmath/source/unomodel.cxx16
-rwxr-xr-xstarmath/source/view.cxx3
-rw-r--r--sw/source/core/edit/edlingu.cxx28
-rw-r--r--sw/source/filter/ww8/ww8par.cxx2
-rw-r--r--sw/source/filter/ww8/ww8par.hxx1
-rw-r--r--sw/source/filter/ww8/ww8par6.cxx19
-rw-r--r--sw/uiconfig/sglobal/toolbar/findbar.xml8
-rw-r--r--sw/uiconfig/sweb/toolbar/findbar.xml8
-rw-r--r--sw/uiconfig/swriter/toolbar/findbar.xml8
-rw-r--r--sw/uiconfig/swxform/toolbar/findbar.xml8
-rw-r--r--vcl/aqua/source/gdi/salprn.cxx4
-rwxr-xr-x[-rw-r--r--]vcl/source/gdi/print3.cxx28
-rw-r--r--vcl/source/window/printdlg.cxx6
-rw-r--r--writerfilter/inc/dmapper/DomainMapper.hxx2
-rw-r--r--writerfilter/inc/resourcemodel/Protocol.hxx4
-rw-r--r--writerfilter/inc/resourcemodel/ResourceModelHelper.hxx (renamed from writerfilter/source/doctok/doctokutil.cxx)29
-rw-r--r--writerfilter/inc/resourcemodel/TagLogger.hxx13
-rw-r--r--writerfilter/inc/resourcemodel/util.hxx2
-rw-r--r--writerfilter/qa/complex/ooxml/LoadDocuments.java51
-rw-r--r--writerfilter/qa/complex/ooxml/makefile.mk90
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx218
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableManager.cxx38
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx1395
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx41
-rw-r--r--writerfilter/source/dmapper/FFData.xml58
-rw-r--r--writerfilter/source/dmapper/FFDataHandler.cxx483
-rw-r--r--writerfilter/source/dmapper/FFDataHandler.hxx161
-rw-r--r--writerfilter/source/dmapper/FieldTypes.hxx299
-rw-r--r--writerfilter/source/dmapper/FormControlHelper.cxx309
-rw-r--r--writerfilter/source/dmapper/FormControlHelper.hxx64
-rw-r--r--writerfilter/source/dmapper/PropertyIds.cxx2
-rw-r--r--writerfilter/source/dmapper/PropertyIds.hxx2
-rw-r--r--writerfilter/source/dmapper/PropertyMap.cxx32
-rw-r--r--writerfilter/source/dmapper/PropertyMap.hxx2
-rw-r--r--writerfilter/source/dmapper/PropertyMapHelper.cxx4
-rw-r--r--writerfilter/source/dmapper/PropertyMapHelper.hxx2
-rw-r--r--writerfilter/source/dmapper/SettingsTable.cxx57
-rw-r--r--writerfilter/source/dmapper/StyleSheetTable.cxx69
-rw-r--r--[-rwxr-xr-x]writerfilter/source/dmapper/ThemeTable.cxx35
-rw-r--r--writerfilter/source/dmapper/dmapperLoggers.hxx2
-rw-r--r--writerfilter/source/dmapper/genclass.xsl707
-rw-r--r--writerfilter/source/dmapper/makefile.mk2
-rw-r--r--writerfilter/source/doctok/WW8DocumentImpl.cxx51
-rw-r--r--writerfilter/source/doctok/WW8DocumentImpl.hxx15
-rw-r--r--writerfilter/source/doctok/WW8FontTable.cxx5
-rw-r--r--writerfilter/source/doctok/WW8LFOTable.cxx7
-rw-r--r--writerfilter/source/doctok/WW8ListTable.cxx5
-rw-r--r--writerfilter/source/doctok/WW8ResourceModelImpl.cxx1
-rw-r--r--writerfilter/source/doctok/WW8StreamImpl.cxx4
-rw-r--r--writerfilter/source/doctok/WW8StructBase.cxx1
-rw-r--r--writerfilter/source/doctok/WW8StyleSheet.cxx5
-rw-r--r--writerfilter/source/doctok/doctokLoggers.hxx4
-rw-r--r--writerfilter/source/doctok/dopbase.xml91
-rw-r--r--writerfilter/source/doctok/makefile.mk1
-rw-r--r--writerfilter/source/doctok/resources.xmi4668
-rw-r--r--writerfilter/source/doctok/resources.xsl21
-rw-r--r--writerfilter/source/doctok/xmigen.xsl72
-rw-r--r--writerfilter/source/filter/ImportFilter.cxx19
-rw-r--r--writerfilter/source/ooxml/OOXMLDocumentImpl.cxx4
-rw-r--r--[-rwxr-xr-x]writerfilter/source/ooxml/OOXMLFactory.cxx8
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandler.cxx160
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandler.hxx45
-rw-r--r--writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx7
-rw-r--r--writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx2
-rw-r--r--writerfilter/source/ooxml/OOXMLFastHelper.hxx7
-rw-r--r--writerfilter/source/ooxml/OOXMLParserState.cxx70
-rw-r--r--writerfilter/source/ooxml/OOXMLParserState.hxx18
-rw-r--r--writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx22
-rw-r--r--writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx9
-rw-r--r--writerfilter/source/ooxml/OOXMLStreamImpl.cxx16
-rw-r--r--writerfilter/source/ooxml/OOXMLStreamImpl.hxx4
-rw-r--r--writerfilter/source/ooxml/attrsprm.xsl142
-rw-r--r--writerfilter/source/ooxml/dummyannotate.xsl2
-rw-r--r--writerfilter/source/ooxml/factoryimpl_ns.xsl99
-rw-r--r--writerfilter/source/ooxml/fastresourcesimpl_dml-shapeProperties.xsl93
-rw-r--r--writerfilter/source/ooxml/model.xml71
-rw-r--r--writerfilter/source/ooxml/ooxmlLoggers.hxx3
-rw-r--r--[-rwxr-xr-x]writerfilter/source/ooxml/status.sh6
-rw-r--r--writerfilter/source/resourcemodel/Protocol.cxx2
-rw-r--r--writerfilter/source/resourcemodel/ResourceModelHelper.cxx (renamed from writerfilter/source/doctok/util.hxx)37
-rw-r--r--writerfilter/source/resourcemodel/TagLogger.cxx125
-rw-r--r--writerfilter/source/resourcemodel/makefile.mk1
-rw-r--r--writerfilter/source/resourcemodel/resourcemodel.cxx6
-rw-r--r--writerfilter/source/resourcemodel/resourcemodel.hxx2
-rw-r--r--writerfilter/source/resourcemodel/util.cxx95
131 files changed, 9796 insertions, 1767 deletions
diff --git a/editeng/source/editeng/impedit4.cxx b/editeng/source/editeng/impedit4.cxx
index 482cd6d71338..5a54c054016b 100755
--- a/editeng/source/editeng/impedit4.cxx
+++ b/editeng/source/editeng/impedit4.cxx
@@ -1458,7 +1458,11 @@ Reference< XSpellChecker1 > ImpEditEngine::GetSpeller()
SpellInfo * ImpEditEngine::CreateSpellInfo( const EditSelection &rSel, bool bMultipleDocs )
{
- pSpellInfo = new SpellInfo;
+ if (!pSpellInfo)
+ pSpellInfo = new SpellInfo;
+ else
+ *pSpellInfo = SpellInfo(); // reset to default values
+
pSpellInfo->bMultipleDoc = bMultipleDocs;
EditSelection aSentenceSel( SelectSentence( rSel ) );
// pSpellInfo->aSpellStart = CreateEPaM( aSentenceSel.Min() );
@@ -2023,7 +2027,6 @@ bool ImpEditEngine::SpellSentence(EditView& rEditView,
#else
bool bRet = false;
EditSelection aCurSel( rEditView.pImpEditView->GetEditSelection() );
- //the pSpellInfo has to be created on demand
if(!pSpellInfo)
pSpellInfo = CreateSpellInfo( aCurSel, true );
pSpellInfo->aCurSentenceStart = aCurSel.Min();
@@ -2191,8 +2194,12 @@ void ImpEditEngine::ApplyChangedSentence(EditView& rEditView,
{
#ifdef SVX_LIGHT
#else
+ // Note: rNewPortions.size() == 0 is valid and happens when the whole
+ // sentence got removed in the dialog
+
DBG_ASSERT(pSpellInfo, "pSpellInfo not initialized");
- if(pSpellInfo)
+ if (pSpellInfo &&
+ pSpellInfo->aLastSpellPortions.size() > 0) // no portions -> no text to be changed
{
// get current paragraph length to calculate later on how the sentence length changed,
// in order to place the cursor at the end of the sentence again
@@ -2202,6 +2209,10 @@ void ImpEditEngine::ApplyChangedSentence(EditView& rEditView,
UndoActionStart( EDITUNDO_INSERT );
if(pSpellInfo->aLastSpellPortions.size() == rNewPortions.size())
{
+ DBG_ASSERT( rNewPortions.size() > 0, "rNewPortions should not be empty here" );
+ DBG_ASSERT( pSpellInfo->aLastSpellPortions.size() == pSpellInfo->aLastSpellContentSelections.size(),
+ "aLastSpellPortions and aLastSpellContentSelections size mismatch" );
+
//the simple case: the same number of elements on both sides
//each changed element has to be applied to the corresponding source element
svx::SpellPortions::const_iterator aCurrentNewPortion = rNewPortions.end();
@@ -2252,6 +2263,8 @@ void ImpEditEngine::ApplyChangedSentence(EditView& rEditView,
}
else
{
+ DBG_ASSERT( pSpellInfo->aLastSpellContentSelections.size() > 0, "aLastSpellContentSelections should not be empty here" );
+
//select the complete sentence
SpellContentSelections::const_iterator aCurrentEndPosition = pSpellInfo->aLastSpellContentSelections.end();
--aCurrentEndPosition;
diff --git a/extras/source/wordbook/standard.dic b/extras/source/wordbook/standard.dic
index 7eadfdb77c7c..5b8b235b5dd0 100644
--- a/extras/source/wordbook/standard.dic
+++ b/extras/source/wordbook/standard.dic
Binary files differ
diff --git a/i18npool/source/isolang/mslangid.cxx b/i18npool/source/isolang/mslangid.cxx
index da9da0ff8646..a03d24e6fcdb 100644
--- a/i18npool/source/isolang/mslangid.cxx
+++ b/i18npool/source/isolang/mslangid.cxx
@@ -373,6 +373,7 @@ sal_Int16 MsLangId::getScriptType( LanguageType nLang )
case LANGUAGE_USER_BODO_INDIA:
case LANGUAGE_USER_DOGRI_INDIA:
case LANGUAGE_USER_MAITHILI_INDIA:
+ case LANGUAGE_UIGHUR_CHINA:
nScript = ::com::sun::star::i18n::ScriptType::COMPLEX;
break;
diff --git a/instsetoo_native/util/pack.lst b/instsetoo_native/util/pack.lst
index fc835cfcca76..c19039118909 100755
--- a/instsetoo_native/util/pack.lst
+++ b/instsetoo_native/util/pack.lst
@@ -9,16 +9,16 @@
OpenOffice unxlngi6.pro,unxmacxi.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngx6.pro en-US openoffice
OpenOffice unxlngi6,unxmacxi,unxsoli4,unxsols4,wntmsci12 en-US openoffice
-BrOffice pt-BR broffice
+#BrOffice pt-BR broffice
#OpenOffice_wJRE unxlngi6.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,wntmsci12 en-US openofficewithjre
#BrOffice_wJRE pt-BR brofficewithjre
OpenOffice_Dev unxlngi6.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxmacxi.pro,unxlngx6.pro en-US openofficedev
#BrOffice_Dev pt-BR brofficedev
-OpenOffice_SDK unxlngi6.pro,unxmacxi.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngx6.pro en-US sdkoo
-OpenOffice_Dev_SDK unxlngi6.pro,unxmacxi.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngx6.pro en-US sdkoodev
+#OpenOffice_SDK unxlngi6.pro,unxmacxi.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngx6.pro,unxlngi6,unxmacxi,unxsoli4,unxsols4,wntmsci12 en-US sdkoo
+OpenOffice_Dev_SDK unxlngi6.pro,unxmacxi.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngx6.pro,unxlngi6,unxmacxi,unxsoli4,unxsols4,wntmsci12 en-US sdkoodev
#URE unxlngi6.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngi6,unxsoli4,unxsols4,wntmsci12 en-US ure
-OpenOfficeLanguagepack unxlngi6.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngx6.pro,unxmacxi.pro de|ja ooolanguagepack
-#OpenOfficeLanguagepack unxlngi6,unxsoli4,unxsols4,wntmsci12,unxmacxi de ooolanguagepack
-OpenOfficeDevLanguagepack unxlngi6.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngx6.pro,unxmacxi.pro ar|as|ast|bg|bn|ca|ca-XV|cs|da|de|dz|el|en-GB|es|et|eu|fi|fr|ga|gl|gu|he|hi|hu|id|is|it|ja|km|kn|ko|lt|lv|mk|ml|mr|my|nb|nl|nn|oc|om|or|pa-IN|pl|pt|pt-BR|ru|sh|si|sk|sl|sr|sv|ta|te|th|tr|ug|uk|vi|zh-CN|zh-TW ooodevlanguagepack
+OpenOfficeLanguagepack unxlngi6.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngx6.pro,unxmacxi.pro de ooolanguagepack
+OpenOfficeLanguagepack unxlngi6,unxsoli4,unxsols4,wntmsci12,unxmacxi de ooolanguagepack
+OpenOfficeDevLanguagepack unxlngi6.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngx6.pro,unxmacxi.pro de|fr|ja|ar|ru ooodevlanguagepack
#BrOfficeLanguagepack unxlngi6.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngx6.pro pt-BR broolanguagepack
diff --git a/more_fonts/fonts/ttf_liberation/makefile.mk b/more_fonts/fonts/ttf_liberation/makefile.mk
index de711a644690..a49c568e2770 100644
--- a/more_fonts/fonts/ttf_liberation/makefile.mk
+++ b/more_fonts/fonts/ttf_liberation/makefile.mk
@@ -36,8 +36,8 @@ TARGET=ttf_liberation
# --- Files --------------------------------------------------------
-TARFILE_NAME=liberation-fonts-ttf-1.05.3.20100427
-TARFILE_MD5=ef9ab6c1740682fbd730606d5f6922e6
+TARFILE_NAME=liberation-fonts-ttf-1.06.0.20100721
+TARFILE_MD5=ca4870d899fd7e943ffc310a5421ad4d
TARFILE_ROOTDIR=.
PATCH_FILES=
diff --git a/more_fonts/prj/d.lst b/more_fonts/prj/d.lst
index 0bc15242b086..261aae0b2d28 100644
--- a/more_fonts/prj/d.lst
+++ b/more_fonts/prj/d.lst
@@ -1,9 +1,10 @@
mkdir: %COMMON_DEST%\pck%_EXT%
..\fonts\fc_local.conf %COMMON_DEST%\pck%_EXT%\fc_local.conf
+# TODO: replace explicit versions by wildcard when the build system learns to handle them
..\%__SRC%\misc\build\dejavu-fonts-ttf-2.30\ttf\*.ttf %COMMON_DEST%\pck%_EXT%\*.ttf
..\%__SRC%\misc\build\dejavu-fonts-ttf-2.30\LICENSE %COMMON_DEST%\pck%_EXT%\LICENSE_dejavu
-..\%__SRC%\misc\build\Liberation*.ttf %COMMON_DEST%\pck%_EXT%\*.ttf
-..\%__SRC%\misc\build\License.txt %COMMON_DEST%\pck%_EXT%\LICENSE_liberation
+..\%__SRC%\misc\build\liberation-fonts-ttf-1.06.0.20100721/Liberation*.ttf %COMMON_DEST%\pck%_EXT%\*.ttf
+..\%__SRC%\misc\build\liberation-fonts-ttf-1.06.0.20100721/License.txt %COMMON_DEST%\pck%_EXT%\LICENSE_liberation
..\%__SRC%\misc\build\gentiumbasic-fonts-1.10\*.ttf %COMMON_DEST%\pck%_EXT%\*.ttf
..\%__SRC%\misc\build\gentiumbasic-fonts-1.10\OFL.txt %COMMON_DEST%\pck%_EXT%\LICENSE_gentium
diff --git a/officecfg/registry/data/org/openoffice/Office/Math.xcu b/officecfg/registry/data/org/openoffice/Office/Math.xcu
index 6778873e3386..b65c2422c433 100644..100755
--- a/officecfg/registry/data/org/openoffice/Office/Math.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/Math.xcu
@@ -48,6 +48,8 @@
<value>0</value>
</prop>
</node>
+
+ <!-- only used for symbols with the 'Greek' symbol set name -->
<node oor:name="Id2" oor:op="replace">
<prop oor:name="Name">
<value>OpenSymbol</value>
@@ -65,10 +67,11 @@
<value>0</value>
</prop>
<prop oor:name="Italic">
- <value>2</value>
+ <value>0</value>
</prop>
</node>
</node>
+
<node oor:name="SymbolList">
<node oor:name="alpha" oor:op="replace">
<prop oor:name="Char">
diff --git a/officecfg/registry/schema/org/openoffice/Office/Math.xcs b/officecfg/registry/schema/org/openoffice/Office/Math.xcs
index caa8726b7c72..31f6e00a230a 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Math.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Math.xcs
@@ -402,7 +402,28 @@
</info>
<value>false</value>
</prop>
- <prop oor:name="ScaleNormalBracket" oor:type="xs:boolean">
+ <prop oor:name="GreekCharStyle" oor:type="xs:short">
+ <!-- UIHints: n/a yet -->
+ <info>
+ <author>TL</author>
+ <desc>Specifies the default layout for symbols from the 'Greek' symbol set.</desc>
+ <label>Greek character style</label>
+ </info>
+ <constraints>
+ <minInclusive oor:value="0">
+ <info>
+ <desc>Specifies the minimum value allowed</desc>
+ </info>
+ </minInclusive>
+ <maxInclusive oor:value="2">
+ <info>
+ <desc>Specifies the maximum value allowed</desc>
+ </info>
+ </maxInclusive>
+ </constraints>
+ <value>0</value>
+ </prop>
+ <prop oor:name="ScaleNormalBracket" oor:type="xs:boolean">
<!-- OldPath: Math/StandardFormat -->
<!-- OldLocation: Soffice.cfg -->
<!-- UIHints: Format - Spacing - Category - Brackets - Scale all brackets -->
diff --git a/ooo.lst b/ooo.lst
index 0c10e39f8f7c..9f51cf668a73 100755
--- a/ooo.lst
+++ b/ooo.lst
@@ -15,7 +15,7 @@ http://hg.services.openoffice.org/binaries
2ae988b339daec234019a7066f96733e-commons-lang-2.3-src.tar.gz
2c9b0f83ed5890af02c0df1c1776f39b-commons-httpclient-3.1-src.tar.gz
2f6ecca935948f7db92d925d88d0d078-icu4c-4_0_1-src.tgz
-ef9ab6c1740682fbd730606d5f6922e6-liberation-fonts-ttf-1.05.3.20100427.zip
+ca4870d899fd7e943ffc310a5421ad4d-liberation-fonts-ttf-1.06.0.20100721.tar.gz
35c94d2df8893241173de1d16b6034c0-swingExSrc.zip
35efabc239af896dfb79be7ebdd6e6b9-gentiumbasic-fonts-1.10.zip
377a60170e5185eb63d3ed2fae98e621-README_silgraphite-2.3.1.txt
diff --git a/package/source/zipapi/ZipFile.cxx b/package/source/zipapi/ZipFile.cxx
index 2238cf870d02..f01b7ce06f4b 100644
--- a/package/source/zipapi/ZipFile.cxx
+++ b/package/source/zipapi/ZipFile.cxx
@@ -1051,11 +1051,7 @@ void ZipFile::getSizeAndCRC( sal_Int32 nOffset, sal_Int32 nCompressedSize, sal_I
nRealSize += nInBlock;
}
- if( aInflaterLocal.finished() )
- {
- *nSize = nRealSize;
- *nCRC = aCRC.getValue();
- }
- else
- *nSize = *nCRC = 0;
+ *nSize = nRealSize;
+ *nCRC = aCRC.getValue();
}
+
diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx
index 5f42a2f37247..63cefe22626a 100644
--- a/sc/inc/table.hxx
+++ b/sc/inc/table.hxx
@@ -683,6 +683,8 @@ public:
void UpdatePageBreaks( const ScRange* pUserArea );
void RemoveManualBreaks();
BOOL HasManualBreaks() const;
+ void SetRowManualBreaks( const ::std::set<SCROW>& rBreaks );
+ void SetColManualBreaks( const ::std::set<SCCOL>& rBreaks );
void GetAllRowBreaks(::std::set<SCROW>& rBreaks, bool bPage, bool bManual) const;
void GetAllColBreaks(::std::set<SCCOL>& rBreaks, bool bPage, bool bManual) const;
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index b8bd9037c900..d54e16b8cbd7 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -155,6 +155,22 @@ void ScTable::InsertRow( SCCOL nStartCol, SCCOL nEndCol, SCROW nStartRow, SCSIZE
mpFilteredRows->insertSegment(nStartRow, nSize, true);
mpHiddenRows->insertSegment(nStartRow, nSize, true);
+
+ if (!maRowManualBreaks.empty())
+ {
+ std::set<SCROW>::reverse_iterator rit = maRowManualBreaks.rbegin();
+ while (rit != maRowManualBreaks.rend())
+ {
+ SCROW nRow = *rit;
+ if (nRow < nStartRow)
+ break; // while
+ else
+ {
+ maRowManualBreaks.erase( (++rit).base());
+ maRowManualBreaks.insert( static_cast<SCROW>( nRow + nSize));
+ }
+ }
+ }
}
for (SCCOL j=nStartCol; j<=nEndCol; j++)
@@ -185,6 +201,18 @@ void ScTable::DeleteRow( SCCOL nStartCol, SCCOL nEndCol, SCROW nStartRow, SCSIZE
mpFilteredRows->removeSegment(nStartRow, nStartRow+nSize);
mpHiddenRows->removeSegment(nStartRow, nStartRow+nSize);
+
+ if (!maRowManualBreaks.empty())
+ {
+ std::set<SCROW>::iterator it = maRowManualBreaks.upper_bound( static_cast<SCROW>( nStartRow + nSize - 1));
+ maRowManualBreaks.erase( maRowManualBreaks.lower_bound( nStartRow), it);
+ while (it != maRowManualBreaks.end())
+ {
+ SCROW nRow = *it;
+ maRowManualBreaks.erase( it++);
+ maRowManualBreaks.insert( static_cast<SCROW>( nRow - nSize));
+ }
+ }
}
{ // scope for bulk broadcast
@@ -233,6 +261,22 @@ void ScTable::InsertCol( SCCOL nStartCol, SCROW nStartRow, SCROW nEndRow, SCSIZE
mpHiddenCols->insertSegment(nStartCol, static_cast<SCCOL>(nSize), true);
mpFilteredCols->insertSegment(nStartCol, static_cast<SCCOL>(nSize), true);
+
+ if (!maColManualBreaks.empty())
+ {
+ std::set<SCCOL>::reverse_iterator rit = maColManualBreaks.rbegin();
+ while (rit != maColManualBreaks.rend())
+ {
+ SCCOL nCol = *rit;
+ if (nCol < nStartCol)
+ break; // while
+ else
+ {
+ maColManualBreaks.erase( (++rit).base());
+ maColManualBreaks.insert( static_cast<SCCOL>( nCol + nSize));
+ }
+ }
+ }
}
@@ -291,6 +335,18 @@ void ScTable::DeleteCol( SCCOL nStartCol, SCROW nStartRow, SCROW nEndRow, SCSIZE
SCCOL nRmSize = nStartCol + static_cast<SCCOL>(nSize);
mpHiddenCols->removeSegment(nStartCol, nRmSize);
mpFilteredCols->removeSegment(nStartCol, nRmSize);
+
+ if (!maColManualBreaks.empty())
+ {
+ std::set<SCCOL>::iterator it = maColManualBreaks.upper_bound( static_cast<SCCOL>( nStartCol + nSize - 1));
+ maColManualBreaks.erase( maColManualBreaks.lower_bound( nStartCol), it);
+ while (it != maColManualBreaks.end())
+ {
+ SCCOL nCol = *it;
+ maColManualBreaks.erase( it++);
+ maColManualBreaks.insert( static_cast<SCCOL>( nCol - nSize));
+ }
+ }
}
@@ -688,6 +744,7 @@ void ScTable::CopyToTable(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
pDestTab->IncRecalcLevel();
if (bWidth)
+ {
for (SCCOL i=nCol1; i<=nCol2; i++)
{
bool bThisHidden = ColHidden(i);
@@ -703,6 +760,8 @@ void ScTable::CopyToTable(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
if (bChange)
bFlagChange = true;
}
+ pDestTab->SetColManualBreaks( maColManualBreaks);
+ }
if (bHeight)
{
@@ -754,6 +813,7 @@ void ScTable::CopyToTable(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
pDestTab->SetRowFiltered(i, nLastRow, bFiltered);
i = nLastRow;
}
+ pDestTab->SetRowManualBreaks( maRowManualBreaks);
}
pDestTab->DecRecalcLevel();
}
@@ -791,11 +851,17 @@ void ScTable::UndoToTable(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
if (bWidth||bHeight)
{
if (bWidth)
+ {
for (SCCOL i=nCol1; i<=nCol2; i++)
pDestTab->pColWidth[i] = pColWidth[i];
+ pDestTab->SetColManualBreaks( maColManualBreaks);
+ }
if (bHeight)
+ {
pDestTab->CopyRowHeight(*this, nRow1, nRow2, 0);
- DecRecalcLevel();
+ pDestTab->SetRowManualBreaks( maRowManualBreaks);
+ }
+ DecRecalcLevel();
}
}
}
diff --git a/sc/source/core/data/table5.cxx b/sc/source/core/data/table5.cxx
index e7ee96367785..7c13756aab38 100644
--- a/sc/source/core/data/table5.cxx
+++ b/sc/source/core/data/table5.cxx
@@ -326,6 +326,22 @@ BOOL ScTable::HasManualBreaks() const
return !maRowManualBreaks.empty() || !maColManualBreaks.empty();
}
+void ScTable::SetRowManualBreaks( const ::std::set<SCROW>& rBreaks )
+{
+ maRowManualBreaks = rBreaks;
+ InvalidatePageBreaks();
+ if (IsStreamValid())
+ SetStreamValid(FALSE);
+}
+
+void ScTable::SetColManualBreaks( const ::std::set<SCCOL>& rBreaks )
+{
+ maColManualBreaks = rBreaks;
+ InvalidatePageBreaks();
+ if (IsStreamValid())
+ SetStreamValid(FALSE);
+}
+
void ScTable::GetAllRowBreaks(set<SCROW>& rBreaks, bool bPage, bool bManual) const
{
if (bPage)
diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx
index 8e78f64b2090..ae5a7bcebe66 100644
--- a/sc/source/filter/xml/xmlcelli.cxx
+++ b/sc/source/filter/xml/xmlcelli.cxx
@@ -487,21 +487,31 @@ void ScXMLTableRowCellContext::DoMerge(const com::sun::star::table::CellAddress&
uno::Reference<table::XCellRange> xCellRange(rXMLImport.GetTables().GetCurrentXCellRange());
if ( xCellRange.is() )
{
- table::CellRangeAddress aCellAddress;
- if (IsMerged(xCellRange, aCellPos.Column, aCellPos.Row, aCellAddress))
+ // Stored merge range may actually be of a larger extend than what
+ // we support, in which case getCellRangeByPosition() throws
+ // IndexOutOfBoundsException. Do nothing then.
+ try
{
- //unmerge
+ table::CellRangeAddress aCellAddress;
+ if (IsMerged(xCellRange, aCellPos.Column, aCellPos.Row, aCellAddress))
+ {
+ //unmerge
+ uno::Reference <util::XMergeable> xMergeable (xCellRange->getCellRangeByPosition(aCellAddress.StartColumn, aCellAddress.StartRow,
+ aCellAddress.EndColumn, aCellAddress.EndRow), uno::UNO_QUERY);
+ if (xMergeable.is())
+ xMergeable->merge(sal_False);
+ }
+
+ //merge
uno::Reference <util::XMergeable> xMergeable (xCellRange->getCellRangeByPosition(aCellAddress.StartColumn, aCellAddress.StartRow,
- aCellAddress.EndColumn, aCellAddress.EndRow), uno::UNO_QUERY);
+ aCellAddress.EndColumn + nCols, aCellAddress.EndRow + nRows), uno::UNO_QUERY);
if (xMergeable.is())
- xMergeable->merge(sal_False);
+ xMergeable->merge(sal_True);
+ }
+ catch ( lang::IndexOutOfBoundsException & )
+ {
+ DBG_ERRORFILE("ScXMLTableRowCellContext::DoMerge: range to be merged larger than what we support");
}
-
- //merge
- uno::Reference <util::XMergeable> xMergeable (xCellRange->getCellRangeByPosition(aCellAddress.StartColumn, aCellAddress.StartRow,
- aCellAddress.EndColumn + nCols, aCellAddress.EndRow + nRows), uno::UNO_QUERY);
- if (xMergeable.is())
- xMergeable->merge(sal_True);
}
}
}
diff --git a/sc/source/ui/cctrl/dpcontrol.cxx b/sc/source/ui/cctrl/dpcontrol.cxx
index 2f23166966b6..82c276d98f2c 100644
--- a/sc/source/ui/cctrl/dpcontrol.cxx
+++ b/sc/source/ui/cctrl/dpcontrol.cxx
@@ -975,7 +975,7 @@ ScDPFieldPopupWindow::ScDPFieldPopupWindow(Window* pParent, ScDocument* pDoc) :
mnCurTabStop(0),
mpExtendedData(NULL),
mpOKAction(NULL),
- maWndSize(160, 330),
+ maWndSize(240, 330),
mePrevToggleAllState(STATE_DONTKNOW)
{
maTabStopCtrls.reserve(7);
@@ -1048,7 +1048,7 @@ void ScDPFieldPopupWindow::getSectionPosSize(Point& rPos, Size& rSize, SectionTy
const sal_uInt16 nMenuHeight = 60;
const sal_uInt16 nSingleItemBtnAreaHeight = 32; // height of the middle area below the list box where the single-action buttons are.
const sal_uInt16 nBottomBtnAreaHeight = 50; // height of the bottom area where the OK and Cancel buttons are.
- const sal_uInt16 nBtnWidth = 60;
+ const sal_uInt16 nBtnWidth = 90;
const sal_uInt16 nLabelHeight = static_cast< sal_uInt16 >( getLabelFont().GetHeight() );
const sal_uInt16 nBtnHeight = nLabelHeight*2;
const sal_uInt16 nBottomMargin = 10;
@@ -1105,7 +1105,7 @@ void ScDPFieldPopupWindow::getSectionPosSize(Point& rPos, Size& rSize, SectionTy
{
long h = 26;
rPos = Point(nListBoxMargin, nSingleBtnAreaY);
- rPos.X() += 75;
+ rPos.X() += 150;
rPos.Y() += (nSingleItemBtnAreaHeight - h)/2;
rSize = Size(h, h);
}
@@ -1114,7 +1114,7 @@ void ScDPFieldPopupWindow::getSectionPosSize(Point& rPos, Size& rSize, SectionTy
{
long h = 26;
rPos = Point(nListBoxMargin, nSingleBtnAreaY);
- rPos.X() += 75 + h + 10;
+ rPos.X() += 150 + h + 10;
rPos.Y() += (nSingleItemBtnAreaHeight - h)/2;
rSize = Size(h, h);
}
diff --git a/sc/source/ui/dbgui/textimportoptions.src b/sc/source/ui/dbgui/textimportoptions.src
index fff3c4b40749..69e2d69b3142 100644
--- a/sc/source/ui/dbgui/textimportoptions.src
+++ b/sc/source/ui/dbgui/textimportoptions.src
@@ -33,34 +33,34 @@
ModalDialog RID_SCDLG_TEXT_IMPORT_OPTIONS
{
Text [ en-US ] = "Import Options" ;
- Size = MAP_APPFONT ( 190 , 101 ) ;
+ Size = MAP_APPFONT ( 230 , 101 ) ;
Moveable = TRUE ;
Closeable = TRUE ;
OutputSize = TRUE ;
OKButton BTN_OK
{
- Pos = MAP_APPFONT ( 135, 6 ) ;
+ Pos = MAP_APPFONT ( 175, 6 ) ;
Size = MAP_APPFONT ( 50, 14 ) ;
DefButton = TRUE ;
};
CancelButton BTN_CANCEL
{
- Pos = MAP_APPFONT ( 135, 23 ) ;
+ Pos = MAP_APPFONT ( 175, 23 ) ;
Size = MAP_APPFONT ( 50, 14 ) ;
};
HelpButton BTN_HELP
{
- Pos = MAP_APPFONT ( 135, 43 ) ;
+ Pos = MAP_APPFONT ( 175, 43 ) ;
Size = MAP_APPFONT ( 50, 14 ) ;
};
FixedLine FL_CHOOSE_LANG
{
Pos = MAP_APPFONT( 6, 3 ) ;
- Size = MAP_APPFONT( 125, 14 ) ;
+ Size = MAP_APPFONT( 165, 14 ) ;
Text [ en-US ] = "Select the language to use for import" ;
};
@@ -68,7 +68,7 @@ ModalDialog RID_SCDLG_TEXT_IMPORT_OPTIONS
RadioButton RB_AUTOMATIC
{
Pos = MAP_APPFONT( 12, 20 ) ;
- Size = MAP_APPFONT( 50, 10 ) ;
+ Size = MAP_APPFONT( 159, 10 ) ;
TabStop = TRUE ;
Text [ en-US ] = "Automatic" ;
@@ -77,7 +77,7 @@ ModalDialog RID_SCDLG_TEXT_IMPORT_OPTIONS
RadioButton RB_CUSTOM
{
Pos = MAP_APPFONT( 12, 34 ) ;
- Size = MAP_APPFONT( 50, 10 ) ;
+ Size = MAP_APPFONT( 159, 10 ) ;
TabStop = TRUE ;
Text [ en-US ] = "Custom" ;
@@ -86,7 +86,7 @@ ModalDialog RID_SCDLG_TEXT_IMPORT_OPTIONS
ListBox LB_CUSTOM_LANG
{
Pos = MAP_APPFONT( 20, 50 ) ;
- Size = MAP_APPFONT( 100, 55 ) ;
+ Size = MAP_APPFONT( 140, 120 ) ;
TabStop = TRUE ;
DropDown = TRUE ;
Sort = TRUE ;
@@ -94,19 +94,17 @@ ModalDialog RID_SCDLG_TEXT_IMPORT_OPTIONS
FixedLine FL_OPTION
{
- Pos = MAP_APPFONT( 6, 70 );
- Size = MAP_APPFONT( 125, 14 );
-
- Text [ en-US ] = "Options" ;
+ Pos = MAP_APPFONT( 6, 70 );
+ Size = MAP_APPFONT( 165, 14 );
+ Text [ en-US ] = "Options" ;
};
CheckBox BTN_CONVERT_DATE
{
Pos = MAP_APPFONT( 12, 86 );
- Size = MAP_APPFONT( 125, 10 );
- TabStop = TRUE ;
-
- Text [ en-US ] = "Detect special numbers (such as dates)." ;
+ Size = MAP_APPFONT( 159, 10 );
+ TabStop = TRUE ;
+ Text [ en-US ] = "Detect special numbers (such as dates)." ;
};
};
diff --git a/sc/source/ui/docshell/externalrefmgr.cxx b/sc/source/ui/docshell/externalrefmgr.cxx
index 0569e95605b1..7fa31246275a 100644
--- a/sc/source/ui/docshell/externalrefmgr.cxx
+++ b/sc/source/ui/docshell/externalrefmgr.cxx
@@ -2024,7 +2024,7 @@ SfxObjectShellRef ScExternalRefManager::loadSrcDocument(sal_uInt16 nFileId, Stri
if (!isFileLoadable(aFile))
return NULL;
- String aOptions;
+ String aOptions( pFileData->maFilterOptions );
ScDocumentLoader::GetFilterName(aFile, rFilter, aOptions, true, false);
const SfxFilter* pFilter = ScDocShell::Factory().GetFilterContainer()->GetFilter4FilterName(rFilter);
@@ -2040,9 +2040,6 @@ SfxObjectShellRef ScExternalRefManager::loadSrcDocument(sal_uInt16 nFileId, Stri
setRelativeFileName(nFileId, aStr);
}
- // Update the filter data now that we are loading it again.
- setFilterData(nFileId, rFilter, aOptions);
-
SfxItemSet* pSet = new SfxAllItemSet(SFX_APP()->GetPool());
if (aOptions.Len())
pSet->Put(SfxStringItem(SID_FILE_FILTEROPTIONS, aOptions));
@@ -2077,6 +2074,13 @@ SfxObjectShellRef ScExternalRefManager::loadSrcDocument(sal_uInt16 nFileId, Stri
pExtOptNew->GetDocSettings().mnLinkCnt = nLinkCount + 1;
pNewShell->DoLoad(pMedium.release());
+
+ // with UseInteractionHandler, options may be set by dialog during DoLoad
+ String aNew = ScDocumentLoader::GetOptions(*pNewShell->GetMedium());
+ if (aNew.Len() && aNew != aOptions)
+ aOptions = aNew;
+ setFilterData(nFileId, rFilter, aOptions); // update the filter data, including the new options
+
return aRef;
}
diff --git a/sc/source/ui/src/optdlg.src b/sc/source/ui/src/optdlg.src
index ea7cabf7716d..4c64e312bc2d 100644
--- a/sc/source/ui/src/optdlg.src
+++ b/sc/source/ui/src/optdlg.src
@@ -152,13 +152,13 @@ TabPage RID_SCPAGE_CALC
CheckBox BTN_GENERAL_PREC
{
Pos = MAP_APPFONT ( 12 , 147 ) ;
- Size = MAP_APPFONT ( 136 , 10 ) ;
+ Size = MAP_APPFONT ( 148 , 10 ) ;
Text [ en-US ] = "Limit decimals for general number format" ;
};
FixedText FT_PREC
{
- Pos = MAP_APPFONT ( 150 , 148 ) ;
- Size = MAP_APPFONT ( 72 , 8 ) ;
+ Pos = MAP_APPFONT ( 138 , 148 ) ;
+ Size = MAP_APPFONT ( 84 , 8 ) ;
Text [ en-US ] = "~Decimal places" ;
Right = TRUE ;
};
diff --git a/sc/source/ui/unoobj/confuno.cxx b/sc/source/ui/unoobj/confuno.cxx
index 75e415b8f018..a680185a1d1c 100644
--- a/sc/source/ui/unoobj/confuno.cxx
+++ b/sc/source/ui/unoobj/confuno.cxx
@@ -193,11 +193,14 @@ void SAL_CALL ScDocumentConfiguration::setPropertyValue(
if (pPrinter)
{
String aString(sPrinterName);
- SfxPrinter* pNewPrinter = new SfxPrinter( pPrinter->GetOptions().Clone(), aString );
- if (pNewPrinter->IsKnown())
- pDocShell->SetPrinter( pNewPrinter, SFX_PRINTER_PRINTER );
- else
- delete pNewPrinter;
+ if (pPrinter->GetName() != aString)
+ {
+ SfxPrinter* pNewPrinter = new SfxPrinter( pPrinter->GetOptions().Clone(), aString );
+ if (pNewPrinter->IsKnown())
+ pDocShell->SetPrinter( pNewPrinter, SFX_PRINTER_PRINTER );
+ else
+ delete pNewPrinter;
+ }
}
else
throw uno::RuntimeException();
diff --git a/sc/uiconfig/scalc/toolbar/findbar.xml b/sc/uiconfig/scalc/toolbar/findbar.xml
index 9ef9d8a1a78f..0338d3156195 100644
--- a/sc/uiconfig/scalc/toolbar/findbar.xml
+++ b/sc/uiconfig/scalc/toolbar/findbar.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE toolbar:toolbar PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "toolbar.dtd">
<toolbar:toolbar xmlns:toolbar="http://openoffice.org/2001/toolbar" xmlns:xlink="http://www.w3.org/1999/xlink" toolbar:id="toolbar">
- <toolbar:toolbaritem xlink:href=".uno:FindText" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:DownSearch" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:UpSearch" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:SearchDialog" toolbar:text="Find &amp; Replace" toolbar:visible="false" toolbar:helpid="helpid:100105"/>
+ <toolbar:toolbaritem xlink:href=".uno:FindText"/>
+ <toolbar:toolbaritem xlink:href=".uno:DownSearch"/>
+ <toolbar:toolbaritem xlink:href=".uno:UpSearch"/>
+ <toolbar:toolbaritem xlink:href=".uno:SearchDialog" toolbar:visible="false"/>
</toolbar:toolbar>
diff --git a/sd/uiconfig/sdraw/toolbar/findbar.xml b/sd/uiconfig/sdraw/toolbar/findbar.xml
index 9ef9d8a1a78f..078c0fc5bed5 100644
--- a/sd/uiconfig/sdraw/toolbar/findbar.xml
+++ b/sd/uiconfig/sdraw/toolbar/findbar.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE toolbar:toolbar PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "toolbar.dtd">
<toolbar:toolbar xmlns:toolbar="http://openoffice.org/2001/toolbar" xmlns:xlink="http://www.w3.org/1999/xlink" toolbar:id="toolbar">
- <toolbar:toolbaritem xlink:href=".uno:FindText" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:DownSearch" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:UpSearch" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:SearchDialog" toolbar:text="Find &amp; Replace" toolbar:visible="false" toolbar:helpid="helpid:100105"/>
+ <toolbar:toolbaritem xlink:href=".uno:FindText"/>
+ <toolbar:toolbaritem xlink:href=".uno:DownSearch"/>
+ <toolbar:toolbaritem xlink:href=".uno:UpSearch"/>
+ <toolbar:toolbaritem xlink:href=".uno:SearchDialog" toolbar:visible="false"/>
</toolbar:toolbar>
diff --git a/sd/uiconfig/simpress/toolbar/findbar.xml b/sd/uiconfig/simpress/toolbar/findbar.xml
index 9ef9d8a1a78f..0338d3156195 100644
--- a/sd/uiconfig/simpress/toolbar/findbar.xml
+++ b/sd/uiconfig/simpress/toolbar/findbar.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE toolbar:toolbar PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "toolbar.dtd">
<toolbar:toolbar xmlns:toolbar="http://openoffice.org/2001/toolbar" xmlns:xlink="http://www.w3.org/1999/xlink" toolbar:id="toolbar">
- <toolbar:toolbaritem xlink:href=".uno:FindText" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:DownSearch" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:UpSearch" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:SearchDialog" toolbar:text="Find &amp; Replace" toolbar:visible="false" toolbar:helpid="helpid:100105"/>
+ <toolbar:toolbaritem xlink:href=".uno:FindText"/>
+ <toolbar:toolbaritem xlink:href=".uno:DownSearch"/>
+ <toolbar:toolbaritem xlink:href=".uno:UpSearch"/>
+ <toolbar:toolbaritem xlink:href=".uno:SearchDialog" toolbar:visible="false"/>
</toolbar:toolbar>
diff --git a/sfx2/source/dialog/securitypage.cxx b/sfx2/source/dialog/securitypage.cxx
index d32ee843cbf2..2ac8f6a43fee 100755..100644
--- a/sfx2/source/dialog/securitypage.cxx
+++ b/sfx2/source/dialog/securitypage.cxx
@@ -245,6 +245,36 @@ SfxSecurityPage_Impl::SfxSecurityPage_Impl( SfxSecurityPage &rTabPage, const Sfx
m_aRecordChangesCB.SetStyle( m_aRecordChangesCB.GetStyle() | WB_EARLYTOGGLE );
m_aRecordChangesCB.SetToggleHdl( LINK( this, SfxSecurityPage_Impl, RecordChangesCBToggleHdl ) );
m_aChangeProtectionPB.SetClickHdl( LINK( this, SfxSecurityPage_Impl, ChangeProtectionPBHdl ) );
+
+
+ // #i112277: for the time being (OOO 3.3) the following options should not
+ // be available. In the long run however it is planned to implement the yet
+ // missing functionality. Thus now we hide them and move the remaining ones up.
+ m_aNewPasswordToOpenFL.Hide();
+ m_aNewPasswordToOpenFT.Hide();
+ m_aNewPasswordToOpenED.Hide();
+ m_aConfirmPasswordToOpenFT.Hide();
+ m_aConfirmPasswordToOpenED.Hide();
+ m_aNewPasswordInfoFT.Hide();
+ m_aNewPasswordToModifyFL.Hide();
+ m_aNewPasswordToModifyFT.Hide();
+ m_aNewPasswordToModifyED.Hide();
+ m_aConfirmPasswordToModifyFT.Hide();
+ m_aConfirmPasswordToModifyED.Hide();
+ const long nDelta = m_aOptionsFL.GetPosPixel().Y() - m_aNewPasswordToOpenFL.GetPosPixel().Y();
+ Point aPos;
+ aPos = m_aOptionsFL.GetPosPixel();
+ aPos.Y() -= nDelta;
+ m_aOptionsFL.SetPosPixel( aPos );
+ aPos = m_aOpenReadonlyCB.GetPosPixel();
+ aPos.Y() -= nDelta;
+ m_aOpenReadonlyCB.SetPosPixel( aPos );
+ aPos = m_aRecordChangesCB.GetPosPixel();
+ aPos.Y() -= nDelta;
+ m_aRecordChangesCB.SetPosPixel( aPos );
+ aPos = m_aChangeProtectionPB.GetPosPixel();
+ aPos.Y() -= nDelta;
+ m_aChangeProtectionPB.SetPosPixel( aPos );
}
diff --git a/sfx2/source/dialog/securitypage.src b/sfx2/source/dialog/securitypage.src
index fee60404d01c..fee60404d01c 100755..100644
--- a/sfx2/source/dialog/securitypage.src
+++ b/sfx2/source/dialog/securitypage.src
diff --git a/sfx2/source/doc/sfxbasemodel.cxx b/sfx2/source/doc/sfxbasemodel.cxx
index b5a9536b12c5..7ef9fe0d2f19 100644
--- a/sfx2/source/doc/sfxbasemodel.cxx
+++ b/sfx2/source/doc/sfxbasemodel.cxx
@@ -977,6 +977,8 @@ sal_Bool SAL_CALL SfxBaseModel::attachResource( const ::rtl::OUString&
aArgs.remove( "BreakMacroSignature" );
aArgs.remove( "Stream" );
aArgs.remove( "InputStream" );
+ aArgs.remove( "URL" );
+ aArgs.remove( "Frame" );
// TODO/LATER: all the parameters that are accepted by ItemSet of the DocShell must be removed here
@@ -988,6 +990,10 @@ sal_Bool SAL_CALL SfxBaseModel::attachResource( const ::rtl::OUString&
SfxAllItemSet aSet( pObjectShell->GetPool() );
TransformParameters( SID_OPENDOC, rArgs, aSet );
+ // the arguments are not allowed to reach the medium
+ aSet.ClearItem( SID_FILE_NAME );
+ aSet.ClearItem( SID_FILLFRAME );
+
pMedium->GetItemSet()->Put( aSet );
SFX_ITEMSET_ARG( &aSet, pItem, SfxStringItem, SID_FILTER_NAME, sal_False );
if ( pItem )
diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx
index 035fd3f794de..ed924623c700 100644
--- a/sfx2/source/view/viewfrm.cxx
+++ b/sfx2/source/view/viewfrm.cxx
@@ -813,6 +813,13 @@ void SfxViewFrame::ExecReload_Impl( SfxRequest& rReq )
xNewObj->SetModifyPasswordEntered( sal_False );
xNewObj->SetReadOnly();
}
+ else if ( rReq.GetSlot() == SID_EDITDOC && bForEdit && !xNewObj->IsReadOnlyMedium() )
+ {
+ // the filter might request setting of the document to readonly state
+ // but in case of SID_EDITDOC it should not happen if the document
+ // can be opened for editing
+ xNewObj->SetReadOnlyUI( sal_False );
+ }
if ( xNewObj->IsDocShared() )
{
@@ -2144,6 +2151,8 @@ SfxViewShell* SfxViewFrame::LoadViewIntoFrame_Impl( const SfxObjectShell& i_rDoc
aTransformLoadArgs.remove( "Hidden" );
::rtl::OUString sURL( RTL_CONSTASCII_USTRINGPARAM( "private:object" ) );
+ if ( !sURL.getLength() )
+ sURL = i_rDoc.GetFactory().GetFactoryURL();
Reference< XComponentLoader > xLoader( i_rFrame, UNO_QUERY_THROW );
xLoader->loadComponentFromURL( sURL, ::rtl::OUString::createFromAscii( "_self" ), 0,
diff --git a/smoketestoo_native/smoketest.cxx b/smoketestoo_native/smoketest.cxx
index e2cb51127f47..41baeddf9edb 100644
--- a/smoketestoo_native/smoketest.cxx
+++ b/smoketestoo_native/smoketest.cxx
@@ -28,6 +28,8 @@
#include "sal/config.h"
#include "boost/noncopyable.hpp"
+#include "com/sun/star/awt/XCallback.hpp"
+#include "com/sun/star/awt/XRequestCallback.hpp"
#include "com/sun/star/beans/PropertyState.hpp"
#include "com/sun/star/beans/PropertyValue.hpp"
#include "com/sun/star/document/MacroExecMode.hpp"
@@ -40,6 +42,7 @@
#include "com/sun/star/frame/XModel.hpp"
#include "com/sun/star/frame/XNotifyingDispatch.hpp"
#include "com/sun/star/lang/EventObject.hpp"
+#include "com/sun/star/uno/Any.hxx"
#include "com/sun/star/uno/Reference.hxx"
#include "com/sun/star/uno/RuntimeException.hpp"
#include "com/sun/star/uno/Sequence.hxx"
@@ -94,6 +97,29 @@ void Listener::dispatchFinished(css::frame::DispatchResultEvent const & Result)
result_->condition.set();
}
+class Callback: public cppu::WeakImplHelper1< css::awt::XCallback > {
+public:
+ Callback(
+ css::uno::Reference< css::frame::XNotifyingDispatch > const & dispatch,
+ css::util::URL const & url,
+ css::uno::Sequence< css::beans::PropertyValue > const & arguments,
+ css::uno::Reference< css::frame::XDispatchResultListener > const &
+ listener):
+ dispatch_(dispatch), url_(url), arguments_(arguments),
+ listener_(listener)
+ { OSL_ASSERT(dispatch.is()); }
+
+private:
+ virtual void SAL_CALL notify(css::uno::Any const &)
+ throw (css::uno::RuntimeException)
+ { dispatch_->dispatchWithNotification(url_, arguments_, listener_); }
+
+ css::uno::Reference< css::frame::XNotifyingDispatch > dispatch_;
+ css::util::URL url_;
+ css::uno::Sequence< css::beans::PropertyValue > arguments_;
+ css::uno::Reference< css::frame::XDispatchResultListener > listener_;
+};
+
class Test: public CppUnit::TestFixture {
public:
virtual void setUp();
@@ -135,8 +161,7 @@ void Test::test() {
RTL_CONSTASCII_USTRINGPARAM(
"vnd.sun.star.script:Standard.Global.StartTestWithDefaultOptions?"
"language=Basic&location=document"));
- Result result;
- css::uno::Reference< css::frame::XNotifyingDispatch >(
+ css::uno::Reference< css::frame::XNotifyingDispatch > disp(
css::uno::Reference< css::frame::XDispatchProvider >(
css::uno::Reference< css::frame::XController >(
css::uno::Reference< css::frame::XModel >(
@@ -154,9 +179,18 @@ void Test::test() {
css::uno::UNO_SET_THROW)->getFrame(),
css::uno::UNO_QUERY_THROW)->queryDispatch(
url, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_self")), 0),
- css::uno::UNO_QUERY_THROW)->dispatchWithNotification(
- url, css::uno::Sequence< css::beans::PropertyValue >(),
- new Listener(&result));
+ css::uno::UNO_QUERY_THROW);
+ Result result;
+ // Shifted to main thread to work around potential deadlocks (i112867):
+ css::uno::Reference< css::awt::XRequestCallback >(
+ connection_.getFactory()->createInstance( //TODO: AsyncCallback ctor
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.AsyncCallback"))),
+ css::uno::UNO_QUERY_THROW)->addCallback(
+ new Callback(
+ disp, url, css::uno::Sequence< css::beans::PropertyValue >(),
+ new Listener(&result)),
+ css::uno::Any());
result.condition.wait();
CPPUNIT_ASSERT(result.success);
CPPUNIT_ASSERT_EQUAL(rtl::OUString(), result.result);
diff --git a/solenv/bin/build.pl b/solenv/bin/build.pl
index 66afeec6e2c7..d7bc7df26442 100755
--- a/solenv/bin/build.pl
+++ b/solenv/bin/build.pl
@@ -45,6 +45,7 @@
use lib ("$ENV{SOLARENV}/bin/modules");
use SourceConfig;
+ use RepositoryHelper;
my $in_so_env = 0;
if (defined $ENV{COMMON_ENV_TOOLS}) {
@@ -139,6 +140,8 @@
$html = '';
@ignored_errors = ();
%incompatibles = ();
+ %skip_modules = ();
+ %exclude_branches = ();
$only_platform = ''; # the only platform to prepare
$only_common = ''; # the only common output tree to delete when preparing
%build_modes = ();
@@ -167,8 +170,8 @@
$html_last_updated = 0;
%jobs_hash = ();
$html_path = undef;
- $html_file = CorrectPath($ENV{SOLARSRC} . '/' . $ENV{INPATH}. '.build.html');
$build_finished = 0;
+ $html_file = '';
%had_error = (); # hack for misteriuos windows problems - try run dmake 2 times if first time there was an error
$mkout = CorrectPath("$ENV{SOLARENV}/bin/mkout.pl");
%weights_hash = (); # hash contains info about how many modules are dependent from one module
@@ -209,7 +212,6 @@
get_options();
- $html_file = CorrectPath($html_path . '/' . $ENV{INPATH}. '.build.html') if (defined $html_path);
# my $temp_html_file = CorrectPath($tmp_dir. '/' . $ENV{INPATH}. '.build.html');
get_build_modes();
%deliver_env = ();
@@ -225,12 +227,26 @@
$deliver_env{'OUTPATH'}++;
$deliver_env{'L10N_framework'}++;
};
+ $StandDir = get_stand_dir(); # This also sets $initial_module
+ $source_config = SourceConfig -> new($StandDir);
+
+ if ($html) {
+ if (defined $html_path) {
+ $html_file = CorrectPath($html_path . '/' . $ENV{INPATH}. '.build.html');
+ } else {
+ my $log_directory = Cwd::realpath(CorrectPath($StandDir . '/../log'));
+ if ((!-d $log_directory) && (!mkdir($log_directory))) {
+ print_error("Cannot create $log_directory for writing html file\n");
+ };
+ $html_file = $log_directory . '/' . $ENV{INPATH}. '.build.html';
+ print "\nPath to html status page: $html_file\n";
+ };
+ };
if ($generate_config && ($clear_config || (scalar keys %remove_from_config)||(scalar keys %add_to_config))) {
generate_config_file();
exit 0;
}
- $StandDir = get_stand_dir(); # This also sets $initial_module
get_module_and_buildlist_paths();
provide_consistency() if (defined $ENV{CWS_WORK_STAMP} && defined($ENV{COMMON_ENV_TOOLS}));
@@ -342,7 +358,6 @@ sub rename_file {
};
sub generate_config_file {
- my $source_config = SourceConfig->new();
$source_config->add_active_modules([keys %add_to_config], 1) if (scalar %add_to_config);
$source_config->remove_activated_modules([keys %remove_from_config], 1) if (scalar %remove_from_config);
$source_config->remove_all_activated_modules() if ($clear_config);
@@ -556,23 +571,36 @@ sub get_build_list_path {
# Get dependencies hash of the current and all parent projects
#
sub get_parent_deps {
- my (%parents_deps_hash, $module, $parent);
my $prj_dir = shift;
my $deps_hash = shift;
- my @unresolved_parents = get_parents_array($prj_dir);
- $parents_deps_hash{$_}++ foreach (@unresolved_parents);
- $$deps_hash{$prj_dir} = \%parents_deps_hash;
- while ($module = pop(@unresolved_parents)) {
+ my @unresolved_parents = ($prj_dir);
+ my %skipped_branches = ();
+ while (my $module = pop(@unresolved_parents)) {
+ next if (defined $$deps_hash{$module});
my %parents_deps_hash = ();
- $parents_deps_hash{$_}++ foreach (get_parents_array($module));
+ foreach (get_parents_array($module)) {
+ if (defined $exclude_branches{$_}) {
+ $skipped_branches{$_}++;
+ next;
+ };
+ $parents_deps_hash{$_}++;
+ }
$$deps_hash{$module} = \%parents_deps_hash;
foreach $Parent (keys %parents_deps_hash) {
- if (!defined($$deps_hash{$Parent})) {
+ if (!defined($$deps_hash{$Parent}) && (!defined $exclude_branches{$module})) {
push (@unresolved_parents, $Parent);
};
};
};
check_deps_hash($deps_hash);
+ foreach (keys %skipped_branches) {
+ print $echo . "Skipping module's $_ branch\n";
+ delete $exclude_branches{$_};
+ };
+ my @missing_branches = keys %exclude_branches;
+ if (scalar @missing_branches) {
+ print_error("For $prj_dir branche(s): \"@missing_branches\" not found\n");
+ };
};
sub store_weights {
@@ -605,18 +633,18 @@ sub expand_dependencies {
};
#
-# This procedure fills out the %reversed_dependencies hash,
-# the hash contaninig the info about modules "waiting" for the module
+# This procedure fills the second hash with reversed dependencies,
+# ie, with info about modules "waiting" for the module
#
sub reverse_dependensies {
- my $deps_hash = shift;
+ my ($deps_hash, $reversed) = @_;
foreach my $module (keys %$deps_hash) {
foreach (keys %{$$deps_hash{$module}}) {
- if (defined $reversed_dependencies{$_}) {
- ${$reversed_dependencies{$_}}{$module}++
+ if (defined $$reversed{$_}) {
+ ${$$reversed{$_}}{$module}++
} else {
my %single_module_dep_hash = ($module => 1);
- $reversed_dependencies{$_} = \%single_module_dep_hash;
+ $$reversed{$_} = \%single_module_dep_hash;
};
};
};
@@ -635,8 +663,12 @@ sub build_all {
};
modules_classify(keys %global_deps_hash);
expand_dependencies (\%global_deps_hash);
-# prepare_build_from(\%global_deps_hash) if (scalar keys %incompatibles);
- prepare_incompatible_build(\%global_deps_hash) if ($incompatible);
+ prepare_incompatible_build(\%global_deps_hash) if ($incompatible && (!$build_from_with_branches));
+ if ($build_from_with_branches) {
+ my %reversed_full_deps_hash = ();
+ reverse_dependensies(\%global_deps_hash, \%reversed_full_deps_hash);
+ prepare_build_from_with_branches(\%global_deps_hash, \%reversed_full_deps_hash);
+ }
if ($build_all_cont || $build_since) {
prepare_build_all_cont(\%global_deps_hash);
};
@@ -653,13 +685,13 @@ sub build_all {
print_error("There are modules:\n@missing_modules\n\nthat should be built, but they are not activated. Please, verify your $source_config_file.\n");
};
};
- foreach my $module (%dead_parents) {
+ foreach my $module (keys %dead_parents, keys %skip_modules) {
remove_from_dependencies($module, \%global_deps_hash);
delete ($global_deps_hash{$module}) if (defined $global_deps_hash{$module});
};
store_weights(\%global_deps_hash);
backup_deps_hash(\%global_deps_hash, \%global_deps_hash_backup);
- reverse_dependensies(\%global_deps_hash_backup);
+ reverse_dependensies(\%global_deps_hash_backup, \%reversed_dependencies);
$modules_number = scalar keys %global_deps_hash;
initialize_html_info($_) foreach (keys %global_deps_hash);
if ($processes_to_run) {
@@ -1100,6 +1132,7 @@ sub get_commands {
while ($arg = pop(@dmake_args)) {
$dmake .= ' '.$arg;
};
+ $dmake .= ' verbose=true' if ($html);
};
#
@@ -1110,34 +1143,44 @@ sub get_stand_dir {
$ENV{mk_tmp} = '';
die "No environment set\n";
};
- my $StandDir;
- if ( defined $ENV{PWD} ) {
- $StandDir = $ENV{PWD};
- } elsif (defined $ENV{_cwd}) {
- $StandDir = $ENV{_cwd};
- } else {
- $StandDir = cwd();
- };
- my $previous_dir = '';
- do {
- foreach (@possible_build_lists) {# ('build.lst', 'build.xlist');
- if (-e $StandDir . '/prj/'.$_) {
- $initial_module = File::Basename::basename($StandDir);
- $build_list_paths{$initial_module} =$StandDir . '/prj/'.$_;
- $StandDir = File::Basename::dirname($StandDir);
- $module_paths{$initial_module} = $StandDir . "/$initial_module";
+ my $repository_helper = RepositoryHelper->new();
+ my $StandDir = $repository_helper->get_repository_root();
+ my $initial_dir = $repository_helper->get_initial_directory();
+ if ($StandDir eq $initial_dir) {
+ print_error('Found no project to build');
+ };
+ $initial_module = substr($initial_dir, length($StandDir) + 1);
+ if ($initial_module =~ /\\|\//) {
+ $initial_module = File::Basename::dirname($initial_module);
+ };
+ $module_paths{$initial_module} = $StandDir . "/$initial_module";
+# $build_list_paths{$initial_module} =$StandDir . '/prj/'.$_;
+# if ( defined $ENV{PWD} ) {
+# $StandDir = $ENV{PWD};
+# } elsif (defined $ENV{_cwd}) {
+# $StandDir = $ENV{_cwd};
+# } else {
+# $StandDir = cwd();
+# };
+# my $previous_dir = '';
+# do {
+# foreach (@possible_build_lists) {# ('build.lst', 'build.xlist');
+# if (-e $StandDir . '/prj/'.$_) {
+# $initial_module = File::Basename::basename($StandDir);
+# $build_list_paths{$initial_module} =$StandDir . '/prj/'.$_;
+# $StandDir = File::Basename::dirname($StandDir);
+# $module_paths{$initial_module} = $StandDir . "/$initial_module";
return $StandDir;
- } elsif ($StandDir eq $previous_dir) {
- $ENV{mk_tmp} = '';
- print_error('Found no project to build');
- };
- };
- $previous_dir = $StandDir;
- $StandDir = File::Basename::dirname(Cwd::realpath($StandDir));
- print_error('Found no project to build') if (!$StandDir);
- }
-# while (chdir '..');
- while (chdir "$StandDir");
+# } elsif ($StandDir eq $previous_dir) {
+# $ENV{mk_tmp} = '';
+# print_error('Found no project to build');
+# };
+# };
+# $previous_dir = $StandDir;
+# $StandDir = File::Basename::dirname(Cwd::realpath($StandDir));
+# print_error('Found no project to build') if (!$StandDir);
+# }
+# while (chdir "$StandDir");
};
#
@@ -1236,7 +1279,7 @@ sub check_deps_hash {
$jobs_hash{$key} = { SHORT_NAME => $string,
BUILD_NUMBER => $build_number,
STATUS => 'waiting',
- LOG_PATH => $module . "/$ENV{INPATH}/misc/logs/$log_name",
+ LOG_PATH => '../' . $source_config->get_module_repository($module) . "/$module/$ENV{INPATH}/misc/logs/$log_name",
LONG_LOG_PATH => CorrectPath($module_paths{$module} . "/$ENV{INPATH}/misc/logs/$log_name"),
START_TIME => 0,
FINISH_TIME => 0,
@@ -1392,7 +1435,7 @@ sub print_error {
sub usage {
print STDERR "\nbuild\n";
- print STDERR "Syntax: build [--all|-a[:prj_name]]|[--from|-f prj_name1[:prj_name2] [prj_name3 [...]]]|[--since|-c prj_name] [--with_branches|-b]|[--prepare|-p][:platform] [--deliver|-d [--dlv_switch deliver_switch]]] [-P processes|--server [--setenvstring \"string\"] [--client_timeout MIN] [--port port1[:port2:...:portN]]] [--show|-s] [--help|-h] [--file|-F] [--ignore|-i] [--version|-V] [--mode|-m OOo[,SO[,EXT]] [--html [--html_path html_file_path] [--dontgraboutput]] [--pre_job=pre_job_sring] [--job=job_string|-j] [--post_job=post_job_sring] [--stoponerror] [--genconf [--removeall|--clear|--remove|--add [module1,module2[,...,moduleN]]]] [--interactive]\n";
+ print STDERR "Syntax: build [--all|-a[:prj_name]]|[--from|-f prj_name1[:prj_name2] [prj_name3 [...]]]|[--since|-c prj_name] [--with_branches prj_name1[:prj_name2] [--skip prj_name1[:prj_name2] [prj_name3 [...]] [prj_name3 [...]|-b]|[--prepare|-p][:platform] [--deliver|-d [--dlv_switch deliver_switch]]] [-P processes|--server [--setenvstring \"string\"] [--client_timeout MIN] [--port port1[:port2:...:portN]]] [--show|-s] [--help|-h] [--file|-F] [--ignore|-i] [--version|-V] [--mode|-m OOo[,SO[,EXT]] [--html [--html_path html_file_path] [--dontgraboutput]] [--pre_job=pre_job_sring] [--job=job_string|-j] [--post_job=post_job_sring] [--stoponerror] [--genconf [--removeall|--clear|--remove|--add [module1,module2[,...,moduleN]]]] [--exclude_branch_from prj_name1[:prj_name2] [prj_name3 [...]]] [--interactive]\n";
print STDERR "Example1: build --from sfx2\n";
print STDERR " - build all projects dependent from sfx2, starting with sfx2, finishing with the current module\n";
print STDERR "Example2: build --all:sfx2\n";
@@ -1405,9 +1448,11 @@ sub usage {
print STDERR "\nSwitches:\n";
print STDERR " --all - build all projects from very beginning till current one\n";
print STDERR " --from - build all projects dependent from the specified (including it) till current one\n";
+ print STDERR " --exclude_branch_from - exclude module(s) and its branch from the build\n";
print STDERR " --mode OOo - build only projects needed for OpenOffice.org\n";
print STDERR " --prepare - clear all projects for incompatible build from prj_name till current one [for platform] (cws version)\n";
- print STDERR " --with_branches- build all projects in neighbour branches and current branch starting from actual project\n";
+ print STDERR " --with_branches- the same as \"--from\" but with build all projects in neighbour branches\n";
+ print STDERR " --skip - do not build certain module(s)\n";
print STDERR " --since - build all projects beginning from the specified till current one (the same as \"--all:prj_name\", but skipping prj_name)\n";
print STDERR " --checkmodules - check if all required parent projects are availlable\n";
print STDERR " --show - show what is going to be built\n";
@@ -1462,19 +1507,25 @@ sub get_options {
$arg =~ /^--dlv_switch$/ and $dlv_switch = shift @ARGV and next;
$arg =~ /^--file$/ and $cmd_file = shift @ARGV and next;
$arg =~ /^-F$/ and $cmd_file = shift @ARGV and next;
+ $arg =~ /^--skip$/ and get_modules_passed(\%skip_modules) and next;
- $arg =~ /^--with_branches$/ and $build_all_parents = 1
- and $build_from_with_branches = shift @ARGV and next;
- $arg =~ /^-b$/ and $build_all_parents = 1
- and $build_from_with_branches = shift @ARGV and next;
-
+ if ($arg =~ /^--with_branches$/ || $arg =~ /^-b$/) {
+ $build_from_with_branches = 1;
+ $build_all_parents = 1;
+ get_modules_passed(\%incompatibles);
+ next;
+ };
$arg =~ /^--all:(\S+)$/ and $build_all_parents = 1
and $build_all_cont = $1 and next;
$arg =~ /^-a:(\S+)$/ and $build_all_parents = 1
and $build_all_cont = $1 and next;
if ($arg =~ /^--from$/ || $arg =~ /^-f$/) {
$build_all_parents = 1;
- get_incomp_projects();
+ get_modules_passed(\%incompatibles);
+ next;
+ };
+ if ($arg =~ /^--exclude_branch_from$/) {
+ get_modules_passed(\%exclude_branches);
next;
};
$arg =~ /^--prepare$/ and $prepare = 1 and next;
@@ -1527,8 +1578,12 @@ sub get_options {
print_error("\"--html_path\" switch is used only with \"--html\"") if ($html_path);
print_error("\"--dontgraboutput\" switch is used only with \"--html\"") if ($dont_grab_output);
};
+ if ((scalar keys %exclude_branches) && !$build_all_parents) {
+ print_error("\"--exclude_branch_from\" is not applicable for one module builds!!");
+ };
$grab_output = 0 if ($dont_grab_output);
print_error('Switches --with_branches and --all collision') if ($build_from_with_branches && $build_all_cont);
+ print_error('Switch --skip is for building multiple modules only!!') if ((scalar keys %skip_modules) && (!$build_all_parents));
# print_error('Please prepare the workspace on one of UNIX platforms') if ($prepare && ($ENV{GUI} ne 'UNX'));
print_error('Switches --with_branches and --since collision') if ($build_from_with_branches && $build_since);
if ($show) {
@@ -1593,7 +1648,6 @@ sub get_options {
sub get_module_and_buildlist_paths {
if ($build_all_parents || $checkparents) {
- my $source_config = SourceConfig -> new($StandDir);
$source_config_file = $source_config->get_config_file_path();
$active_modules{$_}++ foreach ($source_config->get_active_modules());
my %active_modules_copy = %active_modules;
@@ -1652,7 +1706,13 @@ sub cancel_build {
$message_part .= "--from @broken_modules_names\n";
};
} else {
- $message_part .= "--all:@broken_modules_names\n";
+ if ($processes_to_run) {
+ $message_part .= "--from ";
+ } else {
+ $message_part .= "--all:";
+ };
+ $message_part .= "@broken_modules_names\n";
+
};
if ($broken_modules_number && $build_all_parents) {
print "\n";
@@ -2109,12 +2169,12 @@ sub modules_classify {
#
# This procedure provides consistency for cws
-# and optimized build (ie in case of -with_branches, -all:prj_name
+# and optimized build (ie in case of --with_branches, -all:prj_name
# and -since switches)
#
sub provide_consistency {
check_dir();
- foreach $var_ref (\$build_from_with_branches, \$build_all_cont, \$build_since) {
+ foreach $var_ref (\$build_all_cont, \$build_since) {
if ($$var_ref) {
return if (defined $module_paths{$$var_ref});
print_error("Cannot find module '$$var_ref'", 9);
@@ -2257,6 +2317,20 @@ sub fix_permissions {
chmod '0664', $file;
};
+sub prepare_build_from_with_branches {
+ ($full_deps_hash, $reversed_full_deps_hash) = @_;
+ foreach my $prerequisite (keys %$full_deps_hash) {
+ foreach my $dependent_module (keys %incompatibles) {
+ if (defined ${$$reversed_full_deps_hash{$prerequisite}}{$dependent_module}) {
+ remove_from_dependencies($prerequisite, $full_deps_hash);
+ delete $$full_deps_hash{$prerequisite};
+# print "Removed $prerequisite\n";
+ last;
+ };
+ };
+ };
+};
+
#
# Removes projects which it is not necessary to build
# in incompatible build
@@ -2268,7 +2342,6 @@ sub prepare_incompatible_build {
if (!defined $$deps_hash{$module}) {
print_error("The module $initial_module is independent from $module\n");
}
- delete $incompatibles{$module};
$incompatibles{$module} = $$deps_hash{$module};
delete $$deps_hash{$module};
}
@@ -2286,8 +2359,8 @@ sub prepare_incompatible_build {
@modules_built = keys %$deps_hash;
%add_to_config = %$deps_hash;
if ($prepare) {
- if ((!defined $ENV{UPDATER}) || (defined $ENV{CWS_WORK_STAMP})) {
- SourceConfig->new()->add_active_modules([keys %add_to_config], 0);
+ if ((!(defined $ENV{UPDATER} && (!defined $ENV{CWS_WORK_STAMP}))) || (defined $ENV{CWS_WORK_STAMP})) {
+ $source_config->add_active_modules([keys %add_to_config], 0);
}
clear_delivered();
}
@@ -2332,21 +2405,6 @@ sub prepare_incompatible_build {
#
# Removes projects which it is not necessary to build
-# with -with_branches switch
-#
-#sub prepare_build_from {
-# my ($prj, $deps_hash);
-# $deps_hash = shift;
-# my %from_deps_hash = (); # hash of dependencies of the -from project
-# get_parent_deps($build_from_with_branches, \%from_deps_hash);
-# foreach $prj (keys %from_deps_hash) {
-# delete $$deps_hash{$prj};
-# remove_from_dependencies($prj, $deps_hash);
-# };
-#};
-
-#
-# Removes projects which it is not necessary to build
# with --all:prj_name or --since switch
#
sub prepare_build_all_cont {
@@ -2412,7 +2470,8 @@ sub get_list_of_modules {
# };
};
-sub get_incomp_projects {
+sub get_modules_passed {
+ my $hash_ref = shift;
my $option = '';
while ($option = shift @ARGV) {
if ($option =~ /^-+/) {
@@ -2424,7 +2483,7 @@ sub get_incomp_projects {
print_error("\'--from\' switch collision") if ($build_all_cont);
$build_all_cont = $';
};
- $incompatibles{$option}++;
+ $$hash_ref{$option}++;
};
};
};
diff --git a/solenv/bin/modules/RepositoryHelper.pm b/solenv/bin/modules/RepositoryHelper.pm
new file mode 100644
index 000000000000..7677376be70e
--- /dev/null
+++ b/solenv/bin/modules/RepositoryHelper.pm
@@ -0,0 +1,205 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+#*************************************************************************
+#
+# RepositoryHelper - Perl for working with repositories and underlying SCM
+#
+# usage: see below
+#
+#*************************************************************************
+
+package RepositoryHelper;
+
+use strict;
+
+
+use Carp;
+use Cwd qw (cwd);
+use File::Basename;
+#use File::Temp qw(tmpnam);
+
+my $debug = 0;
+
+##### profiling #####
+
+##### ctor #####
+
+sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $initial_directory = shift;
+ if ($initial_directory) {
+ $initial_directory = Cwd::realpath($initial_directory);
+ } else {
+ if ( defined $ENV{PWD} ) {
+ $initial_directory = $ENV{PWD};
+ } elsif (defined $ENV{_cwd}) {
+ $initial_directory = $ENV{_cwd};
+ } else {
+ $initial_directory = cwd();
+ };
+ };
+ my $self = {};
+ $self->{INITIAL_DIRECTORY} = $initial_directory;
+ $self->{REPOSITORY_ROOT} = undef;
+ $self->{REPOSITORY_NAME} = undef;
+ $self->{SCM_NAME} = undef;
+ detect_repository($self);
+ bless($self, $class);
+ return $self;
+}
+
+##### methods #####
+sub get_repository_root
+{
+ my $self = shift;
+ return $self->{REPOSITORY_ROOT};
+}
+
+sub get_initial_directory
+{
+ my $self = shift;
+ return $self->{INITIAL_DIRECTORY};
+}
+
+sub get_scm_name
+{
+ my $self = shift;
+ return$self->{SCM_NAME};
+}
+
+##### private methods #####
+sub search_for_hg {
+ my $self = shift;
+ my $hg_root;
+ my $scm_name = 'hg';
+ if (open(COMMAND, "$scm_name root 2>&1 |")) {
+ foreach (<COMMAND>) {
+ next if (/^Not trusting file/);
+ chomp;
+ $hg_root = $_;
+ last;
+ };
+ close COMMAND;
+ chomp $hg_root;
+ if ($hg_root !~ /There is no Mercurial repository here/) {
+ $self->{REPOSITORY_ROOT} = $hg_root;
+ $self->{SCM_NAME} = $scm_name;
+ return 1;
+ };
+ };
+ return 0;
+};
+
+sub search_via_build_lst {
+ my $self = shift;
+ my @possible_build_lists = ('build.lst', 'build.xlist'); # build lists names
+ my $previous_dir = '';
+ my $rep_root_candidate = $self->{INITIAL_DIRECTORY};
+ do {
+ foreach (@possible_build_lists) {# ('build.lst', 'build.xlist');
+ if (-e $rep_root_candidate . '/prj/'.$_) {
+ $self->{REPOSITORY_ROOT} = File::Basename::dirname($rep_root_candidate);
+ return 1;
+ } elsif ($rep_root_candidate eq $previous_dir) {
+ return 0;
+ };
+ };
+ $previous_dir = $rep_root_candidate;
+ $rep_root_candidate = File::Basename::dirname(Cwd::realpath($rep_root_candidate));
+ return 0 if (!$rep_root_candidate);
+ }
+ while (chdir "$rep_root_candidate");
+};
+
+sub detect_repository {
+ my $self = shift;
+ return if (search_via_build_lst($self));
+ chdir $self->{INITIAL_DIRECTORY};
+ return if (search_for_hg($self));
+ croak('Cannot determine source directory/repository for ' . $self->{INITIAL_DIRECTORY});
+};
+
+##### finish #####
+
+1; # needed by use or require
+
+__END__
+
+=head1 NAME
+
+RepositoryHelper - Perl module for working with repositories and underlying SCM
+
+=head1 SYNOPSIS
+
+ # example that will analyze sources and return the source root directory
+
+ use RepositoryHelper;
+
+ # Create a new instance:
+ $a = RepositoryHelper->new();
+
+ # Get repositories for the actual workspace:
+ $a->get_repository_root();
+
+
+=head1 DESCRIPTION
+
+RepositoryHelper is a perlPerl module for working with repositories and underlying SCM
+in the database.
+
+Methods:
+
+RepositoryHelper::new()
+
+Creates a new instance of RepositoryHelper. Can be initialized by: some path which likely to belong to a repository, default - empty, the current dir will be taken.
+
+RepositoryHelper::get_repository_root()
+
+Returns the repository root, retrieved by SCM methods or on educated guess...
+
+RepositoryHelper::get_initial_directory()
+
+Returns full path to the initialistion directory.
+
+=head2 EXPORT
+
+RepositoryHelper::new()
+RepositoryHelper::get_repository_root()
+RepositoryHelper::get_scm_name()
+RepositoryHelper::get_initial_directory()
+
+=head1 AUTHOR
+
+Vladimir Glazunov, vg@openoffice.org
+
+=head1 SEE ALSO
+
+perl(1).
+
+=cut
diff --git a/solenv/bin/modules/SourceConfig.pm b/solenv/bin/modules/SourceConfig.pm
index 9379b7764d0a..dfaa797d8f48 100644..100755
--- a/solenv/bin/modules/SourceConfig.pm
+++ b/solenv/bin/modules/SourceConfig.pm
@@ -38,10 +38,11 @@ package SourceConfig;
use strict;
use constant SOURCE_CONFIG_FILE_NAME => 'source_config';
-use constant SOURCE_CONFIG_VERSION => 2;
+use constant SOURCE_CONFIG_VERSION => 3;
use Carp;
use Cwd;
+use RepositoryHelper;
use File::Basename;
use File::Temp qw(tmpnam);
@@ -75,8 +76,9 @@ sub new {
$source_root .= '/..';
}
} else {
- $source_root = Cwd::realpath($ENV{SOURCE_ROOT_DIR});
+ $source_root = $ENV{SOURCE_ROOT_DIR};
};
+ $source_root = Cwd::realpath($source_root);
$self->{SOURCE_ROOT} = $source_root;
$self->{DEBUG} = 0;
$self->{VERBOSE} = 0;
@@ -94,14 +96,16 @@ sub new {
$self->{WARNINGS} = [];
$self->{REPORT_MESSAGES} = [];
$self->{CONFIG_FILE_CONTENT} = [];
- $self->{DEFAULT_REPOSITORY} = undef;
if (defined $self->{USER_SOURCE_ROOT}) {
${$self->{REPOSITORIES}}{File::Basename::basename($self->{USER_SOURCE_ROOT})} = $self->{USER_SOURCE_ROOT};
- $self->{DEFAULT_REPOSITORY} = File::Basename::basename($self->{USER_SOURCE_ROOT});
};
$self->{SOURCE_CONFIG_FILE} = get_config_file($self->{SOURCE_ROOT}) if (!defined $self->{SOURCE_CONFIG_FILE});
$self->{SOURCE_CONFIG_DEFAULT} = $self->{SOURCE_ROOT} .'/'.SOURCE_CONFIG_FILE_NAME;
+ if (defined $self->{USER_SOURCE_ROOT}) {
+ ${$self->{REPOSITORIES}}{File::Basename::basename($self->{USER_SOURCE_ROOT})} = $self->{USER_SOURCE_ROOT};
+ };
read_config_file($self);
+ get_module_paths($self);
bless($self, $class);
return $self;
}
@@ -118,6 +122,19 @@ sub get_repositories
return sort keys %{$self->{REPOSITORIES}};
}
+sub add_repository
+{
+ my $self = shift;
+ my $new_rep_path = shift;
+ $new_rep_path = Cwd::realpath($new_rep_path);
+ my $new_rep_name = File::Basename::basename($new_rep_path);
+ if (defined ${$self->{REPOSITORIES}}{$new_rep_name}) {
+ croak("Repository $new_rep_name is already defined!!");
+ };
+ ${$self->{REPOSITORIES}}{$new_rep_name} = $new_rep_path;
+ $self -> get_repository_module_paths($new_rep_name);
+}
+
sub get_config_file_default_path {
my $self = shift;
return $self->{SOURCE_CONFIG_DEFAULT};
@@ -131,7 +148,6 @@ sub get_config_file_path {
sub get_module_repository {
my $self = shift;
my $module = shift;
- $self -> get_module_paths() if (!scalar keys %{$self->{MODULE_PATHS}});
if (defined ${$self->{MODULE_REPOSITORY}}{$module}) {
return ${$self->{MODULE_REPOSITORY}}{$module};
} else {
@@ -143,7 +159,6 @@ sub get_module_repository {
sub get_module_path {
my $self = shift;
my $module = shift;
- $self -> get_module_paths() if (!scalar keys %{$self->{MODULE_PATHS}});
if (defined ${$self->{MODULE_PATHS}}{$module}) {
return ${$self->{MODULE_PATHS}}{$module};
} else {
@@ -155,10 +170,17 @@ sub get_module_path {
sub get_module_build_list {
my $self = shift;
my $module = shift;
- $self -> get_buildlist_paths() if (!scalar keys %{$self->{MODULE_BUILD_LIST_PATHS}});
if (defined ${$self->{MODULE_BUILD_LIST_PATHS}}{$module}) {
return ${$self->{MODULE_BUILD_LIST_PATHS}}{$module};
} else {
+ my @possible_build_lists = ('build.lst', 'build.xlist'); # build lists names
+ foreach (@possible_build_lists) {
+ my $possible_path = ${$self->{MODULE_PATHS}}{$module} . "/prj/$_";
+ if (-e $possible_path) {
+ ${$self->{MODULE_BUILD_LIST_PATHS}}{$module} = $possible_path;
+ return $possible_path;
+ };
+ };
Carp::cluck("No build list in module $module found!!\n") if ($self->{DEBUG});
return undef;
};
@@ -168,7 +190,6 @@ sub get_all_modules
{
my $self = shift;
my $module = shift;
- $self -> get_module_paths() if (!scalar keys %{$self->{MODULE_PATHS}});
return sort keys %{$self->{MODULE_PATHS}};
};
@@ -178,7 +199,6 @@ sub get_active_modules
if (scalar keys %{$self->{ACTIVATED_MODULES}}) {
return sort keys %{$self->{ACTIVATED_MODULES}};
}
- $self -> get_module_paths() if (!scalar keys %{$self->{MODULE_PATHS}});
return sort keys %{$self->{REAL_MODULES}};
}
@@ -189,49 +209,42 @@ sub is_active
if (scalar keys %{$self->{ACTIVATED_MODULES}}) {
return exists ($self->{ACTIVATED_MODULES}{$module});
}
- $self -> get_module_paths() if (!scalar keys %{$self->{MODULE_PATHS}});
return exists ($self->{REAL_MODULES}{$module});
}
##### private methods #####
-sub get_buildlist_paths {
+sub get_repository_module_paths {
my $self = shift;
- $self -> get_module_paths() if (!scalar keys %{$self->{MODULE_PATHS}});
- my @possible_build_lists = ('build.lst', 'build.xlist'); # build lists names
- foreach my $module (keys %{$self->{MODULE_PATHS}}) {
- foreach (@possible_build_lists) {
- my $possible_path = ${$self->{MODULE_PATHS}}{$module} . "/prj/$_";
- ${$self->{MODULE_BUILD_LIST_PATHS}}{$module} = $possible_path if (-e $possible_path);
+ my $repository = shift;
+ my $repository_path = ${$self->{REPOSITORIES}}{$repository};
+ if (opendir DIRHANDLE, $repository_path) {
+ foreach my $module (readdir(DIRHANDLE)) {
+ next if (($module =~ /^\.+/) || (!-d "$repository_path/$module"));
+ my $module_entry = $module;
+ if (($module !~ s/\.lnk$//) && ($module !~ s/\.link$//)) {
+ $self->{REAL_MODULES}{$module}++;
+ }
+ my $possible_path = "$repository_path/$module_entry";
+ if (-d $possible_path) {
+ if (defined ${$self->{MODULE_PATHS}}{$module}) {
+ close DIRHANDLE;
+ croak("Ambiguous paths for module $module: $possible_path and " . ${$self->{MODULE_PATHS}}{$module});
+ };
+ ${$self->{MODULE_PATHS}}{$module} = $possible_path;
+ ${$self->{MODULE_REPOSITORY}}{$module} = $repository;
+ }
};
+ close DIRHANDLE;
+ } else {
+ croak("Cannot read $repository_path repository content");
};
};
sub get_module_paths {
my $self = shift;
foreach my $repository (keys %{$self->{REPOSITORIES}}) {
- my $repository_path = ${$self->{REPOSITORIES}}{$repository};
- if (opendir DIRHANDLE, $repository_path) {
- foreach my $module (readdir(DIRHANDLE)) {
- next if (($module =~ /^\.+/) || (!-d "$repository_path/$module"));
- my $module_entry = $module;
- if (($module !~ s/\.lnk$//) && ($module !~ s/\.link$//)) {
- $self->{REAL_MODULES}{$module}++;
- }
- my $possible_path = "$repository_path/$module_entry";
- if (-d $possible_path) {
- if (defined ${$self->{MODULE_PATHS}}{$module}) {
- close DIRHANDLE;
- croak("Ambiguous paths for module $module: $possible_path and " . ${$self->{MODULE_PATHS}}{$module});
- };
- ${$self->{MODULE_PATHS}}{$module} = $possible_path;
- ${$self->{MODULE_REPOSITORY}}{$module} = $repository;
- }
- };
- close DIRHANDLE;
- } else {
- croak("Cannot read $_ repository content");
- };
+ get_repository_module_paths($self, $repository);
};
my @false_actives = ();
foreach (keys %{$self->{ACTIVATED_MODULES}}) {
@@ -248,31 +261,21 @@ sub get_config_file {
return '';
};
-sub get_hg_root {
+#
+# Fallback - fallback repository is based on RepositoryHelper educated guess
+#
+sub get_fallback_repository {
my $self = shift;
- return $self->{USER_SOURCE_ROOT} if (defined $self->{USER_SOURCE_ROOT});
- my $hg_root;
- if (open(COMMAND, "hg root 2>&1 |")) {
- foreach (<COMMAND>) {
- next if (/^Not trusting file/);
- chomp;
- $hg_root = $_;
- last;
- };
- close COMMAND;
- chomp $hg_root;
- if ($hg_root !~ /There is no Mercurial repository here/) {
- return $hg_root;
- };
- };
- croak('Cannot open find source_config and/or determine hg root directory for ' . cwd());
+ my $repository_root = RepositoryHelper->new()->get_repository_root();
+ ${$self->{REPOSITORIES}}{File::Basename::basename($repository_root)} = $repository_root;
};
sub read_config_file {
my $self = shift;
if (!$self->{SOURCE_CONFIG_FILE}) {
- my $repository_root = get_hg_root($self);
- ${$self->{REPOSITORIES}}{File::Basename::basename($repository_root)} = $repository_root;
+ if (!defined $self->{USER_SOURCE_ROOT}) {
+ get_fallback_repository($self);
+ };
return;
};
my $repository_section = 0;
@@ -304,11 +307,9 @@ sub read_config_file {
my $repository_source_path = $self->{SOURCE_ROOT} . "/$1";
if (defined $ENV{UPDMINOREXT}) {
$repository_source_path .= $ENV{UPDMINOREXT};
- };
- if ((defined $self->{DEFAULT_REPOSITORY}) && (${$self->{REPOSITORIES}}{$self->{DEFAULT_REPOSITORY}} eq $repository_source_path)) {
- delete ${$self->{REPOSITORIES}}{$self->{DEFAULT_REPOSITORY}};
- $self->{DEFAULT_REPOSITORY} = undef;
-
+ if (defined ${$self->{REPOSITORIES}}{$1.$ENV{UPDMINOREXT}}) {
+ delete ${$self->{REPOSITORIES}}{$1.$ENV{UPDMINOREXT}};
+ };
};
${$self->{REPOSITORIES}}{$1} = $repository_source_path;
${$self->{ACTIVATED_REPOSITORIES}}{$1}++;
@@ -323,9 +324,7 @@ sub read_config_file {
};
close SOURCE_CONFIG_FILE;
if (!scalar keys %{$self->{REPOSITORIES}}) {
- # Fallback - default repository is the directory where is our module...
- my $hg_root = get_hg_root($self);
- ${$self->{REPOSITORIES}}{File::Basename::basename($hg_root)} = $hg_root;
+ get_fallback_repository($self);
};
} else {
croak('Cannot open ' . $self->{SOURCE_CONFIG_FILE} . 'for reading');
@@ -379,15 +378,18 @@ sub remove_activated_modules {
sub add_active_repositories {
my $self = shift;
$self->{NEW_REPOSITORIES} = shift;
- croak('Empty module list passed for adding to source_config') if (!scalar @{$self->{NEW_REPOSITORIES}});
+ croak('Empty repository list passed for addition to source_config') if (!scalar @{$self->{NEW_REPOSITORIES}});
$self->{VERBOSE} = shift;
+ foreach (@{$self->{NEW_REPOSITORIES}}) {
+ $self->add_repository($_);
+ };
generate_config_file($self);
};
sub add_active_modules {
my $self = shift;
$self->{NEW_MODULES} = shift;
- croak('Empty module list passed for adding to source_config') if (!scalar @{$self->{NEW_MODULES}});
+ croak('Empty module list passed for addition to source_config') if (!scalar @{$self->{NEW_MODULES}});
$self->{VERBOSE} = shift;
generate_config_file($self);
};
@@ -535,6 +537,8 @@ SourceConfig - Perl extension for parsing general info databases
# Get repositories for the actual workspace:
$a->get_repositories();
+ # Add a repository new_repository for the actual workspace (via full path):
+ $a->add_repository(/DEV300/new_repository);
=head1 DESCRIPTION
@@ -559,6 +563,11 @@ SourceConfig::get_repositories()
Returns sorted list of active repositories for the actual workspace
+SourceConfig::add_repository(REPOSITORY_PATH)
+
+Adds a repository to the list of active repositories
+
+
SourceConfig::get_active_modules()
Returns a sorted list of active modules
@@ -622,6 +631,7 @@ Removes all activated repositories from the source_config file
SourceConfig::new()
SourceConfig::get_version()
SourceConfig::get_repositories()
+SourceConfig::add_repository()
SourceConfig::get_active_modules()
SourceConfig::get_all_modules()
SourceConfig::get_module_path($module)
diff --git a/solenv/inc/minor.mk b/solenv/inc/minor.mk
index a4d473a07001..f2458486a3b1 100644
--- a/solenv/inc/minor.mk
+++ b/solenv/inc/minor.mk
@@ -1,5 +1,5 @@
RSCVERSION=330
-RSCREVISION=330m3(Build:9519)
-BUILD=9519
-LAST_MINOR=m3
+RSCREVISION=330m4(Build:9520)
+BUILD=9520
+LAST_MINOR=m4
SOURCEVERSION=OOO330
diff --git a/starmath/inc/format.hxx b/starmath/inc/format.hxx
index f632131d834f..4d13ea48185e 100644..100755
--- a/starmath/inc/format.hxx
+++ b/starmath/inc/format.hxx
@@ -109,6 +109,7 @@ class SmFormat : public SfxBroadcaster
USHORT vSize[SIZ_END + 1];
USHORT vDist[DIS_END + 1];
SmHorAlign eHorAlign;
+ INT16 nGreekCharStyle;
BOOL bIsTextmode,
bScaleNormalBrackets;
@@ -138,6 +139,9 @@ public:
BOOL IsTextmode() const { return bIsTextmode; }
void SetTextmode(BOOL bVal) { bIsTextmode = bVal; }
+ INT16 GetGreekCharStyle() const { return nGreekCharStyle; }
+ void SetGreekCharStyle(INT16 nVal) { nGreekCharStyle = nVal; }
+
BOOL IsScaleNormalBrackets() const { return bScaleNormalBrackets; }
void SetScaleNormalBrackets(BOOL bVal) { bScaleNormalBrackets = bVal; }
diff --git a/starmath/inc/node.hxx b/starmath/inc/node.hxx
index 6ef89ea5ec1b..92c9d4621292 100644
--- a/starmath/inc/node.hxx
+++ b/starmath/inc/node.hxx
@@ -311,19 +311,10 @@ class SmTextNode : public SmVisibleNode
USHORT nFontDesc;
protected:
- SmTextNode(SmNodeType eNodeType, const SmToken &rNodeToken, USHORT nFontDescP)
- : SmVisibleNode(eNodeType, rNodeToken)
- {
- nFontDesc = nFontDescP;
- }
+ SmTextNode(SmNodeType eNodeType, const SmToken &rNodeToken, USHORT nFontDescP );
public:
- SmTextNode(const SmToken &rNodeToken, USHORT nFontDescP)
- : SmVisibleNode(NTEXT, rNodeToken)
- {
- nFontDesc = nFontDescP;
- }
-
+ SmTextNode(const SmToken &rNodeToken, USHORT nFontDescP );
USHORT GetFontDesc() const { return nFontDesc; }
void SetText(const XubString &rText) { aText = rText; }
@@ -347,15 +338,13 @@ public:
class SmSpecialNode : public SmTextNode
{
+ bool bIsFromGreekSymbolSet;
+
protected:
- SmSpecialNode(SmNodeType eNodeType, const SmToken &rNodeToken, USHORT _nFontDesc)
- : SmTextNode(eNodeType, rNodeToken, _nFontDesc)
- {}
+ SmSpecialNode(SmNodeType eNodeType, const SmToken &rNodeToken, USHORT _nFontDesc);
public:
- SmSpecialNode(const SmToken &rNodeToken)
- : SmTextNode(NSPECIAL, rNodeToken, FNT_MATH) //! default Font nicht immer richtig
- {}
+ SmSpecialNode(const SmToken &rNodeToken);
virtual void Prepare(const SmFormat &rFormat, const SmDocShell &rDocShell);
virtual void Arrange(const OutputDevice &rDev, const SmFormat &rFormat);
diff --git a/starmath/inc/symbol.hxx b/starmath/inc/symbol.hxx
index 503859485095..51e8ad0b8642 100644
--- a/starmath/inc/symbol.hxx
+++ b/starmath/inc/symbol.hxx
@@ -38,7 +38,10 @@
#include <map>
#include <vector>
#include <set>
+#include <functional>
+#include <algorithm>
+#include "unomodel.hxx"
#include "utility.hxx"
#include "smmod.hxx"
@@ -133,6 +136,15 @@ typedef std::map< String, SmSym, lt_String > SymbolMap_t;
// vector of pointers to the actual symbols in the above container
typedef std::vector< const SmSym * > SymbolPtrVec_t;
+struct lt_SmSymPtr : public std::binary_function< const SmSym *, const SmSym *, bool >
+{
+ bool operator() ( const SmSym *pSym1, const SmSym *pSym2 )
+ {
+ return pSym1->GetCharacter() < pSym2->GetCharacter();
+ }
+};
+
+
class SmSymbolManager : public SfxListener
{
SymbolMap_t m_aSymbols;
diff --git a/starmath/source/cfgitem.cxx b/starmath/source/cfgitem.cxx
index bf62157a30d3..43c0fbe27dd0 100644
--- a/starmath/source/cfgitem.cxx
+++ b/starmath/source/cfgitem.cxx
@@ -42,7 +42,6 @@ using namespace com::sun::star;
using namespace com::sun::star::uno;
using namespace com::sun::star::beans;
-#define A2OU(x) rtl::OUString::createFromAscii( x )
static const char* aRootName = "Office.Math";
@@ -127,6 +126,7 @@ static const char * aMathPropNames[] =
static const char * aFormatPropNames[] =
{
"StandardFormat/Textmode",
+ "StandardFormat/GreekCharStyle",
"StandardFormat/ScaleNormalBracket",
"StandardFormat/HorizontalAlignment",
"StandardFormat/BaseSize",
@@ -994,6 +994,10 @@ void SmMathConfig::LoadFormat()
if (pVal->hasValue() && (*pVal >>= bTmp))
pFormat->SetTextmode( bTmp );
++pVal;
+ // StandardFormat/GreekCharStyle
+ if (pVal->hasValue() && (*pVal >>= nTmp16))
+ pFormat->SetGreekCharStyle( nTmp16 );
+ ++pVal;
// StandardFormat/ScaleNormalBracket
if (pVal->hasValue() && (*pVal >>= bTmp))
pFormat->SetScaleNormalBrackets( bTmp );
@@ -1069,6 +1073,8 @@ void SmMathConfig::SaveFormat()
// StandardFormat/Textmode
*pValue++ <<= (BOOL) pFormat->IsTextmode();
+ // StandardFormat/GreekCharStyle
+ *pValue++ <<= (INT16) pFormat->GetGreekCharStyle();
// StandardFormat/ScaleNormalBracket
*pValue++ <<= (BOOL) pFormat->IsScaleNormalBrackets();
// StandardFormat/HorizontalAlignment
diff --git a/starmath/source/dialog.cxx b/starmath/source/dialog.cxx
index 037f2fc1dff8..0dc58c8ed640 100644
--- a/starmath/source/dialog.cxx
+++ b/starmath/source/dialog.cxx
@@ -1485,6 +1485,7 @@ IMPL_LINK( SmSymbolDialog, GetClickHdl, Button *, EMPTYARG pButton )
{
XubString aText ('%');
aText += pSym->GetName();
+ aText += (sal_Unicode)' ';
rViewSh.GetViewFrame()->GetDispatcher()->Execute(
SID_INSERTTEXT, SFX_CALLMODE_STANDARD,
@@ -1600,6 +1601,9 @@ BOOL SmSymbolDialog::SelectSymbolSet(const XubString &rSymbolSetName)
aSymbolSetName = rSymbolSetName;
aSymbolSet = rSymbolMgr.GetSymbolSet( aSymbolSetName );
+ // sort symbols by Unicode position (useful for displaying Greek characters alphabetically)
+ std::sort( aSymbolSet.begin(), aSymbolSet.end(), lt_SmSymPtr() );
+
aSymbolSetDisplay.SetSymbolSet( aSymbolSet );
if (aSymbolSet.size() > 0)
SelectSymbol(0);
diff --git a/starmath/source/document.cxx b/starmath/source/document.cxx
index 49739af72972..ab1382b97879 100644
--- a/starmath/source/document.cxx
+++ b/starmath/source/document.cxx
@@ -131,9 +131,9 @@ void SmDocShell::SFX_NOTIFY(SfxBroadcaster&, const TypeId&,
{
case HINT_FORMATCHANGED:
SetFormulaArranged(FALSE);
- nModifyCount++; //! merkwuerdig...
- // ohne dies wird die Grafik letztlich
- // nicht geupdatet
+
+ nModifyCount++; //! see comment for SID_GAPHIC_SM in SmDocShell::GetState
+
Repaint();
break;
}
@@ -211,11 +211,19 @@ void SmDocShell::SetFormat(SmFormat& rFormat)
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::SetFormat" );
aFormat = rFormat;
- SetFormulaArranged(FALSE);
- SmViewShell *pViewSh = SmGetActiveView();
- if (pViewSh)
- pViewSh->GetViewFrame()->GetBindings().Invalidate(SID_GAPHIC_SM);
- SetModified(TRUE);
+ SetFormulaArranged( FALSE );
+ SetModified( TRUE );
+
+ nModifyCount++; //! see comment for SID_GAPHIC_SM in SmDocShell::GetState
+
+ // don't use SmGetActiveView since the view shell might not be active (0 pointer)
+ // if for example the Basic Macro dialog currently has the focus. Thus:
+ SfxViewFrame* pFrm = SfxViewFrame::GetFirst( this );
+ while (pFrm)
+ {
+ pFrm->GetBindings().Invalidate(SID_GAPHIC_SM);
+ pFrm = SfxViewFrame::GetNext( *pFrm, this );
+ }
}
String SmDocShell::GetAccessibleText()
@@ -241,7 +249,7 @@ void SmDocShell::Parse()
delete pTree;
ReplaceBadChars();
pTree = aInterpreter.Parse(aText);
- nModifyCount++;
+ nModifyCount++; //! see comment for SID_GAPHIC_SM in SmDocShell::GetState
SetFormulaArranged( FALSE );
}
@@ -1123,13 +1131,9 @@ void SmDocShell::Execute(SfxRequest& rReq)
case SID_TEXT:
{
- const SfxStringItem& rItem =
- (const SfxStringItem&)rReq.GetArgs()->Get(SID_TEXT);
-
+ const SfxStringItem& rItem = (const SfxStringItem&)rReq.GetArgs()->Get(SID_TEXT);
if (GetText() != rItem.GetValue())
- {
SetText(rItem.GetValue());
- }
}
break;
@@ -1222,6 +1226,10 @@ void SmDocShell::GetState(SfxItemSet &rSet)
break;
case SID_GAPHIC_SM:
+ //! very old (pre UNO) and ugly hack to invalidate the SmGraphicWindow.
+ //! If nModifyCount gets changed then the call below will implicitly notify
+ //! SmGraphicController::StateChanged and there the window gets invalidated.
+ //! Thus all the 'nModifyCount++' before invalidating this slot.
rSet.Put(SfxInt16Item(SID_GAPHIC_SM, nModifyCount));
break;
diff --git a/starmath/source/edit.cxx b/starmath/source/edit.cxx
index f7093f9c3815..020376c05dfb 100644
--- a/starmath/source/edit.cxx
+++ b/starmath/source/edit.cxx
@@ -252,6 +252,7 @@ IMPL_LINK( SmEditWindow, ModifyTimerHdl, Timer *, EMPTYARG /*pTimer*/ )
SmModule *pp = SM_MOD();
if (pp->GetConfig()->IsAutoRedraw())
Flush();
+ aModifyTimer.Stop();
return 0;
}
@@ -279,6 +280,7 @@ IMPL_LINK(SmEditWindow, CursorMoveTimerHdl, Timer *, EMPTYARG /*pTimer*/)
aOldSelection = aNewSelection;
}
}
+ aCursorMoveTimer.Stop();
return 0;
}
@@ -435,7 +437,7 @@ void SmEditWindow::KeyInput(const KeyEvent& rKEvt)
SmViewShell *pView = GetView();
if ( pView && !pView->KeyInput(rKEvt) )
{
- /* fuert bei F1 (Hilfe) zum Zerstoeren von this! */
+ /* fuert bei F1 (Hilfe) zum Zerstoeren von this! */
Flush();
if ( aModifyTimer.IsActive() )
aModifyTimer.Stop();
@@ -734,6 +736,9 @@ void SmEditWindow::InsertCommand(USHORT nCommand)
pEditView->SetSelection(aSelection);
}
+ aModifyTimer.Start();
+ aCursorMoveTimer.Start();
+
GrabFocus();
}
}
@@ -917,7 +922,11 @@ void SmEditWindow::InsertText(const String& Text)
{
DBG_ASSERT( pEditView, "EditView missing" );
if (pEditView)
+ {
pEditView->InsertText(Text);
+ aModifyTimer.Start();
+ aCursorMoveTimer.Start();
+ }
}
void SmEditWindow::Flush()
@@ -928,9 +937,11 @@ void SmEditWindow::Flush()
pEditEngine->ClearModifyFlag();
SmViewShell *pViewSh = rCmdBox.GetView();
if (pViewSh)
+ {
pViewSh->GetViewFrame()->GetDispatcher()->Execute(
SID_TEXT, SFX_CALLMODE_STANDARD,
new SfxStringItem(SID_TEXT, GetText()), 0L);
+ }
}
if (aCursorMoveTimer.IsActive())
diff --git a/starmath/source/format.cxx b/starmath/source/format.cxx
index 18aaed4c841c..e92d1a5e97aa 100644
--- a/starmath/source/format.cxx
+++ b/starmath/source/format.cxx
@@ -112,8 +112,9 @@ SmFormat::SmFormat()
{
nVersion = SM_FMT_VERSION_NOW;
- eHorAlign = AlignCenter;
- bIsTextmode = bScaleNormalBrackets = FALSE;
+ eHorAlign = AlignCenter;
+ nGreekCharStyle = 0;
+ bIsTextmode = bScaleNormalBrackets = FALSE;
vSize[SIZ_TEXT] = 100;
vSize[SIZ_INDEX] = 60;
@@ -191,6 +192,7 @@ SmFormat & SmFormat::operator = (const SmFormat &rFormat)
SetVersion (rFormat.GetVersion());
SetHorAlign(rFormat.GetHorAlign());
SetTextmode(rFormat.IsTextmode());
+ SetGreekCharStyle(rFormat.GetGreekCharStyle());
SetScaleNormalBrackets(rFormat.IsScaleNormalBrackets());
USHORT i;
@@ -212,6 +214,7 @@ BOOL SmFormat::operator == (const SmFormat &rFormat) const
{
BOOL bRes = aBaseSize == rFormat.aBaseSize &&
eHorAlign == rFormat.eHorAlign &&
+ nGreekCharStyle == rFormat.nGreekCharStyle &&
bIsTextmode == rFormat.bIsTextmode &&
bScaleNormalBrackets == rFormat.bScaleNormalBrackets;
diff --git a/starmath/source/makefile.mk b/starmath/source/makefile.mk
index 596060397e18..a409e55d2462 100644
--- a/starmath/source/makefile.mk
+++ b/starmath/source/makefile.mk
@@ -36,6 +36,8 @@ LIBTARGET=NO
# --- Settings -----------------------------------------------------
+ENABLE_EXCEPTIONS=TRUE
+
.INCLUDE : settings.mk
# --- Files --------------------------------------------------------
@@ -84,24 +86,6 @@ SLOFILES = \
$(SLO1FILES) \
$(SLO2FILES)
-EXCEPTIONSFILES = \
- $(SLO)$/register.obj \
- $(SLO)$/accessibility.obj \
- $(SLO)$/cfgitem.obj \
- $(SLO)$/dialog.obj \
- $(SLO)$/document.obj \
- $(SLO)$/node.obj \
- $(SLO)$/parse.obj \
- $(SLO)$/mathmlimport.obj \
- $(SLO)$/mathmlexport.obj \
- $(SLO)$/mathtype.obj \
- $(SLO)$/smdll.obj \
- $(SLO)$/view.obj \
- $(SLO)$/unomodel.obj \
- $(SLO)$/smdetect.obj \
- $(SLO)$/symbol.obj \
- $(SLO)$/unodoc.obj
-
LIB1TARGET = \
$(SLB)$/$(TARGET).lib
diff --git a/starmath/source/mathmlexport.cxx b/starmath/source/mathmlexport.cxx
index 36eb9d3884b5..bec69eb01b95 100644
--- a/starmath/source/mathmlexport.cxx
+++ b/starmath/source/mathmlexport.cxx
@@ -75,7 +75,6 @@
#include <memory>
#include "mathmlexport.hxx"
-#include "mathtype.hxx"
#include <starmath.hrc>
#include <unomodel.hxx>
#include <document.hxx>
diff --git a/starmath/source/mathmlimport.cxx b/starmath/source/mathmlimport.cxx
index dd90caaf6d45..36c009757eac 100644
--- a/starmath/source/mathmlimport.cxx
+++ b/starmath/source/mathmlimport.cxx
@@ -71,7 +71,6 @@ one go*/
#include <memory>
#include "mathmlimport.hxx"
-#include "mathtype.hxx"
#include <starmath.hrc>
#include <unomodel.hxx>
#include <document.hxx>
diff --git a/starmath/source/node.cxx b/starmath/source/node.cxx
index 4601b2f84fec..b986a046b205 100644..100755
--- a/starmath/source/node.cxx
+++ b/starmath/source/node.cxx
@@ -28,7 +28,14 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_starmath.hxx"
-#define APPEND(str,ascii) str.AppendAscii(RTL_CONSTASCII_STRINGPARAM(ascii))
+#include "node.hxx"
+#include "rect.hxx"
+#include "symbol.hxx"
+#include "smmod.hxx"
+#include "document.hxx"
+#include "view.hxx"
+#include "mathtype.hxx"
+
#include <tools/gen.hxx>
#include <tools/fract.hxx>
#include <rtl/math.hxx>
@@ -38,23 +45,14 @@
#include <vcl/outdev.hxx>
#include <sfx2/module.hxx>
-
-#include "node.hxx"
-#include <rect.hxx>
-#include "symbol.hxx"
-#include "smmod.hxx"
-#include <document.hxx>
-#include <view.hxx>
-#ifndef _MATHTYPE_HXX
-#include "mathtype.hxx"
-#endif
-
#include <math.h>
#include <float.h>
// define this to draw rectangles for debugging
//#define SM_RECT_DEBUG
+#define APPEND(str,ascii) str.AppendAscii(RTL_CONSTASCII_STRINGPARAM(ascii))
+
////////////////////////////////////////
// SmTmpDevice
// Allows for font and color changes. The original settings will be restored
@@ -2355,6 +2353,20 @@ void SmRectangleNode::Draw(OutputDevice &rDev, const Point &rPosition) const
/**************************************************************************/
+SmTextNode::SmTextNode( SmNodeType eNodeType, const SmToken &rNodeToken, USHORT nFontDescP ) :
+ SmVisibleNode(eNodeType, rNodeToken)
+{
+ nFontDesc = nFontDescP;
+}
+
+
+SmTextNode::SmTextNode( const SmToken &rNodeToken, USHORT nFontDescP ) :
+ SmVisibleNode(NTEXT, rNodeToken)
+{
+ nFontDesc = nFontDescP;
+}
+
+
void SmTextNode::Prepare(const SmFormat &rFormat, const SmDocShell &rDocShell)
{
SmNode::Prepare(rFormat, rDocShell);
@@ -2798,6 +2810,36 @@ void SmAttributNode::CreateTextFromNode(String &rText)
/**************************************************************************/
+bool lcl_IsFromGreekSymbolSet( const String &rTokenText )
+{
+ bool bRes = false;
+
+ // valid symbol name needs to have a '%' at pos 0 and at least an additonal char
+ if (rTokenText.Len() > 2 && rTokenText.GetBuffer()[0] == (sal_Unicode)'%')
+ {
+ String aName( rTokenText.Copy(1) );
+ SmSym *pSymbol = SM_MOD()->GetSymbolManager().GetSymbolByName( aName );
+ if (pSymbol && GetExportSymbolSetName( pSymbol->GetSymbolSetName() ).EqualsAscii( "Greek" ) )
+ bRes = true;
+ }
+
+ return bRes;
+}
+
+
+SmSpecialNode::SmSpecialNode(SmNodeType eNodeType, const SmToken &rNodeToken, USHORT _nFontDesc) :
+ SmTextNode(eNodeType, rNodeToken, _nFontDesc)
+{
+ bIsFromGreekSymbolSet = lcl_IsFromGreekSymbolSet( rNodeToken.aText );
+}
+
+
+SmSpecialNode::SmSpecialNode(const SmToken &rNodeToken) :
+ SmTextNode(NSPECIAL, rNodeToken, FNT_MATH) //! default Font nicht immer richtig
+{
+ bIsFromGreekSymbolSet = lcl_IsFromGreekSymbolSet( rNodeToken.aText );
+}
+
void SmSpecialNode::Prepare(const SmFormat &rFormat, const SmDocShell &rDocShell)
{
@@ -2806,7 +2848,8 @@ void SmSpecialNode::Prepare(const SmFormat &rFormat, const SmDocShell &rDocShell
const SmSym *pSym;
SmModule *pp = SM_MOD();
- if (NULL != (pSym = pp->GetSymbolManager().GetSymbolByName(GetToken().aText)))
+ String aName( GetToken().aText.Copy(1) );
+ if (NULL != (pSym = pp->GetSymbolManager().GetSymbolByName( aName )))
{
SetText( pSym->GetCharacter() );
GetFont() = pSym->GetFace();
@@ -2832,6 +2875,33 @@ void SmSpecialNode::Prepare(const SmFormat &rFormat, const SmDocShell &rDocShell
SetAttribut(ATTR_BOLD);
Flags() |= FLG_FONT;
+
+ if (bIsFromGreekSymbolSet)
+ {
+ DBG_ASSERT( GetText().Len() == 1, "a symbol should only consist of 1 char!" );
+ bool bItalic = false;
+ INT16 nStyle = rFormat.GetGreekCharStyle();
+ DBG_ASSERT( nStyle >= 0 && nStyle <= 2, "unexpected value for GreekCharStyle" );
+ if (nStyle == 1)
+ bItalic = true;
+ else if (nStyle == 2)
+ {
+ String aTmp( GetText() );
+ if (aTmp.Len() > 0)
+ {
+ const sal_Unicode cUppercaseAlpha = 0x0391;
+ const sal_Unicode cUppercaseOmega = 0x03A9;
+ sal_Unicode cChar = aTmp.GetBuffer()[0];
+ // uppercase letters should be straight and lowercase letters italic
+ bItalic = !(cUppercaseAlpha <= cChar && cChar <= cUppercaseOmega);
+ }
+ }
+
+ if (bItalic)
+ Attributes() |= ATTR_ITALIC;
+ else
+ Attributes() &= ~ATTR_ITALIC;;
+ }
};
diff --git a/starmath/source/parse.cxx b/starmath/source/parse.cxx
index 15971d0c38af..d12f3df07400 100755
--- a/starmath/source/parse.cxx
+++ b/starmath/source/parse.cxx
@@ -741,14 +741,14 @@ void SmParser::NextToken()
CurToken.nLevel = 5;
CurToken.aText = String();
CurToken.nRow = sal::static_int_cast< xub_StrLen >(Row);
- CurToken.nCol = nTmpStart - ColOff + 1;
+ CurToken.nCol = nTmpStart - ColOff;
if (aTmpRes.TokenType & KParseType::IDENTNAME)
{
xub_StrLen n = sal::static_int_cast< xub_StrLen >(aTmpRes.EndPos - nTmpStart);
CurToken.eType = TSPECIAL;
- CurToken.aText = BufferString.Copy( sal::static_int_cast< xub_StrLen >(nTmpStart), n );
+ CurToken.aText = BufferString.Copy( sal::static_int_cast< xub_StrLen >(nTmpStart-1), n+1 );
DBG_ASSERT( aTmpRes.EndPos > rnEndPos,
"empty identifier" );
diff --git a/starmath/source/symbol.cxx b/starmath/source/symbol.cxx
index e248f9726629..5208ce3644ce 100644
--- a/starmath/source/symbol.cxx
+++ b/starmath/source/symbol.cxx
@@ -290,6 +290,28 @@ void SmSymbolManager::Load()
DBG_ERROR( "no symbol set found" );
m_bModified = false;
}
+
+ // now add a %i... symbol to the 'iGreek' set for every symbol found in the 'Greek' set.
+ SmLocalizedSymbolData aLocalizedData;
+ const String aGreekSymbolSetName( aLocalizedData.GetUiSymbolSetName( A2OU("Greek") ) );
+ const SymbolPtrVec_t aGreekSymbols( GetSymbolSet( aGreekSymbolSetName ) );
+ String aSymbolSetName( (sal_Unicode) 'i' );
+ aSymbolSetName += aGreekSymbolSetName;
+ size_t nSymbols = aGreekSymbols.size();
+ for (size_t i = 0; i < nSymbols; ++i)
+ {
+ // make the new symbol a copy but with ITALIC_NORMAL, and add it to iGreek
+ const SmSym &rSym = *aGreekSymbols[i];
+ Font aFont( rSym.GetFace() );
+ DBG_ASSERT( aFont.GetItalic() == ITALIC_NONE, "expected Font with ITALIC_NONE, failed." );
+ aFont.SetItalic( ITALIC_NORMAL );
+ String aSymbolName( (sal_Unicode)'i' );
+ aSymbolName += rSym.GetName();
+ SmSym aSymbol( aSymbolName, aFont, rSym.GetCharacter(),
+ aSymbolSetName, TRUE /*bIsPredefined*/ );
+
+ AddOrReplaceSymbol( aSymbol );
+ }
}
void SmSymbolManager::Save()
@@ -314,10 +336,21 @@ void SmSymbolManager::Save()
}
DBG_ASSERT(pSym - pSymbols == nSaveSymbolCnt, "wrong number of symbols" );
#endif
+
+ // prepare to skip symbols from iGreek on saving
+ SmLocalizedSymbolData aLocalizedData;
+ String aSymbolSetName( (sal_Unicode) 'i' );
+ aSymbolSetName += aLocalizedData.GetUiSymbolSetName( A2OU("Greek") );
+
SymbolPtrVec_t aTmp( GetSymbols() );
std::vector< SmSym > aSymbols;
for (size_t i = 0; i < aTmp.size(); ++i)
- aSymbols.push_back( *aTmp[i] );
+ {
+ // skip symbols from iGreek set since those symbols always get added
+ // by computational means in SmSymbolManager::Load
+ if (aTmp[i]->GetSymbolSetName() != aSymbolSetName)
+ aSymbols.push_back( *aTmp[i] );
+ }
rCfg.SetSymbols( aSymbols );
#if 0
delete [] pSymbols;
diff --git a/starmath/source/types.cxx b/starmath/source/types.cxx
index a861db5a0c79..e63d46c79e9b 100644
--- a/starmath/source/types.cxx
+++ b/starmath/source/types.cxx
@@ -38,7 +38,7 @@ sal_Unicode ConvertMathPrivateUseAreaToUnicode( sal_Unicode cChar )
if (IsInPrivateUseArea( cChar ))
{
DBG_ASSERT( 0, "Error: private use area characters should no longer be in use!" );
- cRes = (sal_Unicode) '&'; // just some character that should easily be notice as odd in the context
+ cRes = (sal_Unicode) '@'; // just some character that should easily be notice as odd in the context
}
return cRes;
}
diff --git a/starmath/source/unomodel.cxx b/starmath/source/unomodel.cxx
index 013831f6e44e..9d008f326d2f 100755
--- a/starmath/source/unomodel.cxx
+++ b/starmath/source/unomodel.cxx
@@ -203,6 +203,7 @@ enum SmModelPropertyHandles
HANDLE_RELATIVE_FONT_HEIGHT_OPERATORS,
HANDLE_RELATIVE_FONT_HEIGHT_LIMITS,
HANDLE_IS_TEXT_MODE,
+ HANDLE_GREEK_CHAR_STYLE,
HANDLE_ALIGNMENT,
HANDLE_RELATIVE_SPACING,
HANDLE_RELATIVE_LINE_SPACING,
@@ -273,6 +274,7 @@ PropertySetInfo * lcl_createModelPropertyInfo ()
{ RTL_CONSTASCII_STRINGPARAM( "Formula" ), HANDLE_FORMULA , &::getCppuType((const OUString*)0), PROPERTY_NONE, 0},
{ RTL_CONSTASCII_STRINGPARAM( "IsScaleAllBrackets" ), HANDLE_IS_SCALE_ALL_BRACKETS , &::getBooleanCppuType(), PROPERTY_NONE, 0},
{ RTL_CONSTASCII_STRINGPARAM( "IsTextMode" ), HANDLE_IS_TEXT_MODE , &::getBooleanCppuType(), PROPERTY_NONE, 0},
+ { RTL_CONSTASCII_STRINGPARAM( "GreekCharStyle" ), HANDLE_GREEK_CHAR_STYLE, &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, 0},
{ RTL_CONSTASCII_STRINGPARAM( "LeftMargin" ), HANDLE_LEFT_MARGIN , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_LEFTSPACE },
{ RTL_CONSTASCII_STRINGPARAM( "PrinterName" ), HANDLE_PRINTER_NAME , &::getCppuType((const OUString*)0), PROPERTY_NONE, 0 },
{ RTL_CONSTASCII_STRINGPARAM( "PrinterSetup" ), HANDLE_PRINTER_SETUP , &::getCppuType((const Sequence < sal_Int8 >*)0), PROPERTY_NONE, 0 },
@@ -593,6 +595,16 @@ void SmModel::_setPropertyValues(const PropertyMapEntry** ppEntries, const Any*
}
break;
+ case HANDLE_GREEK_CHAR_STYLE :
+ {
+ sal_Int16 nVal = 0;
+ *pValues >>= nVal;
+ if (nVal < 0 || nVal > 2)
+ throw IllegalArgumentException();
+ aFormat.SetGreekCharStyle( nVal );
+ }
+ break;
+
case HANDLE_ALIGNMENT :
{
// SmHorAlign uses the same values as HorizontalAlignment
@@ -824,6 +836,10 @@ void SmModel::_getPropertyValues( const PropertyMapEntry **ppEntries, Any *pValu
}
break;
+ case HANDLE_GREEK_CHAR_STYLE :
+ *pValue <<= (sal_Int16)aFormat.GetGreekCharStyle();
+ break;
+
case HANDLE_ALIGNMENT :
// SmHorAlign uses the same values as HorizontalAlignment
*pValue <<= (sal_Int16)aFormat.GetHorAlign();
diff --git a/starmath/source/view.cxx b/starmath/source/view.cxx
index 886d409931b2..0087595703ca 100755
--- a/starmath/source/view.cxx
+++ b/starmath/source/view.cxx
@@ -1545,8 +1545,7 @@ void SmViewShell::Execute(SfxRequest& rReq)
case SID_INSERTTEXT:
{
const SfxStringItem& rItem =
- (const SfxStringItem&)rReq.GetArgs()->Get(SID_INSERTTEXT);
-
+ (const SfxStringItem&)rReq.GetArgs()->Get(SID_INSERTTEXT);
if (pWin)
pWin->InsertText(rItem.GetValue());
break;
diff --git a/sw/source/core/edit/edlingu.cxx b/sw/source/core/edit/edlingu.cxx
index d99293071048..c9ab4a591383 100644
--- a/sw/source/core/edit/edlingu.cxx
+++ b/sw/source/core/edit/edlingu.cxx
@@ -1318,8 +1318,12 @@ void SwEditShell::MoveContinuationPosToEndOfCheckedSentence()
void SwEditShell::ApplyChangedSentence(const ::svx::SpellPortions& rNewPortions, bool bRecheck)
{
+ // Note: rNewPortions.size() == 0 is valid and happens when the whole
+ // sentence got removed in the dialog
+
ASSERT( pSpellIter, "SpellIter missing" );
- if(pSpellIter)
+ if(pSpellIter &&
+ pSpellIter->GetLastPortions().size() > 0) // no portions -> no text to be changed
{
const SpellPortions& rLastPortions = pSpellIter->GetLastPortions();
const SpellContentPositions rLastPositions = pSpellIter->GetLastPositions();
@@ -1330,9 +1334,6 @@ void SwEditShell::ApplyChangedSentence(const ::svx::SpellPortions& rNewPortions,
// iterate over the new portions, beginning at the end to take advantage of the previously
// saved content positions
- if(!rLastPortions.size())
- return;
-
pDoc->StartUndo( UNDO_OVERWRITE, NULL );
StartAction();
@@ -1344,6 +1345,10 @@ void SwEditShell::ApplyChangedSentence(const ::svx::SpellPortions& rNewPortions,
sal_uInt32 nRedlinePortions = lcl_CountRedlines(rLastPortions);
if((rLastPortions.size() - nRedlinePortions) == rNewPortions.size())
{
+ DBG_ASSERT( rNewPortions.size() > 0, "rNewPortions should not be empty here" );
+ DBG_ASSERT( rLastPortions.size() > 0, "rLastPortions should not be empty here" );
+ DBG_ASSERT( rLastPositions.size() > 0, "rLastPositions should not be empty here" );
+
//the simple case: the same number of elements on both sides
//each changed element has to be applied to the corresponding source element
svx::SpellPortions::const_iterator aCurrentNewPortion = rNewPortions.end();
@@ -1357,8 +1362,17 @@ void SwEditShell::ApplyChangedSentence(const ::svx::SpellPortions& rNewPortions,
//jump over redline portions
while(aCurrentOldPortion->bIsHidden)
{
- --aCurrentOldPortion;
- --aCurrentOldPosition;
+ if (aCurrentOldPortion != rLastPortions.begin() &&
+ aCurrentOldPosition != rLastPositions.begin())
+ {
+ --aCurrentOldPortion;
+ --aCurrentOldPosition;
+ }
+ else
+ {
+ DBG_ASSERT( 0, "ApplyChangedSentence: iterator positions broken" );
+ break;
+ }
}
if ( !pCrsr->HasMark() )
pCrsr->SetMark();
@@ -1398,6 +1412,8 @@ void SwEditShell::ApplyChangedSentence(const ::svx::SpellPortions& rNewPortions,
}
else
{
+ DBG_ASSERT( rLastPositions.size() > 0, "rLastPositions should not be empty here" );
+
//select the complete sentence
SpellContentPositions::const_iterator aCurrentEndPosition = rLastPositions.end();
--aCurrentEndPosition;
diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx
index ba932c33c479..24f36b047a4e 100644
--- a/sw/source/filter/ww8/ww8par.cxx
+++ b/sw/source/filter/ww8/ww8par.cxx
@@ -1857,7 +1857,7 @@ void SwWW8ImplReader::Read_HdFt(bool bIsTitle, int nSect,
bool wwSectionManager::SectionIsProtected(const wwSection &rSection) const
{
- return (!rSection.IsNotProtected());
+ return (mrReader.pWwFib->fReadOnlyRecommended && !rSection.IsNotProtected());
}
void wwSectionManager::SetHdFt(wwSection &rSection, int nSect,
diff --git a/sw/source/filter/ww8/ww8par.hxx b/sw/source/filter/ww8/ww8par.hxx
index 025cf0f588f4..c87035f208a1 100644
--- a/sw/source/filter/ww8/ww8par.hxx
+++ b/sw/source/filter/ww8/ww8par.hxx
@@ -1164,6 +1164,7 @@ private:
bool GetFontParams(USHORT, FontFamily&, String&, FontPitch&,
rtl_TextEncoding&);
bool SetNewFontAttr(USHORT nFCode, bool bSetEnums, USHORT nWhich);
+ USHORT CorrectResIdForCharset(CharSet nCharSet, USHORT nWhich);
void ResetCharSetVars();
void ResetCJKCharSetVars();
diff --git a/sw/source/filter/ww8/ww8par6.cxx b/sw/source/filter/ww8/ww8par6.cxx
index 1588944e179b..b298f3721b00 100644
--- a/sw/source/filter/ww8/ww8par6.cxx
+++ b/sw/source/filter/ww8/ww8par6.cxx
@@ -3551,6 +3551,23 @@ bool SwWW8ImplReader::GetFontParams( USHORT nFCode, FontFamily& reFamily,
return true;
}
+USHORT SwWW8ImplReader::CorrectResIdForCharset(CharSet nCharSet, USHORT nWhich)
+{
+ USHORT nResult = 0;
+
+ switch (nCharSet) {
+ case RTL_TEXTENCODING_MS_932:
+ nResult = RES_CHRATR_CJK_FONT;
+ break;
+
+ default:
+ nResult = nWhich;
+ break;
+ }
+
+ return nResult;
+}
+
bool SwWW8ImplReader::SetNewFontAttr(USHORT nFCode, bool bSetEnums,
USHORT nWhich)
{
@@ -3600,6 +3617,8 @@ bool SwWW8ImplReader::SetNewFontAttr(USHORT nFCode, bool bSetEnums,
SvxFontItem aFont( eFamily, aName, aEmptyStr, ePitch, eDstCharSet, nWhich);
+ nWhich = CorrectResIdForCharset(eSrcCharSet, nWhich);
+
if( bSetEnums )
{
if( pAktColl ) // StyleDef
diff --git a/sw/uiconfig/sglobal/toolbar/findbar.xml b/sw/uiconfig/sglobal/toolbar/findbar.xml
index 9ef9d8a1a78f..078c0fc5bed5 100644
--- a/sw/uiconfig/sglobal/toolbar/findbar.xml
+++ b/sw/uiconfig/sglobal/toolbar/findbar.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE toolbar:toolbar PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "toolbar.dtd">
<toolbar:toolbar xmlns:toolbar="http://openoffice.org/2001/toolbar" xmlns:xlink="http://www.w3.org/1999/xlink" toolbar:id="toolbar">
- <toolbar:toolbaritem xlink:href=".uno:FindText" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:DownSearch" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:UpSearch" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:SearchDialog" toolbar:text="Find &amp; Replace" toolbar:visible="false" toolbar:helpid="helpid:100105"/>
+ <toolbar:toolbaritem xlink:href=".uno:FindText"/>
+ <toolbar:toolbaritem xlink:href=".uno:DownSearch"/>
+ <toolbar:toolbaritem xlink:href=".uno:UpSearch"/>
+ <toolbar:toolbaritem xlink:href=".uno:SearchDialog" toolbar:visible="false"/>
</toolbar:toolbar>
diff --git a/sw/uiconfig/sweb/toolbar/findbar.xml b/sw/uiconfig/sweb/toolbar/findbar.xml
index 9ef9d8a1a78f..0338d3156195 100644
--- a/sw/uiconfig/sweb/toolbar/findbar.xml
+++ b/sw/uiconfig/sweb/toolbar/findbar.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE toolbar:toolbar PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "toolbar.dtd">
<toolbar:toolbar xmlns:toolbar="http://openoffice.org/2001/toolbar" xmlns:xlink="http://www.w3.org/1999/xlink" toolbar:id="toolbar">
- <toolbar:toolbaritem xlink:href=".uno:FindText" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:DownSearch" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:UpSearch" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:SearchDialog" toolbar:text="Find &amp; Replace" toolbar:visible="false" toolbar:helpid="helpid:100105"/>
+ <toolbar:toolbaritem xlink:href=".uno:FindText"/>
+ <toolbar:toolbaritem xlink:href=".uno:DownSearch"/>
+ <toolbar:toolbaritem xlink:href=".uno:UpSearch"/>
+ <toolbar:toolbaritem xlink:href=".uno:SearchDialog" toolbar:visible="false"/>
</toolbar:toolbar>
diff --git a/sw/uiconfig/swriter/toolbar/findbar.xml b/sw/uiconfig/swriter/toolbar/findbar.xml
index 9ef9d8a1a78f..0338d3156195 100644
--- a/sw/uiconfig/swriter/toolbar/findbar.xml
+++ b/sw/uiconfig/swriter/toolbar/findbar.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE toolbar:toolbar PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "toolbar.dtd">
<toolbar:toolbar xmlns:toolbar="http://openoffice.org/2001/toolbar" xmlns:xlink="http://www.w3.org/1999/xlink" toolbar:id="toolbar">
- <toolbar:toolbaritem xlink:href=".uno:FindText" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:DownSearch" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:UpSearch" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:SearchDialog" toolbar:text="Find &amp; Replace" toolbar:visible="false" toolbar:helpid="helpid:100105"/>
+ <toolbar:toolbaritem xlink:href=".uno:FindText"/>
+ <toolbar:toolbaritem xlink:href=".uno:DownSearch"/>
+ <toolbar:toolbaritem xlink:href=".uno:UpSearch"/>
+ <toolbar:toolbaritem xlink:href=".uno:SearchDialog" toolbar:visible="false"/>
</toolbar:toolbar>
diff --git a/sw/uiconfig/swxform/toolbar/findbar.xml b/sw/uiconfig/swxform/toolbar/findbar.xml
index 9ef9d8a1a78f..0338d3156195 100644
--- a/sw/uiconfig/swxform/toolbar/findbar.xml
+++ b/sw/uiconfig/swxform/toolbar/findbar.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE toolbar:toolbar PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "toolbar.dtd">
<toolbar:toolbar xmlns:toolbar="http://openoffice.org/2001/toolbar" xmlns:xlink="http://www.w3.org/1999/xlink" toolbar:id="toolbar">
- <toolbar:toolbaritem xlink:href=".uno:FindText" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:DownSearch" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:UpSearch" toolbar:helpid="helpid:100105" />
- <toolbar:toolbaritem xlink:href=".uno:SearchDialog" toolbar:text="Find &amp; Replace" toolbar:visible="false" toolbar:helpid="helpid:100105"/>
+ <toolbar:toolbaritem xlink:href=".uno:FindText"/>
+ <toolbar:toolbaritem xlink:href=".uno:DownSearch"/>
+ <toolbar:toolbaritem xlink:href=".uno:UpSearch"/>
+ <toolbar:toolbaritem xlink:href=".uno:SearchDialog" toolbar:visible="false"/>
</toolbar:toolbar>
diff --git a/vcl/aqua/source/gdi/salprn.cxx b/vcl/aqua/source/gdi/salprn.cxx
index 1c0401f769b5..ff4edcbf83f9 100644
--- a/vcl/aqua/source/gdi/salprn.cxx
+++ b/vcl/aqua/source/gdi/salprn.cxx
@@ -445,7 +445,7 @@ ULONG AquaSalInfoPrinter::GetCapabilities( const ImplJobSetup* i_pSetupData, USH
case PRINTER_CAPABILITIES_COPIES:
return 0xffff;
case PRINTER_CAPABILITIES_COLLATECOPIES:
- return 0;
+ return 0xffff;
case PRINTER_CAPABILITIES_SETORIENTATION:
return 1;
case PRINTER_CAPABILITIES_SETDUPLEX:
@@ -634,6 +634,8 @@ BOOL AquaSalInfoPrinter::StartJob( const String* i_pFileName,
}
[pPrintDict setObject: [[NSNumber numberWithInt: nCopies] autorelease] forKey: NSPrintCopies];
+ if( nCopies > 1 )
+ [pPrintDict setObject: [[NSNumber numberWithBool: pPrinter->IsCollateCopy()] autorelease] forKey: NSPrintMustCollate];
[pPrintDict setObject: [[NSNumber numberWithBool: YES] autorelease] forKey: NSPrintDetailedErrorReporting];
[pPrintDict setObject: [[NSNumber numberWithInt: 1] autorelease] forKey: NSPrintFirstPage];
// #i103253# weird: for some reason, autoreleasing the value below like the others above
diff --git a/vcl/source/gdi/print3.cxx b/vcl/source/gdi/print3.cxx
index 191f8f26dc75..0aeb928856fc 100644..100755
--- a/vcl/source/gdi/print3.cxx
+++ b/vcl/source/gdi/print3.cxx
@@ -594,12 +594,20 @@ bool Printer::StartJob( const rtl::OUString& i_rJobName, boost::shared_ptr<vcl::
i_pController->jobStarted();
int nJobs = 1;
- int nRepeatCount = bUserCopy ? mnCopyCount : 1;
+ int nOuterRepeatCount = 1;
+ int nInnerRepeatCount = 1;
+ if( bUserCopy )
+ {
+ if( mbCollateCopy )
+ nOuterRepeatCount = mnCopyCount;
+ else
+ nInnerRepeatCount = mnCopyCount;
+ }
if( bSinglePrintJobs )
{
nJobs = mnCopyCount;
nCopies = 1;
- nRepeatCount = 1;
+ nOuterRepeatCount = nInnerRepeatCount = 1;
}
for( int nJobIteration = 0; nJobIteration < nJobs; nJobIteration++ )
@@ -616,13 +624,21 @@ bool Printer::StartJob( const rtl::OUString& i_rJobName, boost::shared_ptr<vcl::
mbJobActive = TRUE;
i_pController->createProgressDialog();
int nPages = i_pController->getFilteredPageCount();
- for( int nIteration = 0; nIteration < nRepeatCount; nIteration++ )
+ for( int nOuterIteration = 0; nOuterIteration < nOuterRepeatCount; nOuterIteration++ )
{
for( int nPage = 0; nPage < nPages; nPage++ )
{
- if( nPage == nPages-1 && nIteration == nRepeatCount-1 && nJobIteration == nJobs-1 )
- i_pController->setLastPage( sal_True );
- i_pController->printFilteredPage( nPage );
+ for( int nInnerIteration = 0; nInnerIteration < nInnerRepeatCount; nInnerIteration++ )
+ {
+ if( nPage == nPages-1 &&
+ nOuterIteration == nOuterRepeatCount-1 &&
+ nInnerIteration == nInnerRepeatCount-1 &&
+ nJobIteration == nJobs-1 )
+ {
+ i_pController->setLastPage( sal_True );
+ }
+ i_pController->printFilteredPage( nPage );
+ }
}
// FIXME: duplex ?
}
diff --git a/vcl/source/window/printdlg.cxx b/vcl/source/window/printdlg.cxx
index 52f54db0e50e..d0fae33acf3b 100644
--- a/vcl/source/window/printdlg.cxx
+++ b/vcl/source/window/printdlg.cxx
@@ -498,8 +498,10 @@ void PrintDialog::NUpTabPage::showAdvancedControls( bool i_bShow )
void PrintDialog::NUpTabPage::setupLayout()
{
- Size aBorder( LogicToPixel( Size( 5, 5 ), MapMode( MAP_APPFONT ) ) );
- long nIndent = 3*aBorder.Width();
+ Size aBorder( LogicToPixel( Size( 6, 6 ), MapMode( MAP_APPFONT ) ) );
+ /* According to OOo style guide, the horizontal indentation of child
+ elements to their parent element should always be 6 map units. */
+ long nIndent = aBorder.Width();
maLayout.setParentWindow( this );
maLayout.setOuterBorder( aBorder.Width() );
diff --git a/writerfilter/inc/dmapper/DomainMapper.hxx b/writerfilter/inc/dmapper/DomainMapper.hxx
index d119e0e84312..99602ceab924 100644
--- a/writerfilter/inc/dmapper/DomainMapper.hxx
+++ b/writerfilter/inc/dmapper/DomainMapper.hxx
@@ -145,8 +145,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/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/source/doctok/doctokutil.cxx b/writerfilter/inc/resourcemodel/ResourceModelHelper.hxx
index 7d94b525550b..c1c500545055 100644
--- a/writerfilter/source/doctok/doctokutil.cxx
+++ b/writerfilter/inc/resourcemodel/ResourceModelHelper.hxx
@@ -24,30 +24,17 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
+#ifndef INCLUDED_RESOURCE_MODEL_HELPER_HXX
+#define INCLUDED_RESOURCE_MODEL_HELPER_HXX
-#include <util.hxx>
-
-using namespace ::std;
+#include <resourcemodel/WW8ResourceModel.hxx>
namespace writerfilter {
-namespace doctok {
-void util_assert(bool bTest)
-{
- if (! bTest)
- clog << "ASSERT!\n" << endl;
-}
+namespace resourcemodel {
-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 << ".";
- }
-}
+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/inc/resourcemodel/TagLogger.hxx b/writerfilter/inc/resourcemodel/TagLogger.hxx
index cf58dc3be8c3..055656832761 100644
--- a/writerfilter/inc/resourcemodel/TagLogger.hxx
+++ b/writerfilter/inc/resourcemodel/TagLogger.hxx
@@ -28,7 +28,10 @@
#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>
#include <resourcemodel/WW8ResourceModel.hxx>
#include <string>
@@ -76,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;
@@ -93,6 +98,7 @@ namespace writerfilter
stack<XMLTag::Pointer_t> mTags;
XMLTag::Pointer_t currentTag() const;
XMLTag::Pointer_t mpRoot;
+ string mFileName;
TagLogger();
@@ -101,12 +107,15 @@ 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);
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);
@@ -142,5 +151,9 @@ 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
#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/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/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 64af3a953eef..65dfb4c5fcec 100644
--- 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 <NumberingManager.hxx>
@@ -69,6 +70,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>
@@ -98,6 +100,10 @@ using namespace ::com::sun::star;
using namespace ::rtl;
namespace writerfilter {
+
+using resourcemodel::resolveSprmProps;
+using resourcemodel::resolveAttributeProperties;
+
namespace dmapper{
#ifdef DEBUG_DOMAINMAPPER
@@ -198,6 +204,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 );
@@ -1459,7 +1468,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 */
@@ -2133,6 +2142,36 @@ 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 );
+ }
+ }
+ 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
@@ -2167,7 +2206,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!");
@@ -2176,14 +2215,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;
@@ -2221,8 +2253,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 */
@@ -2297,7 +2330,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()));
}
@@ -2430,7 +2463,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
@@ -2584,7 +2617,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 );
@@ -2641,8 +2674,16 @@ 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_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
@@ -2692,7 +2733,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 */
@@ -2701,7 +2742,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)))
@@ -2729,7 +2770,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
@@ -2843,6 +2884,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 );
@@ -3079,7 +3127,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)
@@ -3109,7 +3157,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 */
@@ -3515,7 +3563,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)
{
@@ -3525,7 +3573,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)
@@ -3570,8 +3618,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
*/
@@ -3589,7 +3638,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
@@ -3718,11 +3776,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;
@@ -3739,58 +3797,58 @@ 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;
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 */
- resolveSprmProps(rSprm);
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ resolveSprmProps(*this, 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 );
- 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 );
@@ -3827,7 +3885,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:
@@ -3839,7 +3897,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)
{
@@ -3853,7 +3911,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)
{
@@ -3908,6 +3966,9 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
}
}
break;
+ case NS_ooxml::LN_EG_SectPrContents_docGrid:
+ resolveSprmProps(*this, rSprm);
+ break;
case NS_ooxml::LN_EG_SectPrContents_pgBorders:
{
writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
@@ -3960,7 +4021,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:
@@ -4003,7 +4064,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 */
@@ -4104,7 +4165,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 )
@@ -4160,7 +4221,21 @@ 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 */
+ 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_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:
{
@@ -4173,7 +4248,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---------------------------------------------------
@@ -4183,13 +4259,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---------------------------------------------------
@@ -4357,6 +4433,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)
@@ -4423,11 +4505,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& )
@@ -4819,21 +4896,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/DomainMapperTableManager.cxx b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
index 452391fe6300..8783421faaaf 100644
--- a/writerfilter/source/dmapper/DomainMapperTableManager.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
@@ -99,14 +99,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();
@@ -132,9 +132,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 )
@@ -147,8 +147,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())
@@ -178,8 +178,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())
@@ -193,14 +193,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">
@@ -216,8 +216,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
@@ -227,10 +227,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 );
@@ -238,14 +239,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 );
@@ -253,8 +254,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");
@@ -264,13 +265,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( ) ) );
@@ -278,9 +280,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( ) ) );
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index c6d347a37281..4c176b59b4ef 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
@@ -89,269 +90,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
- /* 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;
@@ -2543,6 +2281,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 >() );
@@ -2585,11 +2327,74 @@ 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;
+
+ 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
-----------------------------------------------------------------------*/
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() )
@@ -2601,89 +2406,499 @@ 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")), "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 },
+// {::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)
-----------------------------------------------------------------------*/
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() )
{
- static FieldConversionMap_t aFieldConversionMap;
- static bool bFilled = false;
m_bSetUserFieldContent = false;
- if(!bFilled)
- {
- static const FieldConversion aFields[] =
- {
- // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ADDRESSBLOCK")), "", "", FIELD_ADDRESSBLOCK },
- // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ADVANCE")), "", "", FIELD_ADVANCE },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ASK")), "SetExpression", "SetExpression", FIELD_ASK },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTONUM")), "SetExpression", "SetExpression", FIELD_AUTONUM },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTONUMLGL")), "SetExpression", "SetExpression", FIELD_AUTONUMLGL },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTONUMOUT")), "SetExpression", "SetExpression", FIELD_AUTONUMOUT },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTHOR")), "Author", "", FIELD_AUTHOR },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DATE")), "DateTime", "", FIELD_DATE },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("COMMENTS")), "DocInfo.Description", "", FIELD_COMMENTS },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CREATEDATE")), "DocInfo.CreateDateTime", "", FIELD_CREATEDATE },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DOCPROPERTY")), "", "", FIELD_DOCPROPERTY },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DOCVARIABLE")), "User", "", FIELD_DOCVARIABLE },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("EDITTIME")), "DocInfo.EditTime", "", FIELD_EDITTIME },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FILLIN")), "Input", "", FIELD_FILLIN },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FILENAME")), "FileName", "", FIELD_FILENAME },
- // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FILESIZE")), "", "", FIELD_FILESIZE },
- // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMULA")), "", "", FIELD_FORMULA
- // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GOTOBUTTON")), "", "", FIELD_GOTOBUTTON },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HYPERLINK")), "", "", FIELD_HYPERLINK },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IF")), "ConditionalText", "", FIELD_IF },
- // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("INFO")), "","", FIELD_INFO },
- // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("INCLUDEPICTURE")), "", "", FIELD_INCLUDEPICTURE},
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("KEYWORDS")), "DocInfo.KeyWords", "", FIELD_KEYWORDS },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LASTSAVEDBY")), "DocInfo.ChangeAuthor", "", FIELD_LASTSAVEDBY },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MACROBUTTON")), "Macro", "", FIELD_MACROBUTTON },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MERGEFIELD")), "Database", "Database", FIELD_MERGEFIELD},
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MERGEREC")), "DatabaseNumberOfSet", "", FIELD_MERGEREC },
- // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MERGESEQ")), "", "", FIELD_MERGESEQ },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NEXT")), "DatabaseNextSet", "", FIELD_NEXT },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NEXTIF")), "DatabaseNextSet", "", FIELD_NEXTIF },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PAGE")), "PageNumber", "", FIELD_PAGE },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("REF")), "GetReference", "", FIELD_REF },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("REVNUM")), "DocInfo.Revision", "", FIELD_REVNUM },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SAVEDATE")), "DocInfo.Change", "", FIELD_SAVEDATE },
- // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SECTION")), "", "", FIELD_SECTION },
- // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SECTIONPAGES")), "", "", FIELD_SECTIONPAGES },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SEQ")), "SetExpression", "SetExpression", FIELD_SEQ },
- // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SET")), "","", FIELD_SET },
- // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SKIPIF")),"", "", FIELD_SKIPIF },
- // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("STYLEREF")),"", "", FIELD_STYLEREF },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SUBJECT")), "DocInfo.Subject", "", FIELD_SUBJECT },
- // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SYMBOL")),"", "", FIELD_SYMBOL },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TEMPLATE")), "TemplateName", "", FIELD_TEMPLATE},
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TIME")), "DateTime", "", FIELD_TIME },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TITLE")), "DocInfo.Title", "", FIELD_TITLE },
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("USERINITIALS")), "ExtendedUser", "", FIELD_USERINITIALS},
- // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("USERADDRESS")), "", "", FIELD_USERADDRESS },
- // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("USERNAME")), "ExtendedUser", "", FIELD_USERNAME }
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TOC")), "com.sun.star.text.ContentIndex", "", FIELD_TOC},
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TC")), "com.sun.star.text.ContentIndexMark", "", FIELD_TC},
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NUMCHARS")), "CharacterCount", "", FIELD_NUMCHARS},
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NUMWORDS")), "WordCount", "", FIELD_NUMWORDS},
- {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NUMPAGES")), "PageCount", "", FIELD_NUMPAGES},
-
- // {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")), "", "", FIELD_},
-
- };
- size_t nConversions = sizeof(aFields)/sizeof(FieldConversion);
- for( size_t nConversion = 0; nConversion < nConversions; ++nConversion)
- {
- aFieldConversionMap.insert( FieldConversionMap_t::value_type(
- aFields[nConversion].sWordCommand,
- aFields[nConversion] ));
- }
+ FieldConversionMap_t aFieldConversionMap = lcl_GetFieldConversion();
- bFilled = true;
- }
try
{
uno::Reference< uno::XInterface > xFieldInterface;
@@ -2697,14 +2912,31 @@ 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."));
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);
}
@@ -2714,69 +2946,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:
{
@@ -2807,86 +2985,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 :
{
@@ -2919,13 +3018,79 @@ void DomainMapper_Impl::CloseFieldCommand()
break;
case FIELD_FILESIZE : break;
case FIELD_FORMULA : 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 :
+ {
+ 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;
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 aPartIt = aParts.begin();
+
+ OUString sURL;
+
+ while (aPartIt != aItEnd)
+ {
+ if (aPartIt->equalsAscii("\\l"))
+ {
+ aPartIt++;
+
+ if (aPartIt == aItEnd)
+ break;
+
+ sURL = OUString('#');
+ sURL += *aPartIt;
+ }
+ else if (aPartIt->equalsAscii("\\m") ||
+ aPartIt->equalsAscii("\\n"))
+ {
+ }
+ else if (aPartIt->equalsAscii("\\o") ||
+ aPartIt->equalsAscii("\\t"))
+ {
+ aPartIt++;
+
+ if (aPartIt == aItEnd)
+ break;
+ }
+ else
+ {
+ sURL = *aPartIt;
+ }
+
+ aPartIt++;
+ }
+
+ if (sURL.getLength() > 0)
+ {
+ pContext->SetHyperlinkURL(sURL);
+ }
}
break;
case FIELD_IF : break;
@@ -3065,211 +3230,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 :
{
@@ -3343,6 +3305,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() )
@@ -3388,11 +3355,32 @@ 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
-----------------------------------------------------------------------*/
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() )
@@ -3426,15 +3414,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)
+ {
+ uno::Reference<text::XTextRange> xTxtRange(xCrsr, uno::UNO_QUERY);
+ pFormControlHelper->insertControl(xTxtRange);
+ }
+ 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()));
+ }
}
}
}
@@ -3757,4 +3753,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 00881d45968f..145e19412a75 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -52,6 +52,8 @@
#include <SettingsTable.hxx>
#include <GraphicImport.hxx>
#include <OLEHandler.hxx>
+#include <FFDataHandler.hxx>
+#include <FormControlHelper.hxx>
#include <map>
#include <string.h>
@@ -134,6 +136,8 @@ 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;
+ FormControlHelper::Pointer_t m_pFormControlHelper;
public:
FieldContext(::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xStart);
@@ -159,6 +163,13 @@ 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; }
+
+ void setFormControlHelper(FormControlHelper::Pointer_t pFormControlHelper) { m_pFormControlHelper = pFormControlHelper; }
+ FormControlHelper::Pointer_t getFormControlHelper() const { return m_pFormControlHelper; }
+
+ ::std::vector<rtl::OUString> GetCommandParts() const;
};
struct TextAppendContext
@@ -487,12 +498,40 @@ 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
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();
@@ -557,7 +596,7 @@ public:
void ResetParaRedline( );
void ApplySettingsTable();
-
+ SectionPropertyMap * GetSectionContext();
};
} //namespace dmapper
} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/FFData.xml b/writerfilter/source/dmapper/FFData.xml
new file mode 100644
index 000000000000..525f59391dc4
--- /dev/null
+++ b/writerfilter/source/dmapper/FFData.xml
@@ -0,0 +1,58 @@
+<model>
+ <class name="FFDataHandler">
+ <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="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"/>
+ <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="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/FFDataHandler.cxx b/writerfilter/source/dmapper/FFDataHandler.cxx
new file mode 100644
index 000000000000..9f9430401161
--- /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
+ 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
+ break;
+ }
+}
+
+}}
diff --git a/writerfilter/source/dmapper/FFDataHandler.hxx b/writerfilter/source/dmapper/FFDataHandler.hxx
new file mode 100644
index 000000000000..fb7a4ccee950
--- /dev/null
+++ b/writerfilter/source/dmapper/FFDataHandler.hxx
@@ -0,0 +1,161 @@
+/*************************************************************************
+ *
+ * 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_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;
+
+ // constructor
+ FFDataHandler();
+ // destructor
+ virtual ~FFDataHandler();
+
+ // member: name
+ void setName(const rtl::OUString & r_sName);
+ const rtl::OUString & getName() const;
+
+ // 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/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
new file mode 100644
index 000000000000..eebf921f4963
--- /dev/null
+++ b/writerfilter/source/dmapper/FormControlHelper.cxx
@@ -0,0 +1,309 @@
+/*************************************************************************
+ *
+ * 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 <math.h>
+
+#include <com/sun/star/awt/XControlModel.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/container/XIndexContainer.hpp>
+#include <com/sun/star/drawing/XControlShape.hpp>
+#include <com/sun/star/drawing/XDrawPage.hpp>
+#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
+#include <com/sun/star/form/XForm.hpp>
+#include <com/sun/star/form/XFormComponent.hpp>
+#include <com/sun/star/form/XFormsSupplier.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/text/TextContentAnchorType.hpp>
+#include <com/sun/star/text/VertOrientation.hpp>
+#include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/uno/Type.hxx>
+
+#include "FormControlHelper.hxx"
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+
+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<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())
+ rServiceFactory = uno::Reference<lang::XMultiServiceFactory>(rTextDocument, uno::UNO_QUERY);
+
+ return rServiceFactory;
+}
+
+uno::Reference<form::XForm> FormControlHelper::FormControlHelper_Impl::getForm()
+{
+ if (! rForm.is())
+ {
+ uno::Reference<form::XFormsSupplier> xFormsSupplier(getDrawPage(), uno::UNO_QUERY);
+
+ if (xFormsSupplier.is())
+ {
+ uno::Reference<container::XNameContainer> xFormsNamedContainer(xFormsSupplier->getForms());
+ static ::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);
+ 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);
+ xForms->insertByIndex(xForms->getCount(), aAny);
+ }
+ }
+
+ return rForm;
+}
+
+uno::Reference<container::XIndexContainer> FormControlHelper::FormControlHelper_Impl::getFormComps()
+{
+ uno::Reference<container::XIndexContainer> xIndexContainer(getForm(), uno::UNO_QUERY);
+
+ return xIndexContainer;
+}
+
+FormControlHelper::FormControlHelper(FieldId eFieldId,
+ uno::Reference<text::XTextDocument> rTextDocument,
+ FFDataHandler::Pointer_t pFFData)
+ : m_pFFData(pFFData), m_pImpl(new FormControlHelper_Impl)
+{
+ m_pImpl->m_eFieldId = eFieldId;
+ m_pImpl->rTextDocument = rTextDocument;
+}
+
+FormControlHelper::~FormControlHelper()
+{
+}
+
+bool FormControlHelper::createCheckbox(uno::Reference<text::XTextRange> xTextRange,
+ const ::rtl::OUString & rControlName)
+{
+ uno::Reference<lang::XMultiServiceFactory>
+ xServiceFactory(m_pImpl->getServiceFactory());
+
+ if (! xServiceFactory.is())
+ return false;
+
+ uno::Reference<uno::XInterface> xInterface =
+ xServiceFactory->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);
+
+ 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 = 0.0;
+ xTextRangeProps->getPropertyValue(sCharHeight) >>= fCheckBoxHeight;
+ nCheckBoxHeight = floor(fCheckBoxHeight * 35.3);
+ }
+ catch (beans::UnknownPropertyException & rException)
+ {
+ }
+ }
+
+ m_pImpl->aSize.Width = nCheckBoxHeight;
+ 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("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);
+ }
+
+ aAny <<= rControlName;
+ xPropSet->setPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Name")), aAny);
+
+ return true;
+}
+
+bool FormControlHelper::insertControl(uno::Reference<text::XTextRange> xTextRange)
+{
+ 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(xTextRange, sControlName);
+ break;
+ default:
+ break;
+ }
+
+ if (!bCreated)
+ return false;
+
+ uno::Any 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::CENTER;
+ aAny <<= nTmp;
+ xShapeProps->setPropertyValue(sVertOrient, aAny);
+
+ aAny <<= xTextRange;
+
+ 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);
+
+ m_pImpl->getDrawPage()->add(xShape);
+
+ return true;
+}
+
+}}
diff --git a/writerfilter/source/dmapper/FormControlHelper.hxx b/writerfilter/source/dmapper/FormControlHelper.hxx
new file mode 100644
index 000000000000..21b50912a039
--- /dev/null
+++ b/writerfilter/source/dmapper/FormControlHelper.hxx
@@ -0,0 +1,64 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_FORM_CONTROL_HELPER_HXX
+#define INCLUDED_FORM_CONTROL_HELPER_HXX
+
+#include <FFDataHandler.hxx>
+#include <com/sun/star/text/XTextDocument.hpp>
+#include <com/sun/star/uno/Reference.hxx>
+#include "FieldTypes.hxx"
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+
+class FormControlHelper
+{
+public:
+ typedef boost::shared_ptr<FormControlHelper> Pointer_t;
+ FormControlHelper(FieldId eFieldId,
+ uno::Reference<text::XTextDocument> rTextDocument,
+ FFDataHandler::Pointer_t pFFData);
+ ~FormControlHelper();
+
+ bool insertControl(uno::Reference<text::XTextRange> xTextRange);
+
+private:
+ FFDataHandler::Pointer_t m_pFFData;
+ struct FormControlHelper_Impl;
+ typedef boost::shared_ptr<FormControlHelper_Impl> ImplPointer_t;
+ ImplPointer_t m_pImpl;
+
+ bool createCheckbox(uno::Reference<text::XTextRange> xTextRange,
+ const ::rtl::OUString & rControlName);
+};
+
+}
+}
+
+#endif // INCLUDED_FORM_CONTROL_HELPER_HXX
diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx
index fb99f254ef86..abb2ca46a9c9 100644
--- a/writerfilter/source/dmapper/PropertyIds.cxx
+++ b/writerfilter/source/dmapper/PropertyIds.cxx
@@ -320,6 +320,8 @@ const rtl::OUString& PropertyNameSupplier::GetName( PropertyIds eId ) const
case PROP_OUTLINE_LEVEL : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("OutlineLevel")); 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("ParaSplit")); break;
+ case PROP_HELP: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Help")); break;
case PROP_HEADING_STYLE_NAME: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeadingStyleName")); 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 1d5992cc212c..2066cf58f530 100644
--- a/writerfilter/source/dmapper/PropertyIds.hxx
+++ b/writerfilter/source/dmapper/PropertyIds.hxx
@@ -284,6 +284,8 @@ enum PropertyIds
/*248*/ ,PROP_LISTTAB_STOP_POSITION
/*249*/ ,PROP_POSITION_AND_SPACE_MODE
/*250*/ ,PROP_HEADING_STYLE_NAME
+/*251*/ ,PROP_PARA_SPLIT
+/*252*/ ,PROP_HELP
};
struct PropertyNameSupplier_Impl;
class PropertyNameSupplier
diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx
index aa8a29c5e6a2..11930fb01972 100644
--- a/writerfilter/source/dmapper/PropertyMap.cxx
+++ b/writerfilter/source/dmapper/PropertyMap.cxx
@@ -40,6 +40,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 <com/sun/star/text/XTextCopy.hpp>
#include "dmapperLoggers.hxx"
#include "PropertyMapHelper.hxx"
@@ -155,6 +156,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 (...) {
}
@@ -244,6 +257,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 )
@@ -274,7 +288,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 )
@@ -908,6 +922,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 0efe7e3ba433..16886530f324 100644
--- a/writerfilter/source/dmapper/PropertyMap.hxx
+++ b/writerfilter/source/dmapper/PropertyMap.hxx
@@ -193,6 +193,7 @@ class SectionPropertyMap : public PropertyMap
bool m_bGutterRTL;
bool m_bSFBiDi;
+ sal_Int32 m_nGridType;
sal_Int32 m_nGridLinePitch;
sal_Int32 m_nDxtCharSpace;
@@ -266,6 +267,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; }
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/SettingsTable.cxx b/writerfilter/source/dmapper/SettingsTable.cxx
index deb65c7c8cba..e711240b65d0 100644
--- a/writerfilter/source/dmapper/SettingsTable.cxx
+++ b/writerfilter/source/dmapper/SettingsTable.cxx
@@ -28,6 +28,7 @@
*
************************************************************************/
+#include <resourcemodel/ResourceModelHelper.hxx>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <SettingsTable.hxx>
@@ -37,7 +38,15 @@
#include <ConversionHelper.hxx>
#include <rtl/ustring.hxx>
+#ifdef DEBUG_DOMAINMAPPER
+#include <resourcemodel/QNameToString.hxx>
+#include "dmapperLoggers.hxx"
+#endif
+
namespace writerfilter {
+
+using resourcemodel::resolveSprmProps;
+
namespace dmapper
{
@@ -56,6 +65,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 )
@@ -65,6 +89,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)
{}
};
@@ -79,8 +110,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();
@@ -99,10 +137,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();
@@ -184,11 +230,20 @@ 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()");
}
}
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("SettingsTable.sprm");
+#endif
}
void SettingsTable::entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index 8b2dbc4d9756..5f2e2268abb8 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -417,6 +417,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");
@@ -534,10 +535,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;
}
@@ -599,7 +599,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
@@ -682,19 +681,30 @@ 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 );
- m_pImpl->m_rDMapper.sprm( rSprm );
- m_pImpl->m_rDMapper.PopStyleSheetProperties( );
+ 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 );
+
+ 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
@@ -798,6 +808,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 );
@@ -956,11 +970,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 ( !bIsParaStyleName && !bIsCharStyleName )
+ {
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->element("insert");
+#endif
aSortedPropVals.Insert( aPropValues[nProp] );
+ }
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("propvalue");
+#endif
}
if(bAddFollowStyle)
{
@@ -1009,7 +1036,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;
}
@@ -1020,6 +1055,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---------------------------------------------------
diff --git a/writerfilter/source/dmapper/ThemeTable.cxx b/writerfilter/source/dmapper/ThemeTable.cxx
index ec9d8ea9d5a5..0f0becf06552 100755..100644
--- a/writerfilter/source/dmapper/ThemeTable.cxx
+++ b/writerfilter/source/dmapper/ThemeTable.cxx
@@ -31,6 +31,10 @@
#include <ooxml/resourceids.hxx>
#endif
#include <stdio.h>
+#ifdef DEBUG_DOMAINMAPPER
+#include "dmapperLoggers.hxx"
+#include <resourcemodel/QNameToString.hxx>
+#endif
namespace writerfilter {
namespace dmapper
@@ -59,6 +63,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());
@@ -72,12 +81,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;
@@ -126,14 +146,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
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/dmapper/genclass.xsl b/writerfilter/source/dmapper/genclass.xsl
new file mode 100644
index 000000000000..eaddab52ea0e
--- /dev/null
+++ b/writerfilter/source/dmapper/genclass.xsl
@@ -0,0 +1,707 @@
+<?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="text" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/>
+
+ <xsl:template match="/">
+ <xsl:for-each select="/model/class">
+ <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>
+ <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="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>
+ <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; </xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>();</xsl:text>
+ <xsl:text>&#xa; // destructor</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>
+ <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="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">
+ <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:call-template name="cctype"/>
+ <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">
+ <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: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"/>
+ <xsl:text>::</xsl:text>
+ </xsl:if>
+ <xsl:call-template name="settername"/>
+ <xsl:text>(</xsl:text>
+ <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>
+ </xsl:template>
+
+ <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="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"/>
+ <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>
+ <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: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="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>
+ </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: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="cctype"/>
+ <xsl:text> </xsl:text>
+ <xsl:call-template name="memberid"/>
+ <xsl:text>;</xsl:text>
+ </xsl:for-each>
+ </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: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: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>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>
+
+ <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: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(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>
+ <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 = 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>
+ </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="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"/>
+ <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>
diff --git a/writerfilter/source/dmapper/makefile.mk b/writerfilter/source/dmapper/makefile.mk
index 4b9636855562..300dfb31d959 100644
--- a/writerfilter/source/dmapper/makefile.mk
+++ b/writerfilter/source/dmapper/makefile.mk
@@ -47,6 +47,8 @@ SLOFILES= \
$(SLO)$/DomainMapperTableHandler.obj \
$(SLO)$/DomainMapperTableManager.obj \
$(SLO)$/DomainMapper_Impl.obj \
+ $(SLO)$/FFDataHandler.obj \
+ $(SLO)$/FormControlHelper.obj \
$(SLO)$/FontTable.obj \
$(SLO)$/GraphicHelpers.obj \
$(SLO)$/GraphicImport.obj \
diff --git a/writerfilter/source/doctok/WW8DocumentImpl.cxx b/writerfilter/source/doctok/WW8DocumentImpl.cxx
index 27dfd68e4eb8..fee0abc85fe7 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()
{
@@ -185,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
@@ -1077,6 +1082,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;
@@ -1281,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;
@@ -1632,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>");
@@ -1641,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
@@ -1743,6 +1784,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);
+
writerfilter::Reference<Table>::Pointer_t pListTable = getListTable();
if (pListTable.get() != NULL)
@@ -1845,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 9b123ae54cde..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;
@@ -554,6 +557,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.
*/
sal_uInt32 getHeaderCount() const;
@@ -677,6 +685,13 @@ public:
getField(const CpAndFc & rCpAndFc) const;
/**
+ Return document properties.
+
+ */
+ writerfilter::Reference<Properties>::Pointer_t
+ getDocumentProperties() const;
+
+ /**
Return current field descriptor.
*/
WW8FLD::Pointer_t getCurrentFLD() const;
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/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/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/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/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/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/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/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/resources.xmi b/writerfilter/source/doctok/resources.xmi
index cfcd2ac7e67e..926e046d37b9 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-->
@@ -578,6 +593,4611 @@
</UML:Class>
<!--Resources-->
<!--WW8 resources-->
+ <!--Class DopBase-->
+ <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 DopBase-->
<!--Class ListLevel-->
<UML:Class xmi.id="ListLevel" name="ListLevel">
<UML:ModelElement.stereotype>
@@ -2322,6 +6942,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 +7739,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>
@@ -3140,6 +7766,9 @@
<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>
@@ -4784,7 +9413,13 @@
<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>
@@ -22897,6 +27532,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>
@@ -32214,6 +36852,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>
@@ -38863,6 +43504,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>
@@ -40194,6 +44838,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>
@@ -40258,6 +44905,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>
@@ -40322,6 +44972,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>
@@ -40386,6 +45039,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>
@@ -40450,6 +45106,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>
@@ -40963,6 +45622,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>
@@ -43371,7 +48033,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="offset"/>
</UML:TaggedValue.type>
@@ -43429,7 +48091,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="offset"/>
</UML:TaggedValue.type>
@@ -43487,7 +48149,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="offset"/>
</UML:TaggedValue.type>
diff --git a/writerfilter/source/doctok/resources.xsl b/writerfilter/source/doctok/resources.xsl
index e1fc68ba5323..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>
/**
@@ -319,13 +320,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.
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">
diff --git a/writerfilter/source/filter/ImportFilter.cxx b/writerfilter/source/filter/ImportFilter.cxx
index 911689996b07..10e7cefa591f 100644
--- a/writerfilter/source/filter/ImportFilter.cxx
+++ b/writerfilter/source/filter/ImportFilter.cxx
@@ -87,13 +87,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